Commandos 2: Men of Courage Автор : Cauchy^HTB Перевод : NightCat^T53 Интстументы: SoftIce, Hex-editor Защита : CD-Check Сегодня займёмся разбором защиты типа CD-Check в игре Commandos2: MoC. Эх, просто злость берёт, когда думаю о программистах, которые писали защиту к игре. А потом еще удивляются откуда берутся пиратские копии! Но давайте к делу. Инсталлируем игру(Full Install), винимаем диск из привода и пробуем запустить игрушку. Показывается окошко типа RETRY/ABORT с информацией о том, что в приводе нет диска. У нас есть два варианта: или пробуем поймать игрушку на GetDriveTypeA или на MessageBoxA. Попробуем первое. Ставим bpx GetDriveTypeA. А теперь запускаем игру и... и ничего, появляется messagebox. Жопа! Нужно пробовать ловить окно. Жмём Cancel и ставим bpx MessageBoxA. И снова запускаем игру. Вот теперь вылетает SoftICE. Жмём F11... это что такое? Нас выкинуло? :(. Но жмём еще раз и мы снова в коде. Перед глазами что-то такое: 0040276B 50 PUSH EAX 0040276C 57 PUSH EDI 0040276D FFD6 CALL ESI 0040276F EBB3 JMP 00402724 <== Вот тут 00402771 8B0DD81CB500 MOV ECX,[00B51CD8] 00402777 50 PUSH EAX 00402778 E883F40000 CALL 00411C00 Okи. прыгаем(F10) и приземляемся тут: 00402724 83F804 CMP EAX,04 <== прилетели сюда 00402727 0F8566FFFFFF JNZ 00402693 0040272D 57 PUSH EDI 0040272E 8D8C2488020000 LEA ECX,[ESP+00000288] 00402735 57 PUSH EDI 00402736 51 PUSH ECX 00402737 8B0DD81CB500 MOV ECX,[00B51CD8] 0040273D E81EF40000 CALL 00411B60 00402742 3BC7 CMP EAX,EDI 00402744 752B JNZ 00402771 (1) 00402746 8B0DFC1CB500 MOV ECX,[00B51CFC] 0040274C 6A15 PUSH 15 0040274E 57 PUSH EDI 0040274F 6832444349 PUSH 49434432 00402754 E837260100 CALL 00414D90 00402759 8B0DFC1CB500 MOV ECX,[00B51CFC] 0040275F 50 PUSH EAX 00402760 57 PUSH EDI 00402761 6831444349 PUSH 49434431 00402766 E825260100 CALL 00414D90 0040276B 50 PUSH EAX 0040276C 57 PUSH EDI 0040276D FFD6 CALL ESI 0040276F EBB3 JMP 00402724 (2) 00402771 8B0DD81CB500 MOV ECX,[00B51CD8] Как видите внизу место откуда мы прыгали (2). А там где мы приземлились узнаётся что мы нажимали, Retry, или Abort. Мы нажали Retry, идём дальше. Потом идут несколько call'oв, но лишь после одного есть CMP. Нужно изменить джамп в строке (1). Это можно сделать и в SoftICE: Для регистров: r регистр новое_значение (пример. r eax FFFFFFFF) Для флагов: r fl знак_флага, (пример. r fl z) Как мы знаем, джамп jnz выполянется тогда, когда флаг Z не установлен. В нашем случае он установлен. Где это можно увидеть? Справа от регистров. EAX=00000004 EBX=8161D8F6 ECX=80006B90 EDX=80005AF0 ESI=BFF5412E EDI=00000000 EBP=00E4FE38 ESP=00E4F820 EIP=00402724 odI S z a P c <= ОНО CS=0167 DS=016F SS=016F ES=016F FS=0E0F GS=0000 Okи. Для того чтобы джамп выполнялся нужно только изменить флаг: r fl z, и игра запускается. Yupiii. Хорошо, но ведь не каждый же раз так делать! В этом случае нам поможет патч. На наше счастье программа не запакована. запишем себе опкоды перед проверкой: [это опкоды] 00402737 8B0DD81CB500 MOV ECX,[00B51CD8] 0040273D E81EF40000 CALL 00411B60 00402742 3BC7 CMP EAX,EDI 00402744 752B JNZ 00402771 В нашем случае это: 8B0DD81CB500E81EF400003BC7752B. Теперь открываем наш comm2.exe в каком-нибудь редакторе и ищем эту последовательность. Хорошо, нашли мы место, где нужно пропатчить. Как? Опкодом для JNZ является 75h, а мы хотим изменить его на JMP. Опкодом для JMP является 0EBh, просто меняем 75 на EB, сохраняем и игра запускается без проблем. This progi was cracked from cradle to the grave by Cauchy :) BTW. если правда любите эту игру, то купите её!