PDA

Просмотр полной версии : Ломаем игры ReflexiveArcade в 6 шагов!!!!


aleks28
05.10.2006, 20:31
Ломаем игры ReflexiveArcade в 6 шагов!!!!

Те кто забрел сюда за поиском кряков - вам здесь делать нечего - для игр Reflexive куча кряков так что не ленитесь и поищите....
А здесь будет рассмотрен способ для их ломания чисто из спортивного интереса.... (кстати я еще не встретил не одной игры этой фирмы к которой этот способ не подошел бы...)
Просто решил поделиться.... Нашел этот способ сам...
(если этот способ известен всем извеняйте - интернет у меня недавно ...)

Короче вот сам способ открываем любую игру от ReflexiveArcade (я беру их на ДПК DVD их там немеряно!!! И за все плати бабки а где нам бабки эти самим то брать???), в отладчике (я пользуюсь IDA), производим поиск строки MINUTES находим строку:

.data:0042D7D0 db 59h ; Y
.data:0042D7D1 db 6Fh ; o
.data:0042D7D2 db 75h ; u
.data:0042D7D3 db 20h
.data:0042D7D4 db 68h ; h
.data:0042D7D5 db 61h ; a
.data:0042D7D6 db 76h ; v
.data:0042D7D7 db 65h ; e
.data:0042D7D8 db 20h
.data:0042D7D9 db 5Bh ; [
.data:0042D7DA db 4Dh ; M
.data:0042D7DB db 49h ; I
.data:0042D7DC db 4Eh ; N
.data:0042D7DD db 55h ; U
.data:0042D7DE db 54h ; T
.data:0042D7DF db 45h ; E
.data:0042D7E0 db 53h ; S
.data:0042D7E1 db 5Fh ; _
.data:0042D7E2 db 4Ch ; L
.data:0042D7E3 db 45h ; E
.data:0042D7E4 db 46h ; F
.data:0042D7E5 db 54h ; T
.data:0042D7E6 db 5Dh ; ]
.data:0042D7E7 db 20h
.data:0042D7E8 db 6Dh ; m
.data:0042D7E9 db 69h ; i
.data:0042D7EA db 6Eh ; n
.data:0042D7EB db 75h ; u
.data:0042D7EC db 74h ; t
.data:0042D7ED db 65h ; e
.data:0042D7EE db 73h ; s
.data:0042D7EF db 20h
.data:0042D7F0 db 6Fh ; o
.data:0042D7F1 db 66h ; f
.data:0042D7F2 db 20h
.data:0042D7F3 db 67h ; g
.data:0042D7F4 db 61h ; a
.data:0042D7F5 db 6Dh ; m
.data:0042D7F6 db 65h ; e
.data:0042D7F7 db 70h ; p
.data:0042D7F8 db 6Ch ; l
.data:0042D7F9 db 61h ; a
.data:0042D7FA db 79h ; y
.data:0042D7FB db 20h
.data:0042D7FC db 72h ; r
.data:0042D7FD db 65h ; e
.data:0042D7FE db 6Dh ; m
.data:0042D7FF db 61h ; a
.data:0042D800 db 69h ; i
.data:0042D801 db 6Eh ; n
.data:0042D802 db 69h ; i
.data:0042D803 db 6Eh ; n
.data:0042D804 db 67h ; g
.data:0042D805 db 2Eh ; .

адреса могут быть разными в зависимости от игры... После завершения анализа эта строка преврашаеться в
aYouHaveMinutes db 'You have [MINUTES_LEFT] minutes of gameplay remaining. ',0Ah
Далее двойной клик на DATA XREF который нах. возле нашой строки (после ; тоесть переходим на то место откуда эта строка вызываеться...) и мы оказываемся на самом коде
push offset aYouHaveMinutes ;

Поднимаемся вверх до первого DATA XREF, кликаем дважды на него, переходим на код вызвавший нашу процедуру с выводом оставшихся минут:

loc_404CB5: ; CODE XREF: sub_404C3A+6Bj
.text:00404CB5 fld dword ptr [esi+18h]
.text:00404CB8 fcomp ds:flt_4292D0
.text:00404CBE fnstsw ax
.text:00404CC0 test ah, 41h
.text:00404CC3 jnz short loc_404CCC
.text:00404CC5 push offset loc_42D7D0 << вызов вывода minutes (оставшихся минут игры)
.text:00404CCA jmp short loc_404CD1


Еще раз поднимемся вверх до первого XREF, и делаем двойной клик по нему тоесть переходим на процедуру проверки на зарегестрированность и соответсвенно потребности в выводе оставшихся минут - sub_404C3A+6B:

.text:00404C9E loc_404C9E: ; CODE XREF: sub_404C3A+5Cj
.text:00404C9E call sub_407770 << процедура проверки на зарегестрированность
.text:00404CA3 test al, al
.text:00404CA5 jz short loc_404CB5 << вот этот переход нужно занопить.. (9090)
.text:00404CA7 mov ecx, esi
.text:00404CA9 call sub_403492
.text:00404CAE push offset loc_4045A5
.text:00404CB3 jmp short loc_404CD1

Нопим переход и....
Вот и все игра запускаеться и говорит спасибо что играете в меня :-).
Конечно можно было сделать еще поумнее - изменить результат возвращаемый функцией проверки кода (которая перед test al,al) - вместо xor al,al внести mov al,1 :-) Но так как мы сделали ведь легче!!! Хотя второй вариант более правильный (так как эта процедура могла быть вызвана и из другого места и там также пришлось бы нопить переход... Но в нашем случае этого делать не нужно, как и всех играх от этой компании, а их у меня не мало - 34 штуки)

Итак еще раз - что нужно сделать:
1 - Ищем minutes;
2 - переход вверх (на xref);
3 - переход вверх;
4 - все мы на переходе который нужно занопить...
5 - открываем winhex переходим на нужный адрес (в нашем случае это 4CA5 .text:00404CA5-ImageBase)
6 - нопим переход 9090 (Занопить переход означает заменить команду jXX на nop, так как команды переходов имеют разную длину то в зависимости от этой длины нужно заменять ее на несколько команд nop... Например в нашем случае команда jz short loc_404CB5 имеет опкод 74 OE и занимает 2 байта, а вот команда nop имеет опкод 90 и занимает один байт поэтому нужно команду jz заменять на 9090 тоесть 2 команды nop... Фуххх рассказал... :) )

Всем спасибо - не судите строго...


Ну и как обычно:

ВСЯ ПРЕДСТАВЛЕННАЯ ЗДЕСЬ ИНФОРМАЦИЯ ИСПОЛЬЗУЕТЬСЯ ВАМИ НА ВАШ СТРАХ И РИСК... Я НЕ ЗАСТАВЛЯЮ ЕЮ КОГО ТО ПОЛЬЗОВАТЬСЯ А ЛИШЬ ХОЧУ УКАЗАТЬ РАЗРАБОТЧИКАМ НА НЕСОВЕРШЕНСТВО ЗАЩИТЫ ИХ ПРОГРАММНОГО ОБЕСПЕЧЕНИЯ