【文章标题】: 脱UPX加壳的notepad.exe
【文章作者】: 微微虫[S.T.C][DCG]
【作者邮箱】:nuxgod@163.com
【作者主页】: http://wwcgodsoft.ys168.com
【作者QQ号】: 86742748
【软件名称】: WinXP的记事本
【软件大小】: 48KB
【加壳方式】: UPX加壳
【使用工具】: OllyDBG v1.10[S.T.C]、PEiD v0.94
【操作平台】: WinXP SP2
【作者声明】: 我的破解水平很菜,请高手们不吝教正。有些不足的地方请朋友们帮忙修改一下。
--------------------------------------------------------------------------------
【详细过程】
一、UPX是最广泛使用的压缩壳之一,它除了与Windows系列版本外,还有Linux下的版本。它是在命令提示符界面下进行加壳。
UPX壳的出口点关键字是:popad。加了UPX的notepad.exe可以到我的主页http://wwcgodsoft.ys168.com。
二、先用PEiD检测是加了什么壳,一拿程序不要就进行调试,要先判别是否加壳。经检查是:
UPX 0.89.6 - 1.02 / 1.05 - 1.24 -> Markus & Laszlo
三、脱UPX壳的三个方法:
1、用[S.T.C]专用OD载入notepad.exe手动脱壳,跟到最后popad处就行拉。脱壳过程中有有好多循环。对付循环,须让程
序往前运行,不能让它往回跳。
2、重新载入notepad.exe,按键盘Ctrl+F搜索关键字popad,然后F4运行到此处。不远处有个跳转,它能到程序真正的入口点:
010143DD 61 POPAD -->F4到这里
010143DE 8D4424 80 LEA EAX,DWORD PTR SS:[ESP-80] -->F8单步步过,以下都是按F8
010143E2 6A 00 PUSH 0
010143E4 39C4 CMP ESP,EAX
010143E6 ^ 75 FA JNZ SHORT notepad.010143E2 -->要回跳到010143E2,不使它回跳,在下一行按F4
010143E8 83EC 80 SUB ESP,-80
010143EB - E9 AD2FFFFF JMP notepad.0100739D -->就是这个跳转可以到OEP
0100739D 6A 70 PUSH 70 -->程序的OEP处,现在可以转存了。点这一行右击,选择“Dump debugged process”
0100739F 68 98180001 PUSH notepad.01001898
010073A4 E8 BF010000 CALL notepad.01007568
010073A9 33DB XOR EBX,EBX
010073AB 53 PUSH EBX
3、下断点进行脱壳:bp GetProcAddress
按F9运行程序,停在这里:
7C80AC28 > 8BFF MOV EDI,EDI ; notepad.0101301C -->按F2进行切换,再按Ctrl+F9 来到下面
7C80AC87 C2 0800 RETN 8 -->到这里了,按F2切换,F8单步过
0101439D 09C0 OR EAX,EAX ; kernel32.GetCurrentThreadId -->回到程序自己的领空了,F8过
0101439F 74 07 JE SHORT notepad.010143A8
010143A1 8903 MOV DWORD PTR DS:[EBX],EAX
010143A3 83C3 04 ADD EBX,4
:
:
:
0100739D 6A 70 PUSH 70 -->来到程序的OEP处,现在可以转存了。
0100739F 68 98180001 PUSH notepad.01001898
010073A4 E8 BF010000 CALL notepad.01007568
010073A9 33DB XOR EBX,EBX
四、脱完壳别忘了检验一下,测试结果如下:
Microsoft Visual C++ 7.0 Method2,是VC++编写的,正确!
今天就介绍一下怎么脱UPX壳,未完待续!
--------------------------------------------------------------------------------
【版权声明】: 本文纯属技术交流,转载请注明作者并保持文章的完整,谢谢!有什么不懂和疑问,请联系我!
2006年08月13日 3:14:12