一、破解目标:EncryptPE V2.2004.7.27加壳的XX软件
二、破解工具:OllyDbg v1.10,ImportREC 1.6 Final
三、破解作者:DarkBull@email.com.cn
四、破解过程:
1.用OllyDbg载入,提示该程序为坏的或未知格式的32位执行文件,不必理会。该壳程序运行流程大致为:第一次运行时,先在系统目录内创建 V22004727.EPE,然后加载该模块,初始化时通过SetWindowsHookEx设置远程系统钩子,再给Explorer.exe的 Progman发送消息,将该钩子插入Explorer.exe中,如果用OD调试,该钩子会调用TerminateProcess结束OD进程,最后通过调用V22004727.EPE模块的EncryptPE_Init函数给Explorer.exe的Progman发送特定的消息,该消息被钩子函数捕获后,V22004727.EPE就创建一个新的进程,通过调用一系列调试函数来完成解压缩工作;第二次运行时,由于该钩子已被插入 Explorer.exe中,所以程序自己跳过SetWindowsHookEx过程,我们就可以用OD调试了。
2.OK!第二次加载,程序停在如下处:
GraspNet.> 60 PUSHAD
009C0001 9C PUSHFD
009C0002 64:FF35 00>PUSH DWORD PTR FS:[0]
009C0009 E8 7A01000>CALL GraspNet.009C0188
下断点BP EncryptPE_Init,拦截后代码如下:
V2200472.> 55 PUSH EBP
711E39F9 8BEC MOV EBP,ESP
711E39FB 51 PUSH ECX
711E39FC E8 0100000>CALL V2200472.711E3A02 ;有花指令,F7步入
711E3A01 EB 58 JMP SHORT V2200472.711E3A5B
711E3A03 8B4424 40 MOV EAX,DWORD PTR SS:[ESP+40]
711E3A07 8945 FC MOV DWORD PTR SS:[EBP-4],EAX
直到如下代码处:
711E3C2E 6A 01 PUSH 1 ;lParam=1
711E3C30 68 C81B000>PUSH 1BC8 ;wParam=1BC8
711E3C35 A1 0CDC1F7>MOV EAX,DWORD PTR DS:[711FDC0C]
711E3C3A 8B00 MOV EAX,DWORD PTR DS:[EAX]
711E3C3C 50 PUSH EAX ;MSG=IsDebuggerPresentExEdLl(=wfs=)32EXPLORER.EXE
711E3C3D A1 20DE1F7>MOV EAX,DWORD PTR DS:[711FDE20]
711E3C42 8B00 MOV EAX,DWORD PTR DS:[EAX]
711E3C44 50 PUSH EAX
711E3C45 E8 063DF4F>CALL V2200472.71127950 ;JMP to USER32.SendMessageA
711E3C4A EB 0A JMP SHORT V2200472.711E3C56
711E3C4C E8 FB7FFCF>CALL V2200472.711ABC4C
711E3C51 E8 3E81FCF>CALL V2200472.711ABD94
711E3C56 E8 E188FCF>CALL V2200472.711AC53C ;ExitProcess
该进程已完成任务,新的进程已被创建。
3.在出现EncryptPE注册窗口时,用OD附加于explorer.exe,下断HE WaitForDebugEvent,拦截后堆栈为:
0166FD28 711B081C /CALL to WaitForDebugEvent from V2200472.711B0817
0166FD2C 0166FE8C |pDebugEvent = 0166FE8C
|
|