当前位置:文档之家› UPX0.89脱壳+自校验解除

UPX0.89脱壳+自校验解除

【作者】shy-小小生
【工具】loadPE, Ollydbg,PEID,Import_REC 1.6
【平台】WINXP
【软件名称】桌面提醒精灵5.02 (在多特上找到的)
【加壳方式】UPX 0.89.6 - 1.02 / 1.05 - 1.24 -> Markus & Laszlo
【声明】学习之用并无商业企图!

-----------------------------------
【内容】

一.脱壳


-------------PEID查壳------------
UPX 0.89.6 - 1.02 / 1.05 - 1.24 -> Markus & Laszlo

OD载入直接单步向下 不要让他会跳!到达

0086B038 /74 07 je short zmtxjl.0086B041
0086B03A |8903 mov dword ptr ds:[ebx],eax
0086B03C |83C3 04 add ebx,4
0086B03F ^|EB D8 jmp short zmtxjl.0086B019 ;这个地方回跳了
0086B041 \FF96 60FB4600 call dword ptr ds:[esi+46FB60] ; 但是在这边F4不能断下来会飞掉(原因我也不知)
0086B047 8BAE 54FB4600 mov ebp,dword ptr ds:[esi+46FB54]
0086B04D 8DBE 00F0FFFF lea edi,dword ptr ds:[esi-1000] ;在这个地方F4断下
0086B053 BB 00100000 mov ebx,1000




继续向下单步走!!

0086B075 58 pop eax
0086B076 61 popad
0086B077 8D4424 80 lea eax,dword ptr ss:[esp-80]
0086B07B 6A 00 push 0
0086B07D 39C4 cmp esp,eax
0086B07F ^ 75 FA jnz short zmtxjl.0086B07B
0086B081 83EC 80 sub esp,-80
0086B084 - E9 3F55CFFF jmp zmtxjl.005605C8 ;到达这边 在单步直接到达OEP


---------------jmp zmtxjl.005605C8 到达----------

005605C8 55 push ebp ;跳到这里 OEP
005605C9 8BEC mov ebp,esp
005605CB 6A FF push -1
005605CD 68 20B37E00 push zmtxjl.007EB320
005605D2 68 BC295600 push zmtxjl.005629BC
005605D7 64:A1 00000000 mov eax,dword ptr fs:[0]
005605DD 50 push eax
005605DE 64:8925 00000000 mov dword ptr fs:[0],esp




loadPE脱壳!


import_REC 修复!没有无效指针!!!

点击程序! 程序一闪而过!自动退出了!!!说明程序存在自校验!!


接下来是解除自校验!


================================================

二.自校验解除

OD载入修复文件!在命令行直接下段bpx ExitProcess!!!(记住大小写区分)

Shief+F9运行!
-------------------------------------------
004FB575 FF15 F0425800 call dword ptr ds:[<&kernel32.ExitP>; kernel32.ExitProcess ;断在这里!查看堆栈信息!
004FB57B 5D pop ebp
004FB57C C3 retn

-----------堆栈信息--------------------
0012FC80 004FB571 dumped_.004FB571
0012FC84 00000000 \ExitCode = 0
0012FC88 /0012FCF4
0012FC8C |00432454 返回到 dumped_.00432454 来自 dumped_.004CFC9D ;说明这个退出CALL由004CFC9D调过来的。并且004CFC9D可能是由00432454上面的某一个CALL到达的!
0012FC90 |00000000


---------crtl+g 来到00432454 -----

------------
00432429 53 push ebx
0043242A E8 50D80900 call dumped_.004CFC7F
0043242F 83C4 04 add esp,4
00432432 837D AC 00 cmp dword ptr ss:[ebp-54],0
00432436 0F84 07000000 je dumped_.00432443 ; 3
0043243C B8 01000000 mov eax,1
00432441 EB 02 jmp short dumped_.00432445 ; 2
00432443 33C0 xor eax,eax
00432445 85C0 test eax,eax
00432447 0F84 0A000000 je dumped_.00432457 ; 跳过call dumped_.004CFC9D 将他改成JNE 保存!!!
0043244D 6A 00 push 0
0043244F E8 49D80900 call dumped_.004CFC9D ;来到这边向上翻 有三个跳
00432454 83C4 04 add esp,4


修改:

00432447 0F84 0A000000 je dumped_.00432457 ;将JE改成JNE 保存!!!

运行新文件 依旧自动退出 ! MB 还有自校验··


-------------载入新文件 crtl+g 来到00432454 ------


00432447 /75 0E jnz short dumped_.00432457 ; 修改过的 在此处下断 重新载入运行, 在这边断下
00432449 |90 nop
0043244A |90 nop
0043244B |90 nop
0043244C |90 nop
0043244D |6A 00 push 0
0043244F |E8 49D80900 call dumped_.004CFC9D
00432454 |83C4 04 add esp,4 ;这里到 向上翻
00432457 \E9 0C000000 jmp dumped_.00432468
0043245C E9 00000000 jmp dumped_.00432461

---------------再下bpx ExitProcess断点 Shief+F9 运行-------------------


004FB560 55 push ebp
004FB561 8BEC mov ebp,esp
004FB563 8B45 08 mov eax,dword ptr ss:[ebp+8]
004FB566 50 push eax
004FB567 B9 381D8200 mov ecx,dumped_.00821D38
004FB56C E8 0F85FFFF call dumped_.004F3A80
004FB571 8B4D 08 mov ecx,dword ptr ss:[ebp+8]
004FB574 51 push ecx
004FB575 FF15 F0425800 call dword ptr ds:[<&kernel32.ExitP>; kernel32.ExitProcess ;来到这边查看堆栈
004FB57B 5D pop ebp
004FB57C C3 retn

-----------堆栈
0012FC88 004FB571 dumped_.004FB571
0012FC8C 00000000 \ExitCode = 0
0012FC90 /0012FCF4
0012FC94 |00432C99 返回到 dumped_.00432C99 来自 dumped_.004CFC9D ;到00432C99处看看
0012FC98 |00000000
0012FC9C |0012FCB4
0012FCA0 |00000001


----------------来到00432C99处----------

00432C88 33C0 xor eax,eax
00432C8A 85C0 test eax,eax
00432C8C 0F84 0A000000 je dumped_.00432C9C ;跳过下面的CALL
00432C92 6A 00 push 0
00432C94 E8 04D00900 call dumped_.004CFC9D ;CALL退出函数
00432C99 83C4 04 add esp,4
00432C9C 8B5D FC mov ebx,dword ptr ss:[ebp-4]
00432C9F 85DB test ebx,ebx


--------- 修改
00432C8C 0F84 0A000000 je dumped_.0043

2C9C ;将JE改成JNE,保存··



-------------运行程序----------
可以运行了@!!!
注册破解我就不弄了··呵呵··过程应该蛮详细的吧··我也是新手有兴趣的朋友可以交流交流·

相关主题
文本预览
相关文档 最新文档