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

Форум АНТИЧАТ (https://forum.antichat.xyz/index.php)
-   Авторские статьи (https://forum.antichat.xyz/forumdisplay.php?f=31)
-   -   делаем патч для всех версий Crystal Player Pro (https://forum.antichat.xyz/showthread.php?t=30854)

ProTeuS 09.01.2007 11:05

делаем патч для всех версий Crystal Player Pro
 
делаем патч для всех версий Crystal Player Pro

Попытаемся сделать универсальный пат4ер для всех версий Crystal Player Pro, которая нагло просит заругистрировать, 4то проявляется в показе длительного нага каждые 5 минут при просматривании фильмов поверх него самого. Это не радует. так 4то грузим жертву в ольку. распаковываем.

Код:

00775001 > 90              NOP
00775002  60              PUSHAD
00775003  E8 03000000      CALL Crystal.0077500B
00775008  -E9 EB045D45      JMP 45D454F8
0077500D  55              PUSH EBP
0077500E  C3              RETN

трейсим по F7 p заходом в подфункции до команды восстановления предыдущего состояния регистров.

Код:

007753B0  61              POPAD
007753B1  75 08            JNZ SHORT Crystal.007753BB
007753B3  B8 01000000      MOV EAX,1
007753B8  C2 0C00          RETN 0C

попадаем на OEP. можем дампить и без проблем восстанавливать импорт импреком.

Код:

004E3253    6A 60          PUSH 60
004E3255  . 68 08585300    PUSH Crystal.00535808
004E325A  . E8 F5EAFFFF    CALL Crystal.004E1D54
004E325F  . BF 94000000    MOV EDI,94
004E3264  . 8BC7          MOV EAX,EDI
004E3266  . E8 35EDFFFF    CALL Crystal.004E1FA0
004E326B  . 8965 E8        MOV DWORD PTR SS:[EBP-18],ESP
004E326E  . 8BF4          MOV ESI,ESP
004E3270  . 893E          MOV DWORD PTR DS:[ESI],EDI
004E3272  . 56            PUSH ESI                                ; /pVersionInformation
004E3273  . FF15 2C124F00  CALL DWORD PTR DS:[4F122C]              ; \GetVersionExA
004E3279  . 8B4E 10        MOV ECX,DWORD PTR DS:[ESI+10]
004E327C  . 890D DC065B00  MOV DWORD PTR DS:[5B06DC],ECX
004E3282  . 8B46 04        MOV EAX,DWORD PTR DS:[ESI+4]
004E3285  . A3 E8065B00    MOV DWORD PTR DS:[5B06E8],EAX
004E328A  . 8B56 08        MOV EDX,DWORD PTR DS:[ESI+8]
004E328D  . 8915 EC065B00  MOV DWORD PTR DS:[5B06EC],EDX
004E3293  . 8B76 0C        MOV ESI,DWORD PTR DS:[ESI+C]
004E3296  . 81E6 FF7F0000  AND ESI,7FFF
004E329C  . 8935 E0065B00  MOV DWORD PTR DS:[5B06E0],ESI
004E32A2  . 83F9 02        CMP ECX,2
004E32A5  . 74 0C          JE SHORT Crystal.004E32B3

дамп пофиксен, рабо4ий файл создан, теперь можно искать функции регистрации. поскольку они более "интерфейсны" и реализуют лишь визуальное оповещение пользователя о вводе верного\неправильного регкода(4то я обнаружил в изу4ении прошлых релизов исследуемого продукта), то достато4но найти\править код, выводящий наг каждые 5мин и работаться жизни. Я в свое время нашел код проверки (немного поразмыслив, нужно искать вызовы функций CreateCompatibleDC, BitBlt, SelectObject, SetTimer и т.д., вызывающиеся в коде "рядом") - это .0041AB59 для последней 1.97 версий.
0041AB59 |. FF15 88104B00 CALL DWORD PTR DS:[<&gdi32.CreateCompati>; \CreateCompatibleDC
Для любого релиза найти его просто - поставив бряк на CreateCompatibleDC (бряков будет до 10) и
найдя нижележащий код около вызова:
Код:

0041AB06  |. 53            PUSH EBX                                ; /hWnd
0041AB07  |. 895C24 44      MOV DWORD PTR SS:[ESP+44],EBX            ; |
0041AB0B  |. 895C24 48      MOV DWORD PTR SS:[ESP+48],EBX            ; |
0041AB0F  |. 895C24 4C      MOV DWORD PTR SS:[ESP+4C],EBX            ; |
0041AB13  |. 895C24 50      MOV DWORD PTR SS:[ESP+50],EBX            ; |
0041AB17  |. C74424 54 BC02>MOV DWORD PTR SS:[ESP+54],2BC            ; |
0041AB1F  |. 885C24 58      MOV BYTE PTR SS:[ESP+58],BL              ; |
0041AB23  |. 885C24 59      MOV BYTE PTR SS:[ESP+59],BL              ; |
0041AB27  |. 885C24 5A      MOV BYTE PTR SS:[ESP+5A],BL              ; |
0041AB2B  |. C64424 5B 01  MOV BYTE PTR SS:[ESP+5B],1              ; |
0041AB30  |. C64424 5C 03  MOV BYTE PTR SS:[ESP+5C],3              ; |
0041AB35  |. C64424 5D 02  MOV BYTE PTR SS:[ESP+5D],2              ; |
0041AB3A  |. C64424 5E 01  MOV BYTE PTR SS:[ESP+5E],1              ; |
0041AB3F  |. C64424 5F 22  MOV BYTE PTR SS:[ESP+5F],22              ; |
0041AB44  |. 895424 68      MOV DWORD PTR SS:[ESP+68],EDX            ; |
0041AB48  |. 894424 6C      MOV DWORD PTR SS:[ESP+6C],EAX            ; |
0041AB4C  |. 894C24 7C      MOV DWORD PTR SS:[ESP+7C],ECX            ; |
0041AB50  |. FF15 44134B00  CALL DWORD PTR DS:[<&user32.GetDC>]      ; \GetDC

Это и есть отрисовка нага. На пару десятков байт выше будет процедура проверки.

Код:

00476F3A  |. E8 3C67FFFF    CALL dumped_.0046D67B                    ; \dumped_.0046D67B
00476F3F  |. 84C0          TEST AL,AL
00476F41  |. 0F84 AD010000  JE dumped_.004770F4
00476F47  |. A1 98D15200    MOV EAX,DWORD PTR DS:[52D198]
00476F4C  |. 8945 B4        MOV DWORD PTR SS:[EBP-4C],EAX
00476F4F  |. A1 9CD15200    MOV EAX,DWORD PTR DS:[52D19C]

Нам достато4но подменить выдаваемые ей результаты на


0041AAD2 . FEC8 DEC AL
0041AAD4 . E9 06020000 JMP cracked.0041ACDF
0041AAD9 90 NOP

где JMP прыгает на команду вида

0041ACDF > 8B77 08 MOV ESI,DWORD PTR DS:[EDI+8]

за 10-40 байт перед самим RET из функции

Результирующая сигнатура для пат4а будет выглядеть как


E8 ?? ?? FF FF 84 c0 0F 84! ?? ?? 00 00

она в файле встре4ается только 1 раз, и 4тобы сделать универсальный пат4ер для любой версии проигрывателя в ка4естве домашнего задания (никогда не думал 4то такое скажу) нужно сделать простенький парсер для подс4ета зна4ения 9ого байта в сигнатуре (этот байта равен смещению команды MOV ESI, XXX относительно JE XXX)

E8 ?? ?? FF FF FE c8 E9 A2! ?? ?? 00 00

ЗЫ: на ошибки и смыслой брейнфак не обращаем внимания - писалось в своебразном состоянии сознания

ЗЫЫ: gl hff!


Время: 02:11