Форум АНТИЧАТ

Форум АНТИЧАТ (https://forum.antichat.xyz/index.php)
-   Авторские статьи (https://forum.antichat.xyz/forumdisplay.php?f=31)
-   -   Ломаем игры ReflexiveArcade в 6 шагов!!!! (https://forum.antichat.xyz/showthread.php?t=24935)

aleks28 05.10.2006 20:31

Ломаем игры ReflexiveArcade в 6 шагов!!!!
 
Ломаем игры 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... Фуххх рассказал... :) )

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


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

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


Время: 08:33