中国电脑论坛--电脑爱好者,计算机论坛's Archiver

joy666 发表于 2008-5-25 19:37

VIP初级教程第四课 04、手脱UPX的几种方法.rar

“KillBox”用PEID查得是ASPack 2.12 -> Alexey Solodovnikov
1、单步跟踪法
2、ESP定律法
00424001 K>  60                pushad //入口,看到关键提示大家就应该惊醒了,单步F8
00424002     E8 03000000       call KillBox.0042400A //到这里,注意寄存器提示ESP=0012FFA4
00424007   - E9 EB045D45       jmp 459F44F7
0042400C     55                push ebp
0042400D     C3                retn
命令行下断hr 0012FFA4,F9运行!
3、内存镜像法
首先Alt+M打开内存镜像
找到.rsrc区段
内存映射,项目 29
地址=004D3000
大小=00241000 (2363392.)
宿主=登陆器   00400000
区段=.rsrc   //F2下断,Shift+F9运行!
包含=resources
类型=Imag 01001002
访问=R
初始访问=RWE
继续
内存映射,项目 22
地址=00401000
大小=000BB000 (765952.)
宿主=登陆器   00400000
区段=CODE //F2下断,Shift+F9运行!直接到达OEP!
包含=code
类型=Imag 01001002
访问=R
初始访问=RWE
********************************************************************************************
"登陆器"其实是一个ASPack的变形壳
今天我们使用2种方法快速搞定它!
一、ESP定律法
二、内存断点法
******************************************************************************************************
一、ESP定律法
OD载入程序
00717082 登陆>  60         pushad  //入口,看到关键提示大家就应该惊醒了,单步F8
00717083      E8 00000000  call 登陆器.00717088  //到这里,注意寄存器提示ESP=0012FFA4
00717088      5D           pop ebp
00717089      81ED B6A4450>sub ebp,登陆器.0045A4B6
0071708F      8DBD B0A4450>lea edi,dword ptr ss:[ebp+45A4B0]
00717095      81EF 8200000>sub edi,82
命令行下断hr 0012FFA4,F9运行!
00717374    - FFE0         jmp eax      ; 登陆器.00714001  //到这里,单步F8
00717376      42           inc edx
00717377      4B           dec ebx
00717378      2E:44        inc esp
0071737A      41           inc ecx
00714001      60           pushad  //来到这里,仍然是关键提示,单步F8
00714002      E8 03000000  call 登陆器.0071400A  //到这里,ESP=0012FFA4(和上面的一样),由于上一个硬件断点没删除所以到这里我们直接F9就可以了!
00714007    - E9 EB045D45  jmp 45CE44F7
0071400C      55           push ebp
0071400D      C3           retn
007143B0     /75 08        jnz short 登陆器.007143BA //到这里!删除断点,F8
007143B2     |B8 01000000  mov eax,1
007143B7     |C2 0C00      retn 0C
007143BA     \68 D8BD4B00  push 登陆器.004BBDD8
007143BF      C3           retn  //返回到 004BBDD8 (登陆器.004BBDD8),程序的OEP!

004BBDD8      55           push ebp //OEP,看入口代码特征就知道程序是Delphi写的
004BBDD9      8BEC         mov ebp,esp
004BBDDB      83C4 F0      add esp,-10
004BBDDE      B8 98B94B00  mov eax,登陆器.004BB998
004BBDE3      E8 BCA5F4FF  call 登陆器.004063A4
004BBDE8      A1 7CE84B00  mov eax,dword ptr ds:[4BE87C]
004BBDED      8B00         mov eax,dword ptr ds:[eax]
004BBDEF      E8 1073FAFF  call 登陆器.00463104
在此LordPE完全Dump!请出Import来修复下!OEP处填BBDD8--自动搜索IAT--获取输入表(全部有效)--FixDump!
测试正常运行,用PEID查看是Borland Delphi 6.0 - 7.0写的
好了,ESP定律法就到这里,下面介绍的是内存断点法
******************************************************************************************************
二、内存断点法
重新载入下吧,来实行我们的内存断点法
首先Alt+M打开内存镜像
找到.rsrc区段
内存映射,项目 29
地址=004D3000
大小=00241000 (2363392.)
宿主=登陆器   00400000
区段=.rsrc   //F2下断,Shift+F9运行!
包含=resources
类型=Imag 01001002
访问=R
初始访问=RWE
77F764F3      66:8B50 0C   mov dx,word ptr ds:[eax+C]  //来到这里,我们不用管它
77F764F7      8995 6CFFFFF>mov dword ptr ss:[ebp-94],edx
77F764FD      8D70 10      lea esi,dword ptr ds:[eax+10]
77F76500      89B5 68FFFFF>mov dword ptr ss:[ebp-98],esi
77F76506      66:F747 02 F>test word ptr ds:[edi+2],0FFFF

再次Alt+M打开内存镜像
找到.code区段或者是.text区段(因为编写语言不一样所以区段名称的一样的,一般是00401000段)
内存映射,项目 22
地址=00401000
大小=000BB000 (765952.)
宿主=登陆器   00400000
区段=CODE //F2下断,Shift+F9运行!直接到达OEP!
包含=code
类型=Imag 01001002
访问=R
初始访问=RWE

004BBDD8      55           push ebp  //OEP,看入口代码特征就知道程序是Delphi写的
004BBDD9      8BEC         mov ebp,esp
004BBDDB      83C4 F0      add esp,-10
004BBDDE      B8 98B94B00  mov eax,登陆器.004BB998
004BBDE3      E8 BCA5F4FF  call 登陆器.004063A4
004BBDE8      A1 7CE84B00  mov eax,dword ptr ds:[4BE87C]
在此LordPE完全Dump!请出Import来修复下!OEP处填BBDD8--自动搜索IAT--获取输入表(全部有效)--FixDump!
测试正常运行,用PEID查看是Borland Delphi 6.0 - 7.0写的


视频教程下载地址:
[attach]2135[/attach]

页: [1]

Powered by Discuz! Archiver 6.1.0  © 2001-2007 Comsenz Inc.