Автор: GL#0M gl00m-crk@yandex.ru
Цель: HTMLPad 2002 v4.11 Pro
Инструменты: SoftICE для Win9x (Loader для WinME, но я советую вам перейти на Win98, а лучше WinXP) SoftICE для WinNT/2k/XP (Patch для WinXP) ProcDump, IDA 4.30 (31mb, пароль к архиву: www.crackbest.com, скачайте, не пожалеете), Hiew, PEiDentifier, UPX
CODE:005DC360 push ebp // начало программы (OEP) CODE:005DC361 mov ebp, esp CODE:005DC363 add esp, 0FFFFFFF0h CODE:005DC366 push ebx CODE:005DC367 push esi CODE:005DC368 push edi CODE:005DC369 xor eax, eax CODE:005DC36B mov [ebp+var_10], eax CODE:005DC36E mov eax, offset nullsub_15 CODE:005DC373 call sub_407548 CODE:005DC378 xor eax, eax CODE:005DC37A push ebp CODE:005DC37B push offset loc_5DC590 CODE:005DC380 push dword ptr fs:[eax] CODE:005DC383 mov fs:[eax], esp CODE:005DC386 push offset aWebuilder ; lpName CODE:005DC38B push 0 ; bInitialOwner CODE:005DC38D push 0 ; lpMutexAttributes CODE:005DC38F call CreateMutexA CODE:005DC394 push 0 ; lpWindowName CODE:005DC396 push offset aTwebuilder ; lpClassName CODE:005DC39B call FindWindowA CODE:005DC3A0 mov esi, eax CODE:005DC3A2 test esi, esi // сравниваем esi с нулём CODE:005DC3A4 jz loc_5DC4A0 // если esi=0, то вызов Nag'а CODE:005DC3AA push 0 ; lpWindowName CODE:005DC3AC push offset aTappbuilder ; lpClassName CODE:005DC3B1 call FindWindowA CODE:005DC3B6 test eax, eax // сравниваем eax с нулём CODE:005DC3B8 ja loc_5DC4A0 // если eax>0, то вызов Nag'а CODE:005DC3BE call sub_402AE4 CODE:005DC3C3 test eax, eax CODE:005DC3C5 jle short loc_5DC41A CODE:005DC3C7 call sub_402AE4 CODE:005DC3CC mov ebx, eax CODE:005DC3CE test ebx, ebx CODE:005DC3D0 jle short loc_5DC402 CODE:005DC3D2 mov edi, 1 CODE:005DC3D7 CODE:005DC3D7 loc_5DC3D7: ; CODE XREF: start+A0j CODE:005DC3D7 push ds:dword_5E40D4 CODE:005DC3DD lea edx, [ebp+var_10] CODE:005DC3E0 mov eax, edi CODE:005DC3E2 call sub_402B44 CODE:005DC3E7 push [ebp+var_10] CODE:005DC3EA push offset dword_5DC5CC CODE:005DC3EF mov eax, offset dword_5E40D4 CODE:005DC3F4 mov edx, 3 CODE:005DC3F9 call sub_404260 CODE:005DC3FE inc edi CODE:005DC3FF dec ebx CODE:005DC400 jnz short loc_5DC3D7 CODE:005DC402 CODE:005DC402 loc_5DC402: ; CODE XREF: start+70j CODE:005DC402 mov eax, ds:dword_5E40D4 CODE:005DC407 call sub_404364 CODE:005DC40C mov edx, eax CODE:005DC40E mov eax, offset dword_5E40D0 CODE:005DC413 call sub_4040D8 CODE:005DC418 jmp short loc_5DC424 CODE:005DC41A ; ------------------------------------------------------------------------ CODE:005DC41A CODE:005DC41A loc_5DC41A: ; CODE XREF: start+65j CODE:005DC41A mov eax, offset dword_5E40D0 CODE:005DC41F call sub_403F10 CODE:005DC424 CODE:005DC424 loc_5DC424: ; CODE XREF: start+B8j CODE:005DC424 mov eax, ds:dword_5E40D0 CODE:005DC429 call sub_4041A0 CODE:005DC42E mov ds:dword_5E40CC, eax CODE:005DC433 push offset aMemorymap_0 ; lpName CODE:005DC438 mov eax, ds:dword_5E40CC CODE:005DC43D add eax, 2 CODE:005DC440 push eax ; dwMaximumSizeLow CODE:005DC441 push 0 ; dwMaximumSizeHigh CODE:005DC443 push 4 ; flProtect CODE:005DC445 push 0 ; lpFileMappingAttributes CODE:005DC447 push 0FFFFFFFFh ; hFile CODE:005DC449 call CreateFileMappingA CODE:005DC44E mov ebx, eax CODE:005DC450 push 0 ; dwNumberOfBytesToMap CODE:005DC452 push 0 ; dwFileOffsetLow CODE:005DC454 push 0 ; dwFileOffsetHigh CODE:005DC456 push 2 ; dwDesiredAccess CODE:005DC458 push ebx ; hFileMappingObject CODE:005DC459 call MapViewOfFile CODE:005DC45E mov edi, eax CODE:005DC460 mov eax, edi CODE:005DC462 mov edx, ds:dword_5E40D0 CODE:005DC468 call sub_40A87C CODE:005DC46D push 0 ; lParam CODE:005DC46F mov eax, ds:dword_5E40CC CODE:005DC474 add eax, 2 CODE:005DC477 push eax ; wParam CODE:005DC478 push 401h ; Msg CODE:005DC47D push esi ; hWnd CODE:005DC47E call SendMessageA CODE:005DC483 test edi, edi CODE:005DC485 jz short loc_5DC48D CODE:005DC487 push edi ; lpBaseAddress CODE:005DC488 call UnmapViewOfFile CODE:005DC48D CODE:005DC48D loc_5DC48D: ; CODE XREF: start+125j CODE:005DC48D test ebx, ebx CODE:005DC48F jz loc_5DC57A CODE:005DC495 push ebx ; hObject CODE:005DC496 call CloseHandle CODE:005DC49B jmp loc_5DC57A CODE:005DC4A0 ; ------------------------------------------------------------------------ CODE:005DC4A0 CODE:005DC4A0 loc_5DC4A0: ; CODE XREF: start+44j // первый... CODE:005DC4A0 ; start+58j // второй адрес вызова CODE:005DC4A0 mov ecx, ds:dword_5E09EC // сюда прыгают с адреса 5DC3A4 CODE:005DC4A6 mov ecx, [ecx] CODE:005DC4A8 mov dl, 1 CODE:005DC4AA mov eax, ds:dword_585D60 CODE:005DC4AF call sub_4527E4 CODE:005DC4B4 mov edx, ds:dword_5E0908 CODE:005DC4BA mov [edx], eax CODE:005DC4BC mov eax, ds:dword_5E0908 CODE:005DC4C1 mov eax, [eax] CODE:005DC4C3 call sub_4566C4 CODE:005DC4C8 mov eax, ds:dword_5E0908 CODE:005DC4CD mov eax, [eax] CODE:005DC4CF mov edx, [eax] CODE:005DC4D1 call dword ptr [edx+80h] CODE:005DC4D7 call sub_4F7E34 CODE:005DC4DC mov eax, ds:dword_5E09EC CODE:005DC4E1 mov eax, [eax] CODE:005DC4E3 call sub_4597E0 CODE:005DC4E8 mov eax, ds:dword_5E09EC CODE:005DC4ED mov eax, [eax] CODE:005DC4EF add eax, 40h CODE:005DC4F2 mov edx, offset dword_5DC5E4 CODE:005DC4F7 call sub_403F64 CODE:005DC4FC mov eax, ds:dword_5E09EC CODE:005DC501 mov eax, [eax] CODE:005DC503 mov edx, offset dword_5DC5F8 CODE:005DC508 call sub_4593E4 CODE:005DC50D push 0 ; uType CODE:005DC50F call MessageBeep CODE:005DC514 xor ecx, ecx // мы здесь, в SoftICE, после нажатия F12 CODE:005DC516 mov dl, 1 CODE:005DC518 mov eax, ds:dword_582874 CODE:005DC51D call sub_4527E4 // создание окна-напоминателя. CODE:005DC522 mov edx, ds:dword_5E0B50 CODE:005DC528 mov [edx], eax CODE:005DC52A mov eax, ds:dword_5E0B50 CODE:005DC52F mov eax, [eax] CODE:005DC531 mov edx, [eax] CODE:005DC533 call dword ptr [edx+0D8h] // цикл-проверка CODE:005DC539 cmp eax, 2 // проверка, равен ли eax двум CODE:005DC53C jz short loc_5DC57A // переход на выход, если eax=2 CODE:005DC53E mov ecx, ds:dword_5E0594 // продолжаем загрузку CODE:005DC544 mov eax, ds:dword_5E09EC CODE:005DC549 mov eax, [eax] CODE:005DC54B mov edx, ds:dword_5CE5E0 CODE:005DC551 call sub_4597F8 CODE:005DC556 mov ecx, ds:dword_5E060C CODE:005DC55C mov eax, ds:dword_5E09EC CODE:005DC561 mov eax, [eax] CODE:005DC563 mov edx, ds:dword_555B40 CODE:005DC569 call sub_4597F8 CODE:005DC56E mov eax, ds:dword_5E09EC CODE:005DC573 mov eax, [eax] CODE:005DC575 call sub_459878
... :005DC3A4 0F8494010000 jmp 005DC53E ...
Долгие, долгие, долгие поиски...%(!?..
:006BB390 C705A4C35D000F849401 mov d, [0005DC3A4], 00194840F :006BB39A BF60C35D00 mov edi, 0005DC360 // это OEP unpacked.exe :006BB39F FFE7 jmp edi
3. ProcDump'ом смотрим Entry Point+Image Base у htmlpad.exe, он равен 006B58D0, заходим в Hiew и идём туда, там pushad, спускаемся до адреса 006B5A33 - там popad, а это значит, что после этой команды произойдёт распаковка htmlpad.exe (у UPX'а, на сегодняшний день, это так).
:006B5A2C FF96A4A02B00 call d, [esi] [0002BA0A4] :006B5A32 61 popad // вот он финал распаковки:) :006B5A33 E92869F2FF jmp 0FFFEA760 :006B5A38 50 push eax
Материалы находятся на сайте http://cracklab.narod.ru/doc/