делаем патч для всех версий Crystal Player Pro Попытаемся сделать универсальный пат4ер для всех версий Crystal Player Pro, которая нагло просит заругистрировать, 4то проявляется в показе длительного нага каждые 5 минут при просматривании фильмов поверх него самого. Это не радует. так 4то грузим жертву в ольку. распаковываем. Code: 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 заходом в подфункции до команды восстановления предыдущего состояния регистров. Code: 007753B0 61 POPAD 007753B1 75 08 JNZ SHORT Crystal.007753BB 007753B3 B8 01000000 MOV EAX,1 007753B8 C2 0C00 RETN 0C попадаем на OEP. можем дампить и без проблем восстанавливать импорт импреком. Code: 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) и найдя нижележащий код около вызова: Code: 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 Это и есть отрисовка нага. На пару десятков байт выше будет процедура проверки. Code: 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!