-----------------------------------------------------------------------------------
黑客动画吧 http://www.hack58.com
专业的黑客动画教程网站
免费学习黑客黑客技术
成为黑客不是梦。
打造国内最大的黑客动画网站
注意:所有教程全部对外免费开放
-----------------------------------------------------------------------------------
动画说明:第一节动画――方法1:单步跟踪
第二节动画――方法2:ESP定律手动脱壳
方法3:内存镜像法
第三节动画――方法4:模拟跟踪
方法5:捷径(就叫搜索法吧)
【动画标题】: 第一课 Hanzi原创语音系列教程――第一课UPX手动脱壳的五种方法
【动画作者】: 涵子
【作者邮箱】: hanzi53@tom.com
【作者主页】: www.hanzi.ful.cn
【作者QQ号】: 519485795
【下载地址】: :
电信通道 网通通道
【加壳方式】: upx
【操作平台】: winpx2
【作者声明】: 只是感兴趣,没有其他目的。失误之处敬请诸位大侠赐教!
动画工具――屏幕录相专家6.0
--------------------------------------------------------------------------------
大家好,我是(Hanzi)涵子,很高兴又和大家见面了。为了答谢黑客动画吧对我的支持,从今天开始
我将不定期的给大家做一些免费教程。具体请到黑客动画吧搜索吧。
今天是第一课 Hanzi原创语音系列教程之UPX手动脱壳――第一节UPX手动脱壳的五种方法,共七节。
第一节 UPX手动脱壳的五种方法
第二节 手动跟踪UPX之CHMmaker2.88
第三节 UPX变形脱壳-机器猫安全卫士
第四节 飞雪日历V1.90.0517
第五节 Flash ScreenSaver Maker 3.356
第六节 泰来文件切割合并工具-UPX手脱
第七节 E阳网络电视
我们今天讲第一节
第一节 UPX手动脱壳的五种方法
1、壳介绍:
UPX是一种很老而且强大的壳 不过它的脱壳机随处就能找到。它可以高度压缩PE文件格式的免费的
packer,压缩后original file的section被重新组织成4个section,分别从upx0到upx2, section of upx0,
其Raw Size是0,但Virtual Size与原始文件Size of Image相比,稍大,可见是UPX是将解压缩后的原始
文件数据映射到此;upx1起始部分是被UPX重新构建的Import Table,但很不幸,只包括IMAGE_IMPORT_DE
SCRIPTOR中的Name部分的正确信息,再往下是被extract出的Resource部分 的Icon和Version Informat
ion,但无法用eXeScope正确查看;upx2为UPX的解压缩代码,upx3包括被压缩的原始数据。
2、主要步骤:
寻找入口点,转储(dump)程序,修复引入函数表(Import Table)
3、使用工具:
查壳工具 PEiD0.94 中文版
调试工具 flyODBG 中文版
修复工具 Import REConstructor v1.6 中文版
4、脱壳对象:
win98记事本
5、脱壳方法:
方法1:单步跟踪(提高手动脱壳能力)
方法2:ESP定律手动脱壳(三步完成)
第一步:ESP突现,0012FFA4
第二步:跟随(dd 0012FFA4)回车,
第三步: 断点--硬件访问--WORD,F9运行
方法3:内存镜像法
ALT+M打开内存
找到.rsrc,F2下断,F9运行
。。。。。。
ALT+M打开内存
找到UPX0,F2下断,F9运行
方法4:模拟跟踪
找到.rsrc,F2下断,F9运行
下模拟跟踪命令 tc eip<401000 F8单入
方法5:捷径(就叫搜索法吧)(也是前辈们总结出来的方法)
直接CTRL+F,输入popad
语音教程,大家就看我操作吧!
6、详细脱壳过程:
方法1:单步跟踪(最常见的方法)
0040E8C0 N> 60 pushad //停在这里了,我们F8单步
0040E8C1 BE 15B04000 mov esi,NOTEPAD.0040B015
0040E8C6 8DBE EB5FFFFF lea edi,dword ptr ds:[esi+FFFF>
0040E8CC 57 push edi
0040E8CD 83CD FF or ebp,FFFFFFFF
0040E8D0 EB 10 jmp short NOTEPAD.0040E8E2 //跳
。。。。。。。。。。
0040E8E2 8B1E mov ebx,dword ptr ds:[esi] //跳到这里,继续单步
0040E8E4 83EE FC sub esi,-4
0040E8E7 11DB adc ebx,ebx
0040E8E9 ^ 72 ED jb short NOTEPAD.0040E8D8 //这里要往回跳了
0040E8EB B8 01000000 mov eax,1 //F4,然后继续F8
0040E8F0 01DB add ebx,ebx
0040E8F2 75 07 jnz short NOTEPAD.0040E8FB //跳
。。。。。。。。。。。
0040E8FB 11C0 adc eax,eax //来到这里,F8继续
0040E8FD 01DB add ebx,ebx
0040E8FD 01DB add ebx,ebx
0040E8FF ^ 73 EF jnb short NOTEPAD.0040E8F0
0040E901 75 09 jnz short NOTEPAD.0040E90C //跳
。。。。。。。。。。。
0040E90C 31C9 xor ecx,ecx //跳到这里,继续F8
0040E90E 83E8 03 sub eax,3
0040E90E 83E8 03 sub eax,3
0040E911 72 0D jb short NOTEPAD.0040E920 //跳
。。。。。。。。。。。
0040E920 01DB add ebx,ebx //跳到这里,继续F8
0040E922 75 07 jnz short NOTEPAD.0040E92B //跳
。。。。。。。。。。。
0040E92B 11C9 adc ecx,ecx //跳到了这里,继续F8
0040E92D 01DB add ebx,ebx
0040E92F 75 07 jnz short NOTEPAD.0040E938 //跳
。。。。。。。。。。。
0040E938 11C9 adc ecx,ecx //跳到这里,继续F8
0040E93A 75 20 jnz short NOTEPAD.0040E95C //跳
。。。。。。。。。。。
0040E95C 81FD 00F3FFFF cmp ebp,-0D00 //来到这,继续F8
0040E962 83D1 01 adc ecx,1
0040E965 8D142F lea edx,dword ptr ds:[edi+ebp]
0040E968 83FD FC cmp ebp,-4
0040E96B 76 0F jbe short NOTEPAD.0040E97C
0040E96D 8A02 mov al,byte ptr ds:[edx]
0040E96F 42 inc edx
0040E970 8807 mov byte ptr ds:[edi],al
0040E972 47 inc edi
0040E973 49 dec ecx
0040E974 ^ 75 F7 jnz short NOTEPAD.0040E96D //要往回跳了
0040E976 ^ E9 63FFFFFF jmp NOTEPAD.0040E8DE
0040E97B 90 nop
0040E97C 8B02 mov eax,dword ptr ds:[edx] //在这里F4,继续F8
0040E97E 83C2 04 add edx,4
0040E981 8907 mov dword ptr ds:[edi],eax
0040E983 83C7 04 add edi,4
0040E986 83E9 04 sub ecx,4
0040E989 ^ 77 F1 ja short NOTEPAD.0040E97C
0040E98B 01CF add edi,ecx
0040E98D ^ E9 4CFFFFFF jmp NOTEPAD.0040E8DE //要往回跳了。
0040E992 5E pop esi //这里F4,继续F8
0040E993 89F7 mov edi,esi
0040E995 B9 DD000000 mov ecx,0DD
0040E99A 8A07 mov al,byte ptr ds:[edi]
0040E99C 47 inc edi
0040E99D 2C E8 sub al,0E8
0040E99F 3C 01 cmp al,1
0040E9A1 ^ 77 F7 ja short NOTEPAD.0040E99A //要往回跳了
0040E9A3 803F 00 cmp byte ptr ds:[edi],0 //这里F4,继续F8
0040E9A6 ^ 75 F2 jnz short NOTEPAD.0040E99A //要往回跳了
0040E9A8 8B07 mov eax,dword ptr ds:[edi] //这里F4,继续F8
0040E9AA 8A5F 04 mov bl,byte ptr ds:[edi+4]
0040E9AD 66:C1E8 08 shr ax,8
0040E9B1 C1C0 10 rol eax,10
0040E9B4 86C4 xchg ah,al
0040E9B6 29F8 sub eax,edi
0040E9B8 80EB E8 sub bl,0E8
0040E9BB 01F0 add eax,esi
0040E9BD 8907 mov dword ptr ds:[edi],eax
0040E9BF 83C7 05 add edi,5
0040E9C2 89D8 mov eax,ebx
0040E9C4 ^ E2 D9 loopd short NOTEPAD.0040E99F //要往回跳了
0040E9C6 8DBE 00C00000 lea edi,dword ptr ds:[esi+C000> //这里F4,继续F8
0040E9CC 8B07 mov eax,dword ptr ds:[edi]
0040E9CE 09C0 or eax,eax
0040E9D0 74 3C je short NOTEPAD.0040EA0E
0040E9D2 8B5F 04 mov ebx,dword ptr ds:[edi+4]
0040E9D5 8D8430 14EC00>lea eax,dword ptr ds:[eax+esi+>
0040E9DC 01F3 add ebx,esi
0040E9DE 50 push eax
0040E9DF 83C7 08 add edi,8
0040E9E2 FF96 A0EC0000 call dword ptr ds:[esi+ECA0]
0040E9E8 95 xchg eax,ebp
0040E9E9 8A07 mov al,byte ptr ds:[edi]
0040E9EB 47 inc edi
0040E9EC 08C0 or al,al
0040E9EE ^ 74 DC je short NOTEPAD.0040E9CC
0040E9F0 89F9 mov ecx,edi
0040E9F2 57 push edi
0040E9F3 48 dec eax
0040E9F4 F2:AE repne scas byte ptr es:[edi]
0040E9F6 55 push ebp
0040E9F7 FF96 A4EC0000 call dword ptr ds:[esi+ECA4]
0040E9FD 09C0 or eax,eax
0040E9FF 74 07 je short NOTEPAD.0040EA08
0040EA01 8903 mov dword ptr ds:[ebx],eax
0040EA03 83C3 04 add ebx,4
0040EA06 ^ EB E1 jmp short NOTEPAD.0040E9E9 //要往回跳了
0040EA08 FF96 A8EC0000 call dword ptr ds:[esi+ECA8]
0040EA0E 61 popad //这里F4,继续F8
0040EA0F - E9 B826FFFF jmp NOTEPAD.004010CC //在这里直接跳到了OEP
。。。。。。。。。。。。。。。。。。。
004010CC 55 push ebp //来到这里,在此dump
004010CD 8BEC mov ebp,esp
004010CF 83EC 44 sub esp,44
其他操作请看动画
方法2:ESP定律手动脱壳
0040E8C0 N> 60 pushad //停在这里了,我们F8单步
0040E8C1 BE 15B04000 mov esi,NOTEPAD.0040B015 //ESP突现,0012FFA4
dd 0012FFA4回车, 断点--硬件访问--WORD,F9运行,直接来到这里
0040EA0F - E9 B826FFFF jmp NOTEPAD.004010CC //来到这,F8单步就到了OEP
不详述,和方法一一样了
方法3:内存镜像法(由于经过了方法2和方法3大家都熟悉了代码,我在这里就不写了)
ALT+M打开内存
找到.rsrc,F2下断,F9运行
。。。。。。
ALT+M打开内存
找到UPX0,F2下断,F9运行
0040EA01 8903 mov dword ptr ds:[ebx],eax ; kernel32._lwrite //来到这,F8继续
0040EA03 83C3 04 add ebx,4
0040EA06 ^ EB E1 jmp short NOTEPAD.0040E9E9
0040EA08 FF96 A8EC0000 call dword ptr ds:[esi+ECA8]
0040EA0E 61 popad
0040EA0F - E9 B826FFFF jmp NOTEPAD.004010CC
方法4:
找到.rsrc,F2下断,F9运行
下模拟跟踪命令 tc eip<401000 F9运行
0040EA0F - E9 B826FFFF jmp NOTEPAD.004010CC //F8继续
方法5:捷径(也是前辈们总结出来的方法)
直接CTRL+F,输入popad
0040EA0E 61 popad //F2下断,F9运行,F2取消断点,单步F8
0040EA0F - E9 B826FFFF jmp NOTEPAD.004010CC
--------------------------------------------------------------------------------
【版权声明】: 本动画原创于黑客动画吧, 大家可以免费转载,
转载请注明作者并保持动画的完整性, 谢谢!
2006年06月05日 13:29:09
下载地址:
电信通道 网通通道
[培训]《安卓高级研修班(网课)》月薪三万计划,掌握调试、分析还原ollvm、vmp的方法,定制art虚拟机自动化脱壳的方法