Сейчас на форуме: vsv1, NIKOLA, r0lka, johnniewalker (+4 невидимых)

 eXeL@B —› Крэки, обсуждения —› Взлом Alawar игр (отучим от триала)
<< 1 ... 9 . 10 . 11 . 12 . 13 . 14 . 15 . 16 . >>
Посл.ответ Сообщение

Ранг: 330.4 (мудрец), 334thx
Активность: 0.160.17
Статус: Участник
ILSpector Team

Создано: 28 сентября 2006 04:20
· Личное сообщение · #1

Уж извините за форму написания ведь он почти первый (че-то я в последнее время расщедрился)

Мини тутор по снятию триал-защиты с игр от Alawar`a

Инструмент: Shadow with bpmx да голова
Кролик : Игра "Разгадай код Да Винчи"

Как обычно приобрел очередной ComputerBild и на диске прилагаемом к нему нашлась игруха от алавара
"Разгадай Код Да Винчи". На все про все наиграться мне отвели 30 минут а игруха класная новый вариант
Lines.Поскольку я никогда не смотрю что мне нужно оттдать за то чтобы вдоволь насладится очередным
программным продуктом пришлось на время отложить работу и взятся за сей продукт.
При первом рассмотрении PEid нашел Aspr.Периодически лазить в реестр и что нибудь там чистить это не по мне.
Не долго думая обработал поделку stripper`ом.Получилось.Причем stripper сказал что триал инфы
не используются. Уже интересно ДА.
Однако продукт после распаковки запускаться не захотел и улетал в несуществующие адреса.
Как же так несправедливо получается уже потрачено 5 минут драгоценного времени впустую 8-( не отступать
рано продолжим. Загрузил дамп в shadow и своим трейсером дошел до места где вызываются не существующие адреса.
Выглядело это место примерно так call dword [4383a8] где по этому адресу лежало 00401440 естественно указывающее
вникуда. Беда но зачем же отступать. Я рассудил так раз такой call есть значит что-то не до конца обработало
дамп не доведя до ума т.е. при распаковке процедуры приведения проги до нормального вида не включались
а сидели в апи аспра т.е. где то же они есть.Поиском всех референсов на адрес 004383а8 нашлась интересное
место:

1 PUSH da_vinci.0040E36D ; /Arg5 = 0040E36D
2 PUSH DWORD PTR DS:[428F44] ; |Arg4 = 00000000
3 PUSH da_vinci.0042839C ; |Arg3 = 0042839C
4 PUSH da_vinci.004210DC ; |Arg2 = 004210DC ASCII "GetLocaleInfoW"
5 PUSH da_vinci.00420F50 ; |Arg1 = 00420F50 ASCII "kernel32.dll"
6 CALL da_vinci.0040E02F ; \da_vinci.0040E02F
7 JMP DWORD PTR DS:[42839C] ; da_vinci.0040D9F0
8 PUSH da_vinci.0040E24E ; /Arg5 = 0040E24E
9 PUSH DWORD PTR DS:[428F40] ; |Arg4 = 00000000
10 PUSH da_vinci.004283A8<---вот он адресок ; |Arg3 = 004283A8
11 PUSH da_vinci.004210EC а это то что должно быть --> ; |Arg2 = 004210EC ASCII "GetProcAddress"
12 PUSH da_vinci.00420F50 ; |Arg1 = 00420F50 ASCII "kernel32.dll"
13 CALL da_vinci.0040E02F ; \da_vinci.0040E02F
14 JMP DWORD PTR DS:[4283A8]
15 PUSH da_vinci.0040E2AA ; /Arg5 = 0040E2AA
16 PUSH DWORD PTR DS:[428F3C] ; |Arg4 = 00000000
17 PUSH da_vinci.004283B8 ; |Arg3 = 004283B8
18 PUSH da_vinci.004210FC ; |Arg2 = 004210FC ASCII "LoadLibraryW"
19 PUSH da_vinci.00420F50 ; |Arg1 = 00420F50 ASCII "kernel32.dll"
20 CALL da_vinci.0040E02F ; \da_vinci.0040E02F
21 JMP DWORD PTR DS:[4283B8] ; da_vinci.0040DA3A

Осмыслив данный кусок кода начинаю понимать что это то что надо однако ни одного референса на 1 строку
решаю рискнуть выставляю оер на строку 8 и жму F8 до 14 строки и о радость по адресу 4383a8 цифирки
меняются на почти (внимательно) валидные адреса.


1 PUSH da_vinci.0040E36D ; /Arg5 = 0040E36D
2 PUSH DWORD PTR DS:[428F44] ; |Arg4 = 00000000
3 PUSH da_vinci.0042839C ; |Arg3 = 0042839C
4 PUSH da_vinci.004210DC ; |Arg2 = 004210DC ASCII "GetLocaleInfoW"
5 PUSH da_vinci.00420F50 ; |Arg1 = 00420F50 ASCII "kernel32.dll"
6 CALL da_vinci.0040E02F ; \da_vinci.0040E02F
7 JMP DWORD PTR DS:[42839C] ; unicows.GetLocaleInfoW
8 PUSH da_vinci.0040E24E ; /Arg5 = 0040E24E
9 PUSH DWORD PTR DS:[428F40] ; |Arg4 = 00000000
10 PUSH da_vinci.004283A8 ; |Arg3 = 004283A8
11 PUSH da_vinci.004210EC ; |Arg2 = 004210EC ASCII "GetProcAddress"
12 PUSH da_vinci.00420F50 ; |Arg1 = 00420F50 ASCII "kernel32.dll"
13 CALL da_vinci.0040E02F ; \da_vinci.0040E02F
14 JMP DWORD PTR DS:[4283A8] <-видите куда теперь он указывает ; unicows.GetProcAddress

И так если использовать данную процедуру (их кстати 2 не небольшом расстоянии друг от друга
и дальше (естественно пропуская jmp`ы) можно полностью раскодировать импорт, он там небольшой
около 20 имен функций.Но вот зараза если внимательно приглядеться то можно заметить что GetProcAddress
находится не во всеми любимом kernel32.dll а в какои то херне под названием unicows.dll (Кстати
это микрософтовская библиотека я так не хера и не понял зачем она нужна.Плюс с ней программа не пожелала
запускаться. Чтож отступать поздно потрачено уже около 25 минут.Думаю дальше. Далее найдется
до фига желающих меня обласкать за то что я пошел обходным путем однако ничего не попишешь в тот
момент ко мне пришла такая идея. Я взял да подставил в эту микротаблицу импорта правильные адреса
всех фунции т.е. теперь по адресу 4283a8 лежал указатель не на unicows.GetProcAddress а на
kernel32.GetProcAddress.
Все прекрасно прога запустилась но функции триала остались. Думаю дальше ведь времени уже потрачено
около 40 минут.
Анализ данного импорта показал что wrapper юзает функции в том числе CreateFile и CreateProcess,
WriteProcessMemory т.е. по сути wrapper создает отдельный файл и потом его контролирует.
Что ж ставим бряки на эти функции и отпускаем прогу нажимаем в ней продолжать играть и вываливаемся
на создании файла game32.img.(нужно только поменять атрибуты для файла на Normal) Все вроде бы готово.
Уф.Глушим прогу Переименовываем его в game32.exe и пытаемся запустить и...... ОБЛОМ. Прога не
запускается. Думаю дальше. Посмотрим на oep (game32.exe) и видим что не все так просто просто там ничего
нет. Загружаем в олю родителя оставляем бряки на старом месте.СТАРТ. Проходим как описано выше до создания
дочки (game32....) жмем еще раз f9 и вываливаемся на бряке WriteProcessMemory первый пропускаем он просто
записывает дочку а вот когда прогавалится еще раз смотрим что же она пишет и о боги видим что в наш
game32... на место оер записывается 6 байт посмотрев в буфер запоминаем их а затем подправляем наш
game32.exe. все игра заработала..Облегчение.....

P.S. Я не знаю сколько продержится эта защита после опубликования данного минитутора пользуйтесь пока.




Ранг: 462.8 (мудрец), 468thx
Активность: 0.280
Статус: Участник
Only One!

Создано: 03 апреля 2011 02:40
· Личное сообщение · #2

Ктонить ковырял последнии игрушки?
Подскажите как снять врапер.
Восстанавил вроде все байты которые падчаться в процесс WriteProcessMemory... но при запуске когда начинается загрузка ... валиться с ошибкой Access violation - no RTTI data!
Интересно что теперь процесс врапера намертво привязан к процессу игры... если вовремя работы игры погасить процесс врапера игра сворачиваться...
В общем поделитесь пожалуйста мыслями.. что можно сделать.. Может кто копал?
У меня подозрение что игрушка проверяет наличие врапера во время работы, но не найдя валиться..

-----
aLL rIGHTS rEVERSED!




Ранг: 315.1 (мудрец), 631thx
Активность: 0.30.33
Статус: Модератор
CrackLab

Создано: 03 апреля 2011 03:58 · Поправил: SReg
· Личное сообщение · #3

OnLyOnE пишет:
Восстанавил вроде все байты которые падчаться

На последних гамах только лоадер
Ковыряли тут намедни сравнительно большой толпой одну гаму, рабочий файл так и не получили

OnLyOnE пишет:
Интересно что теперь процесс врапера намертво привязан к процессу игры... если вовремя работы игры погасить процесс врапера игра сворачиваться...

Дай ссылку на игру




Ранг: 462.8 (мудрец), 468thx
Активность: 0.280
Статус: Участник
Only One!

Создано: 03 апреля 2011 04:19 · Поправил: OnLyOnE
· Личное сообщение · #4

SReg пишет:
Дай ссылку на игру

--> Папины дочки едут на море <--
и
--> Реальная ферма <--

SReg пишет:
На последних гамах только лоадер

Ну я все таки нашел решение... вроде работает на этих двух играх...
версия враппера -> 3.1.3.1007


943d_02.04.2011_EXELAB.rU.tgz - wrapper.dll

-----
aLL rIGHTS rEVERSED!





Ранг: 568.2 (!), 464thx
Активность: 0.550.57
Статус: Участник
оптимист

Создано: 03 апреля 2011 04:58
· Личное сообщение · #5

SReg пишет:
Интересно что теперь процесс врапера намертво привязан к процессу игры... если вовремя работы игры погасить процесс врапера игра сворачиваться...


Через WriteProcessMenory копируется вот такой код
PUSH EBP
MOV EBP,ESP
PUSH ECX
PUSH ECX
MOV EAX,[EBP+8]
PUSH DWORD PTR [EAX]//PID wraper process
PUSH 0
PUSH 100000
MOV EAX,[EBP+8]
CALL [EAX+4]//kernel32.OpenProcess(открываем процес враппера)
MOV [EBP-4],EAX//записываем дескриптор враппера
CMP DWORD PTR [EBP-4],0//проверяем(если процесс с привилегиями то нам облом)
JE L032
PUSH -1
PUSH DWORD PTR [EBP-4]
MOV EAX,[EBP+8]
CALL [EAX+8]//kernel32.WaitForSingleObject(делаем привязку к врапперу)
PUSH DWORD PTR [EBP-4]//объект сдох
MOV EAX,[EBP+8]
CALL [EAX+14]//kernel32.CloseHandle(закрывает дескриптор процесса)
MOV EAX,[EBP+8]
CALL [EAX+C]//kernel32.GetCurrentProcessId(узнаём PID нашей игры)
PUSH EAX
PUSH 0
PUSH 1
MOV EAX,[EBP+8]
CALL [EAX+4]//kernel32.OpenProcess(открываем процесс нашей игры)
MOV [EBP-8],EAX
PUSH 0
PUSH DWORD PTR [EBP-8]
MOV EAX,[EBP+8]
CALL [EAX+10]//kernel32.TerminateProcess(смерть неверным XDD)
L032:
XOR EAX,EAX
LEAVE
RETN 4

-----
Чтобы правильно задать вопрос, нужно знать большую часть ответа. Р.Шекли.




Ранг: 315.1 (мудрец), 631thx
Активность: 0.30.33
Статус: Модератор
CrackLab

Создано: 03 апреля 2011 07:23 · Поправил: SReg
· Личное сообщение · #6

OnLyOnE пишет:
Реальная ферма

Как вариант --> мувик <--

OnLyOnE пишет:
Ну я все таки нашел решение... вроде работает на этих двух играх...версия враппера -> 3.1.3.1007 943d_02.04.2011_EXELAB.rU.tgz - wrapper.dll

Что то я таки не допер, в чем решение то?
Пропатчить wrapper.dll всегда можно было, как и ключик с него вытащить
Так что без разницы, чей загрузчик, твой или аспровый - это все равно загрузчик. Фишка в том, чтобы программа работала без него, не зря я ж написал что На последних гамах только лоадер Чекает она себя на предмет целки, папины дочки эти




Ранг: 462.8 (мудрец), 468thx
Активность: 0.280
Статус: Участник
Only One!

Создано: 03 апреля 2011 10:13
· Личное сообщение · #7

ClockMan пишет:
Через WriteProcessMenory копируется вот такой код

Это врапер копирует в тело процесса игры?
Хорошо.. а когда игру пытаешься запустить без враппера.. ?

SReg пишет:
Пропатчить wrapper.dll всегда можно было, как и ключик с него вытащить

Подскажи пожалуйста, как ключик в данном случае из него вытащить?
SReg пишет:
Чекает она себя на предмет целки, папины дочки эти

Ты место не нашел случайно?

-----
aLL rIGHTS rEVERSED!





Ранг: 568.2 (!), 464thx
Активность: 0.550.57
Статус: Участник
оптимист

Создано: 03 апреля 2011 10:17
· Личное сообщение · #8

OnLyOnE пишет:
а когда игру пытаешься запустить без враппера.. ?

Ну если файл игры восстановил, то запустится и без враппера.

-----
Чтобы правильно задать вопрос, нужно знать большую часть ответа. Р.Шекли.





Ранг: 462.8 (мудрец), 468thx
Активность: 0.280
Статус: Участник
Only One!

Создано: 03 апреля 2011 10:45
· Личное сообщение · #9

ClockMan пишет:
Ну если файл игры восстановил, то запустится и без враппера.

Восстановил вроде бы... но не работает...
Доходит до открытия окна игры.. появляется курсор... и все... падает
И никак не врублюсь где она чекает себя

-----
aLL rIGHTS rEVERSED!




Ранг: 456.3 (мудрец), 340thx
Активность: 0.280.02
Статус: Участник
Android Reverser

Создано: 03 апреля 2011 10:51
· Личное сообщение · #10

Бгг. Алавар теперь тырит байты не только с оеп. Ищи еще место, там и валиццо у тебя.

-----
SaNX





Ранг: 462.8 (мудрец), 468thx
Активность: 0.280
Статус: Участник
Only One!

Создано: 03 апреля 2011 11:04 · Поправил: OnLyOnE
· Личное сообщение · #11

SaNX пишет:
Бгг. Алавар теперь тырит байты не только с оеп. Ищи еще место, там и валиццо у тебя.

Я восстановил байты и на оер и еще в одном месте

Code:
  1. Вот спертые байты с ОЕР
  2.  
  3. 005B60D5 >  E8 DEE00000           CALL PapasDau.005C41B8
  4. 005B60DA  ^ E9 78FEFFFF           JMP PapasDau.005B5F57
  5. 005B60DF    8BFF                  MOV EDI,EDI
  6. 005B60E1    55                    PUSH EBP
  7. 005B60E2    8BEC                  MOV EBP,ESP
  8. 005B60E4    51                    PUSH ECX
  9. 005B60E5    53                    PUSH EBX
  10. 005B60E6    8B45 0C               MOV EAX,DWORD PTR SS:[EBP+C]
  11. 005B60E9    83C0 0C               ADD EAX,0C
  12. 005B60EC    8945 FC               MOV DWORD PTR SS:[EBP-4],EAX
  13. 005B60EF    64:8B1D 00000000      MOV EBX,DWORD PTR FS:[0]
  14. 005B60F6    8B03                  MOV EAX,DWORD PTR DS:[EBX]
  15. 005B60F8    64:A3 00000000        MOV DWORD PTR FS:[0],EAX
  16. 005B60FE    8B45 08               MOV EAX,DWORD PTR SS:[EBP+8]
  17. 005B6101    8B5D 0C               MOV EBX,DWORD PTR SS:[EBP+C]
  18. 005B6104    8B6D FC               MOV EBP,DWORD PTR SS:[EBP-4]
  19. 005B6107    8B63 FC               MOV ESP,DWORD PTR DS:[EBX-4]
  20. 005B610A    FFE0                  JMP EAX

Code:
  1. Вот еще место, где были сперты байты
  2.  
  3. 005B7840    8BFF                  MOV EDI,EDI
  4. 005B7842    55                    PUSH EBP
  5. 005B7843    8BEC                  MOV EBP,ESP
  6. 005B7845    53                    PUSH EBX
  7. 005B7846    8B5D 08               MOV EBX,DWORD PTR SS:[EBP+8]
  8. 005B7849    56                    PUSH ESI
  9. 005B784A    8BF1                  MOV ESI,ECX
  10. 005B784C    C706 6CE46400         MOV DWORD PTR DS:[ESI],PapasDau.0064E46C
  11. 005B7852    8B43 08               MOV EAX,DWORD PTR DS:[EBX+8]
  12. 005B7855    8946 08               MOV DWORD PTR DS:[ESI+8],EAX
  13. 005B7858    85C0                  TEST EAX,EAX
  14. 005B785A    8B43 04               MOV EAX,DWORD PTR DS:[EBX+4]
  15. 005B785D    57                    PUSH EDI
  16. 005B785E    74 31                 JE SHORT PapasDau.005B7891
  17. 005B7860    85C0                  TEST EAX,EAX
  18. 005B7862    74 27                 JE SHORT PapasDau.005B788B
  19. 005B7864    50                    PUSH EAX
  20. 005B7865    E8 368E0000           CALL PapasDau.005C06A0
  21. 005B786A    8BF8                  MOV EDI,EAX
  22. 005B786C    47                    INC EDI
  23. 005B786D    57                    PUSH EDI
  24. 005B786E    E8 740B0000           CALL PapasDau.005B83E7
  25. 005B7873    59                    POP ECX
  26. 005B7874    59                    POP ECX
  27. 005B7875    8946 04               MOV DWORD PTR DS:[ESI+4],EAX
  28. 005B7878    85C0                  TEST EAX,EAX
  29. 005B787A    74 18                 JE SHORT PapasDau.005B7894
  30. 005B787C    FF73 04               PUSH DWORD PTR DS:[EBX+4]
  31. 005B787F    57                    PUSH EDI
  32. 005B7880    50                    PUSH EAX
  33. 005B7881    E8 094B0000           CALL PapasDau.005BC38F
  34. 005B7886    83C4 0C               ADD ESP,0C
  35. 005B7889    EB 09                 JMP SHORT PapasDau.005B7894
  36. 005B788B    8366 04 00            AND DWORD PTR DS:[ESI+4],0
  37. 005B788F    EB 03                 JMP SHORT PapasDau.005B7894
  38. 005B7891    8946 04               MOV DWORD PTR DS:[ESI+4],EAX
  39. 005B7894    5F                    POP EDI
  40. 005B7895    8BC6                  MOV EAX,ESI
  41. 005B7897    5E                    POP ESI
  42. 005B7898    5B                    POP EBX
  43. 005B7899    5D                    POP EBP
  44. 005B789A    C2 0400               RETN 4


Но игра падает не доходя до последнего места...

ClockMan

Кстати, приведенный тобой код где выполняется? В процессе игры или врапера?

-----
aLL rIGHTS rEVERSED!





Ранг: 568.2 (!), 464thx
Активность: 0.550.57
Статус: Участник
оптимист

Создано: 03 апреля 2011 11:28
· Личное сообщение · #12

OnLyOnE пишет:
В процессе игры или врапера

Враппер создаёт отдельный поток в запущенной игре.
OnLyOnE пишет:
Доходит до открытия окна игры.. появляется курсор... и все... падает

Там хитрая проверка црк ,запусти файл не восстановленный и в памяти восстанови испорченный код и о чудо файл заработает ))

-----
Чтобы правильно задать вопрос, нужно знать большую часть ответа. Р.Шекли.





Ранг: 462.8 (мудрец), 468thx
Активность: 0.280
Статус: Участник
Only One!

Создано: 03 апреля 2011 14:06 · Поправил: OnLyOnE
· Личное сообщение · #13

ClockMan пишет:
Там хитрая проверка црк

Действительно , спасибо за подсказку..

P.S. Пипец... реально хитрая проверка... никак не отловлю...
Там есть место где идет проверка...
Code:
  1. 004B7330    55                    PUSH EBP
  2. 004B7331    8BEC                  MOV EBP,ESP
  3. 004B7333    B8 30800000           MOV EAX,8030
  4. 004B7338    E8 83F30F00           CALL PapasDau.005B66C0
  5. 004B733D    A1 607C6700           MOV EAX,DWORD PTR DS:[677C60]
  6. 004B7342    33C5                  XOR EAX,EBP
  7. 004B7344    8945 F8               MOV DWORD PTR SS:[EBP-8],EAX
  8. 004B7347    56                    PUSH ESI
  9. 004B7348    57                    PUSH EDI
  10. 004B7349    898D D47FFFFF         MOV DWORD PTR SS:[EBP+FFFF7FD4],ECX
  11. 004B734F    C745 F0 DEADC0DE      MOV DWORD PTR SS:[EBP-10],DEC0ADDE
  12. 004B7356    C745 F4 4A554E4B      MOV DWORD PTR SS:[EBP-C],4B4E554A
  13. 004B735D    6A 02                 PUSH 2
  14. 004B735F    6A 00                 PUSH 0
  15. 004B7361    8B45 08               MOV EAX,DWORD PTR SS:[EBP+8]
  16. 004B7364    50                    PUSH EAX
  17. 004B7365    E8 9D281000           CALL PapasDau.005B9C07
  18. 004B736A    83C4 0C               ADD ESP,0C
  19. 004B736D    8B4D 08               MOV ECX,DWORD PTR SS:[EBP+8]
  20. 004B7370    51                    PUSH ECX
  21. 004B7371    E8 57EA0F00           CALL PapasDau.005B5DCD
  22. 004B7376    83C4 04               ADD ESP,4
  23. 004B7379    8985 E47FFFFF         MOV DWORD PTR SS:[EBP+FFFF7FE4],EAX
  24. 004B737F    C745 FC 00001000      MOV DWORD PTR SS:[EBP-4],100000
  25. 004B7386    8B55 FC               MOV EDX,DWORD PTR SS:[EBP-4]
  26. 004B7389    8955 EC               MOV DWORD PTR SS:[EBP-14],EDX
  27. 004B738C    8B85 E47FFFFF         MOV EAX,DWORD PTR SS:[EBP+FFFF7FE4]
  28. 004B7392    83E8 10               SUB EAX,10
  29. 004B7395    3945 EC               CMP DWORD PTR SS:[EBP-14],EAX
  30. 004B7398    0F83 01010000         JNB PapasDau.004B749F
  31. 004B739E    8B8D E47FFFFF         MOV ECX,DWORD PTR SS:[EBP+FFFF7FE4]
  32. 004B73A4    2B4D EC               SUB ECX,DWORD PTR SS:[EBP-14]
  33. 004B73A7    81F9 00800000         CMP ECX,8000
  34. 004B73AD    76 0C                 JBE SHORT PapasDau.004B73BB
  35. 004B73AF    C785 D07FFFFF 0080000>MOV DWORD PTR SS:[EBP+FFFF7FD0],8000
  36. 004B73B9    EB 0F                 JMP SHORT PapasDau.004B73CA
  37. 004B73BB    8B95 E47FFFFF         MOV EDX,DWORD PTR SS:[EBP+FFFF7FE4]
  38. 004B73C1    2B55 EC               SUB EDX,DWORD PTR SS:[EBP-14]
  39. 004B73C4    8995 D07FFFFF         MOV DWORD PTR SS:[EBP+FFFF7FD0],EDX
  40. 004B73CA    8B85 D07FFFFF         MOV EAX,DWORD PTR SS:[EBP+FFFF7FD0]
  41. 004B73D0    8985 DC7FFFFF         MOV DWORD PTR SS:[EBP+FFFF7FDC],EAX
  42. 004B73D6    6A 00                 PUSH 0
  43. 004B73D8    8B4D FC               MOV ECX,DWORD PTR SS:[EBP-4]
  44. 004B73DB    51                    PUSH ECX
  45. 004B73DC    8B55 08               MOV EDX,DWORD PTR SS:[EBP+8]
  46. 004B73DF    52                    PUSH EDX
  47. 004B73E0    E8 22281000           CALL PapasDau.005B9C07
  48. 004B73E5    83C4 0C               ADD ESP,0C
  49. 004B73E8    8B45 08               MOV EAX,DWORD PTR SS:[EBP+8]
  50. 004B73EB    50                    PUSH EAX
  51. 004B73EC    8B8D DC7FFFFF         MOV ECX,DWORD PTR SS:[EBP+FFFF7FDC]
  52. 004B73F2    51                    PUSH ECX
  53. 004B73F3    6A 01                 PUSH 1
  54. 004B73F5    8D95 E87FFFFF         LEA EDX,DWORD PTR SS:[EBP+FFFF7FE8]
  55. 004B73FB    52                    PUSH EDX
  56. 004B73FC    E8 12E80F00           CALL PapasDau.005B5C13
  57. 004B7401    83C4 10               ADD ESP,10
  58. 004B7404    8985 E07FFFFF         MOV DWORD PTR SS:[EBP+FFFF7FE0],EAX
  59. 004B740A    8B85 E07FFFFF         MOV EAX,DWORD PTR SS:[EBP+FFFF7FE0]
  60. 004B7410    3B85 DC7FFFFF         CMP EAX,DWORD PTR SS:[EBP+FFFF7FDC]
  61. 004B7416    74 07                 JE SHORT PapasDau.004B741F
  62. 004B7418    32C0                  XOR AL,AL
  63. 004B741A    E9 82000000           JMP PapasDau.004B74A1
  64. 004B741F    C785 D87FFFFF 0000000>MOV DWORD PTR SS:[EBP+FFFF7FD8],0
  65. 004B7429    EB 0F                 JMP SHORT PapasDau.004B743A
  66. 004B742B    8B8D D87FFFFF         MOV ECX,DWORD PTR SS:[EBP+FFFF7FD8]
  67. 004B7431    83C1 01               ADD ECX,1
  68. 004B7434    898D D87FFFFF         MOV DWORD PTR SS:[EBP+FFFF7FD8],ECX
  69. 004B743A    8B95 DC7FFFFF         MOV EDX,DWORD PTR SS:[EBP+FFFF7FDC]
  70. 004B7440    83EA 08               SUB EDX,8
  71. 004B7443    3995 D87FFFFF         CMP DWORD PTR SS:[EBP+FFFF7FD8],EDX
  72. 004B7449    7D 2F                 JGE SHORT PapasDau.004B747A
  73. 004B744B    B9 02000000           MOV ECX,2
  74. 004B7450    8D7D F0               LEA EDI,DWORD PTR SS:[EBP-10]
  75. 004B7453    8B85 D87FFFFF         MOV EAX,DWORD PTR SS:[EBP+FFFF7FD8]
  76. 004B7459    8DB405 E87FFFFF       LEA ESI,DWORD PTR SS:[EBP+EAX+FFFF7FE8]
  77. 004B7460    33D2                  XOR EDX,EDX
  78. 004B7462    F3:A7                 REPE CMPS DWORD PTR ES:[EDI],DWORD PTR DS:[ESI]
  79. 004B7464    75 12                 JNZ SHORT PapasDau.004B7478
  80. 004B7466    8B45 FC               MOV EAX,DWORD PTR SS:[EBP-4]
  81. 004B7469    0385 D87FFFFF         ADD EAX,DWORD PTR SS:[EBP+FFFF7FD8]
  82. 004B746F    8B4D 0C               MOV ECX,DWORD PTR SS:[EBP+C]
  83. 004B7472    8901                  MOV DWORD PTR DS:[ECX],EAX
  84. 004B7474    B0 01                 MOV AL,1
  85. 004B7476    EB 29                 JMP SHORT PapasDau.004B74A1
  86. 004B7478  ^ EB B1                 JMP SHORT PapasDau.004B742B
  87. 004B747A    8B95 DC7FFFFF         MOV EDX,DWORD PTR SS:[EBP+FFFF7FDC]
  88. 004B7480    8B45 EC               MOV EAX,DWORD PTR SS:[EBP-14]
  89. 004B7483    8D4C10 F0             LEA ECX,DWORD PTR DS:[EAX+EDX-10]
  90. 004B7487    894D EC               MOV DWORD PTR SS:[EBP-14],ECX
  91. 004B748A    8B95 DC7FFFFF         MOV EDX,DWORD PTR SS:[EBP+FFFF7FDC]
  92. 004B7490    8B45 FC               MOV EAX,DWORD PTR SS:[EBP-4]
  93. 004B7493    8D4C10 F0             LEA ECX,DWORD PTR DS:[EAX+EDX-10]
  94. 004B7497    894D FC               MOV DWORD PTR SS:[EBP-4],ECX
  95. 004B749A  ^ E9 EDFEFFFF           JMP PapasDau.004B738C
  96. 004B749F    32C0                  XOR AL,AL
  97. 004B74A1    5F                    POP EDI
  98. 004B74A2    5E                    POP ESI
  99. 004B74A3    8B4D F8               MOV ECX,DWORD PTR SS:[EBP-8]
  100. 004B74A6    33CD                  XOR ECX,EBP
  101. 004B74A8    E8 CCE30F00           CALL PapasDau.005B5879
  102. 004B74AD    8BE5                  MOV ESP,EBP
  103. 004B74AF    5D                    POP EBP
  104. 004B74B0    C2 0800               RETN 8


Но это явно не то..

-----
aLL rIGHTS rEVERSED!




Ранг: 49.6 (посетитель), 9thx
Активность: 0.030
Статус: Участник

Создано: 03 апреля 2011 19:23 · Поправил: huckfuck
· Личное сообщение · #14

Проверки начинаются с вызова GetModuleFileNameA
Например, по адресу 004057B1

Чуть ниже вызывается функция подсчёта црц (004B4620)
На входе: начало и длина данных
На выходе - байт

Проверяется этот байт по адресам 004AE69E и 004AE6BF

Входные данные для подсчета црц берутся из ресурсов игры (видимо, из скриптов)




Ранг: 462.8 (мудрец), 468thx
Активность: 0.280
Статус: Участник
Only One!

Создано: 03 апреля 2011 21:24
· Личное сообщение · #15

huckfuck пишет:
Проверки начинаются с вызова GetModuleFileNameA
Например, по адресу 004057B1

Чуть ниже вызывается функция подсчёта црц (004B4620)
На входе: начало и длина данных
На выходе - байт

Проверяется этот байт по адресам 004AE69E и 004AE6BF

Входные данные для подсчета црц берутся из ресурсов игры (видимо, из скриптов)


Да..да... Причем проверка как ни странно всего одна...
Это кусок из функции..
Code:
  1. 00406265    8985 44F8FFFF         MOV DWORD PTR SS:[EBP-7BC],EAX
  2. 0040626B    68 00010000           PUSH 100
  3. 00406270    8D8D 4CF8FFFF         LEA ECX,DWORD PTR SS:[EBP-7B4]
  4. 00406276    51                    PUSH ECX
  5. 00406277    6A 00                 PUSH 0
  6. 00406279    FF15 74116000         CALL DWORD PTR DS:[<&KERNEL32.GetModuleFileNameA>]    ; kernel32.GetModuleFileNameA
  7. 0040627F    68 AC1B6000           PUSH PapasDau.00601BAC                                ; ASCII "wme.exe"
  8. 00406284    8D95 4CF8FFFF         LEA EDX,DWORD PTR SS:[EBP-7B4]
  9. 0040628A    52                    PUSH EDX
  10. 0040628B    E8 20031B00           CALL PapasDau.005B65B0
  11. 00406290    83C4 08               ADD ESP,8
  12. 00406293    85C0                  TEST EAX,EAX
  13. 00406295    74 14                 JE SHORT PapasDau.004062AB
  14. 00406297    68 B41B6000           PUSH PapasDau.00601BB4                                ; ASCII "game.exe"
  15. 0040629C    8D85 4CF8FFFF         LEA EAX,DWORD PTR SS:[EBP-7B4]
  16. 004062A2    50                    PUSH EAX
  17. 004062A3    E8 8E031B00           CALL PapasDau.005B6636
  18. 004062A8    83C4 08               ADD ESP,8
  19. 004062AB    6A 00                 PUSH 0
  20. 004062AD    8D8D 48F8FFFF         LEA ECX,DWORD PTR SS:[EBP-7B8]
  21. 004062B3    51                    PUSH ECX
  22. 004062B4    8D95 4CF8FFFF         LEA EDX,DWORD PTR SS:[EBP-7B4]
  23. 004062BA    52                    PUSH EDX
  24. 004062BB    8B85 B4F2FFFF         MOV EAX,DWORD PTR SS:[EBP-D4C]
  25. 004062C1    8B88 88020000         MOV ECX,DWORD PTR DS:[EAX+288]
  26. 004062C7    E8 94EA0A00           CALL PapasDau.004B4D60
  27. 004062CC    8985 3CF8FFFF         MOV DWORD PTR SS:[EBP-7C4],EAX


-----
aLL rIGHTS rEVERSED!





Ранг: 756.3 (! !), 113thx
Активность: 0.610.05
Статус: Участник
Student

Создано: 29 апреля 2011 17:15 · Поправил: Isaev
· Личное сообщение · #16

SuperФерма ru.mirror.alawar.com/DreamFarmRus_11489.exe
wrapper.dll я распаковал, он вызывает WriteProcessMemory 3 раза
Code:
  1. 0013B2A8   10060D9D  /CALL to WriteProcessMemory from wrapper.10060D97
  2. 0013B2AC   000001A4  |hProcess = 000001A4
  3. 0013B2B0   00407739  |Address = 407739
  4. 0013B2B4   00F22688  |Buffer = 00F22688
  5. 0013B2B8   00000040  |BytesToWrite = 40 (64.)
  6. 0013B2BC   0013B2C4  \pBytesWritten = 0013B2C4
  7.  
  8. 0013B2A8   10060D9D  /CALL to WriteProcessMemory from wrapper.10060D97
  9. 0013B2AC   000001A4  |hProcess = 000001A4
  10. 0013B2B0   00405E2F  |Address = 405E2F
  11. 0013B2B4   00F275E8  |Buffer = 00F275E8
  12. 0013B2B8   00000040  |BytesToWrite = 40 (64.)
  13. 0013B2BC   0013B2C4  \pBytesWritten = 0013B2C4
  14.  
  15. 0013B2A8   10060D9D  /CALL to WriteProcessMemory from wrapper.10060D97
  16. 0013B2AC   000001A4  |hProcess = 000001A4
  17. 0013B2B0   00405E2F  |Address = 405E2F
  18. 0013B2B4   0013B398  |Buffer = 0013B398
  19. 0013B2B8   00000002  |BytesToWrite = 2
  20. 0013B2BC   0013B2C4  \pBytesWritten = 0013B2C4


только почему-то после возврата данные не записываются!?
В первом случае например, должны 64 байта из 00F22688 записаться в 00407739?
Или я что-то не так понял?

в 0013B2C4 пишет, что 64 байта записаны
возвращает не 0, всё же должно быть нормально... Или от какой-то базы надо смещение считать?

-----
z+Dw7uLu5+jqLCDq7vLu8PvpIPHs7uMh




Ранг: 617.3 (!), 677thx
Активность: 0.540
Статус: Участник

Создано: 29 апреля 2011 18:07 · Поправил: Vovan666
· Личное сообщение · #17

http://zalil.ru/30952194
А что мешает поставить bp WriteProcessMemory? И всё будет видно, что, куда и сколько раз пишется.
Да и смыл ковырять онлайновую игру?




Ранг: 756.3 (! !), 113thx
Активность: 0.610.05
Статус: Участник
Student

Создано: 29 апреля 2011 19:07
· Личное сообщение · #18

Как бы скачать результат я не хотел, интересно как его получить...
Vovan666 пишет:
Да и смыл ковырять онлайновую игру?

какая разница что ковырять?

Vovan666 пишет:
А что мешает поставить bp WriteProcessMemory? И всё будет видно, что, куда и сколько раз пишется.

а я что выше сделал?
В том то и дело, что видно что и куда, но не пишется (или пишется не туда). т.е. данные после вызова WriteProcessMemory не изменяются.

Вот вызов:
Code:
  1. 0013B2A8   10060D9D  /CALL to WriteProcessMemory from wrapper.10060D97
  2. 0013B2AC   000001A4  |hProcess = 000001A4
  3. 0013B2B0   00407739  |Address = 407739
  4. 0013B2B4   00F22688  |Buffer = 00F22688
  5. 0013B2B8   00000040  |BytesToWrite = 40 (64.)
  6. 0013B2BC   0013B2C4  \pBytesWritten = 0013B2C4


Состояние памяти до вызова:
Code:
  1. в Buffer
  2. 00F26F88  3C 75 0F 84 A9 05 00 00 3C 78 0F 84 A1 05 00 00  <u„©..<x„Ў..
  3. 00F26F98  3C 58 0F 84 99 05 00 00 83 65 90 00 8B 0D 30 8A  <X„™..ѓeђ..
  4. 00F26FA8  41 00 83 65 A4 00 0F B6 C3 F6 44 41 01 80 74 19  A.ѓe¤.¶ГцDAЂt
  5. 00F26FB8  8B 8D DC 01 00 00 8D 75 B4 8A C3 E8 32 FD FF FF  ‹ЌЬ..ЌuґЉГи2эяя
  6.  
  7. в Address
  8. 00407739  C3 74 0C 39 45 18 74 07 50 E8 1C D7 FF FF 59 8B  Гt.9EtPиЧяяY‹
  9. 00407749  C6 8D 65 E0 5F 5E 5B 8B 4D FC 33 CD E8 A0 D2 FF  ЖЌeа_^[‹Mь3Ни Тя
  10. 00407759  FF C9 C3 8B FF 55 8B EC 83 EC 10 FF 75 08 8D 4D  яЙГ‹яU‹мѓмяuЌM
  11. 00407769  F0 E8 FF E3 FF FF FF 75 28 8D 4D F0 FF 75 24 FF  риягяяяu(ЌMряu$я

после вызова остаётся так же байт в байт

-----
z+Dw7uLu5+jqLCDq7vLu8PvpIPHs7uMh




Ранг: 617.3 (!), 677thx
Активность: 0.540
Статус: Участник

Создано: 29 апреля 2011 19:19
· Личное сообщение · #19

Code:
  1.     0013B2A8   10060D9D  /CALL to WriteProcessMemory from wrapper.10060D97
  2.     0013B2AC   000001A4  |hProcess = 000001A4 ;Process ID
  3.     0013B2B0   00407739  |Address = 407739 ;Куда пишем
  4.     0013B2B4   00F22688  |Buffer = 00F22688 ;Откуда пишем
  5.     0013B2B8   00000040  |BytesToWrite = 40 (64.) ;Сколько пишем
  6.     0013B2BC   0013B2C4  \pBytesWritten = 0013B2C4 ;Не помню нафига нужна всегда писал 0

Так понятней?

Буфер и адрес и не должны меняться, мой последний анвраппер как раз на выходе байты и берет.




Ранг: 756.3 (! !), 113thx
Активность: 0.610.05
Статус: Участник
Student

Создано: 29 апреля 2011 19:25 · Поправил: Isaev
· Личное сообщение · #20

Vovan666 пишет:
Не помню нафига нужна всегда писал 0

Это для выхода. По этому адресу записывается количество записаных байт
Vovan666 пишет:
Буфер и адрес и не должны меняться

В смысле не должны?
Vovan666 пишет:
Address = 407739 ;Куда пишем

Если мы туда пишем, значит там должны меняться!

Как я понимаю
Address = 407739 ;Куда пишем
Buffer = 00F22688 ;Откуда пишем
Берём 64 байта начиная с адреса 00F22688 и копируем их -> начиная с адреса 407739
только на практике это не так или я не так понимаю

-----
z+Dw7uLu5+jqLCDq7vLu8PvpIPHs7uMh




Ранг: 617.3 (!), 677thx
Активность: 0.540
Статус: Участник

Создано: 29 апреля 2011 19:36
· Личное сообщение · #21

Isaev пишет:
Берём 64 байта начиная с адреса 00F22688 и копируем их начиная с адреса 407739
только на практике это не так или я не так понимаю

Либо ты тупишь, либо одно из двух.
0013B2AC 000001A4 |hProcess = 000001A4 ;Process ID
Посмотри внимательней; Это ид не того процесса в котором ты сейчас, а df.wrp.exe
Сравни мой файл с df.wrp.exe и всё станет ясно.

| Сообщение посчитали полезным: Isaev


Ранг: 756.3 (! !), 113thx
Активность: 0.610.05
Статус: Участник
Student

Создано: 29 апреля 2011 19:40
· Личное сообщение · #22

Vovan666 пишет:
Либо ты тупишь, либо одно из двух.

Конечно туплю, потому и спрашиваю где
точно, процесс же другой!

-----
z+Dw7uLu5+jqLCDq7vLu8PvpIPHs7uMh





Ранг: 756.3 (! !), 113thx
Активность: 0.610.05
Статус: Участник
Student

Создано: 23 июля 2011 22:50
· Личное сообщение · #23

Пазлы. Платиновая коллекция
не могу встать на WriteProcessMemory, со стронгом палится, с фантомом надает с ошибкой Protection Error 103, he бряки не срабатывают на WriteProcessMemory
иногда выыодит "Debugged program was unable to process exception"
как дойти до WriteProcessMemory?

-----
z+Dw7uLu5+jqLCDq7vLu8PvpIPHs7uMh





Ранг: 462.8 (мудрец), 468thx
Активность: 0.280
Статус: Участник
Only One!

Создано: 23 июля 2011 23:24 · Поправил: OnLyOnE
· Личное сообщение · #24

Isaev пишет:
не могу встать на WriteProcessMemory, со стронгом палится, с фантомом надает с ошибкой Protection Error 103, he бряки не срабатывают на WriteProcessMemory
иногда выыодит "Debugged program was unable to process exception"
как дойти до WriteProcessMemory?


--> Скачать <--

P.S. сперто было только оер.. файло полностью рабочее

-----
aLL rIGHTS rEVERSED!





Ранг: 756.3 (! !), 113thx
Активность: 0.610.05
Статус: Участник
Student

Создано: 24 июля 2011 01:52 · Поправил: Isaev
· Личное сообщение · #25

OnLyOnE а теперь на вопрос ответьте
как обычно, чаще интересен не результат, а принцип его получения
там всегда только оеп спёрто, как найти место, где оно вписывается я спрашивал...

-----
z+Dw7uLu5+jqLCDq7vLu8PvpIPHs7uMh





Ранг: 568.2 (!), 464thx
Активность: 0.550.57
Статус: Участник
оптимист

Создано: 24 июля 2011 04:08
· Личное сообщение · #26

Isaev пишет:
не могу встать на WriteProcessMemory, со стронгом палится,

Часть WriteProcessMemory Эммулируется Asprotectom поэтому обычный бряк будет палится,а железный и вовсе несработает,ставте бряк на конец функции и смотрите где он вызывается(3 разных вызова).

-----
Чтобы правильно задать вопрос, нужно знать большую часть ответа. Р.Шекли.




Ранг: 441.3 (мудрец), 297thx
Активность: 0.410.04
Статус: Участник

Создано: 24 июля 2011 04:21
· Личное сообщение · #27

ZwWriteProcessMemory

| Сообщение посчитали полезным: SReg


Ранг: 462.8 (мудрец), 468thx
Активность: 0.280
Статус: Участник
Only One!

Создано: 24 июля 2011 07:56
· Личное сообщение · #28

Isaev пишет:
принцип его получения

Принцип до безобразия прост, тут даже олли не надо (только между нами )...
Запускаешь игру, потом ее сворачиваешь в трей (иногда достаточно нажать клавишу Windows).
Далее дампишь рабочий процесс игры (который с wrap) LordPE.
Открываешь полученный дамп в HEX-редакоторе (в моем случае это HiEW) идешь на ЕР и видишь что все байты на месте. Переносишь спертые байты в врапленный файл, получаешь рабочий... все.

-----
aLL rIGHTS rEVERSED!


| Сообщение посчитали полезным: Isaev

Ранг: 456.3 (мудрец), 340thx
Активность: 0.280.02
Статус: Участник
Android Reverser

Создано: 24 июля 2011 08:08
· Личное сообщение · #29

OnLyOnE
Блджад! Ты раскрыл мою тайну!
Я уже больше года так делаю

-----
SaNX





Ранг: 307.9 (мудрец), 196thx
Активность: 0.180
Статус: Участник

Создано: 24 июля 2011 14:17
· Личное сообщение · #30

Принцип до безобразия прост
Хороший способ тоже им пользуюсь довольно давно (года полтора наверное - когда Невософт с защитой тоже заморочнулся - танцуют с алаваром вокруг да около =), но поможет он только в случае когда сперто ОЕП. Хуже когда еще сперто в средине что-нибудь - хотя и это не проблема =)

-----
Don_t hate the cracker - hate the code.




Ранг: 456.3 (мудрец), 340thx
Активность: 0.280.02
Статус: Участник
Android Reverser

Создано: 24 июля 2011 18:30 · Поправил: SaNX
· Личное сообщение · #31

Бгг. Невософт вообще сосет хуйца. Я все игры анврапил своим простейшим анвраппером:

Code:
  1.     fn:=OpenDialog1.FileName;
  2.     f:=FileOpen(fn,0);
  3.     flen:=FileSeek(f,0,2);
  4.     outf:=FileCreate(fn+'.unwrapped.exe');
  5.     FileClose(outf);
  6.     outf:=FileOpen(fn+'.unwrapped.exe',2);
  7.     FileSeek(f,$20,0);
  8.     FileRead(f,key,4);
  9.     Memo1.Lines.Add('Your file key - '+IntToHex(key,4));
  10.     FileSeek(f,0,0);
  11.     e:=flen;
  12.     flen:=(Flen div 4)-4;
  13.     for d:=0 to (flen div 4) do
  14.     begin
  15.     c:=FileRead(f,rkey,4);
  16.     rkey:=rkey xor key;
  17.     FileWrite(outf,rkey,c);
  18.     end;
  19.     c:=FileSeek(f,0,1);
  20.     for d:=0 to (e-c) do
  21.     begin
  22.     key:=FileRead(f,rkey,4);
  23.     FileWrite(outf,rkey,key);
  24.     end;
  25.     Memo1.Lines.Add('File unwrapped!');
  26.     FileClose(F);
  27.     FileClose(outf);


-----
SaNX


| Сообщение посчитали полезным: Isaev, Soso
<< 1 ... 9 . 10 . 11 . 12 . 13 . 14 . 15 . 16 . >>
 eXeL@B —› Крэки, обсуждения —› Взлом Alawar игр (отучим от триала)
:: Ваш ответ
Жирный  Курсив  Подчеркнутый  Перечеркнутый  {mpf5}  Код  Вставить ссылку 
:s1: :s2: :s3: :s4: :s5: :s6: :s7: :s8: :s9: :s10: :s11: :s12: :s13: :s14: :s15: :s16:


Максимальный размер аттача: 500KB.
Ваш логин: german1505 » Выход » ЛС
   Для печати Для печати