首页
社区
课程
招聘
[分享]ASPr 1.31.04.27 另一种思路脱壳(Import Recovery)
发表于: 2007-4-11 09:04 11241

[分享]ASPr 1.31.04.27 另一种思路脱壳(Import Recovery)

2007-4-11 09:04
11241
【文章标题】: ASPr 1.31.04.27 另一种思路脱壳(Import Recovery)
【文章作者】: wynney
【软件名称】: 某UnpackMe
【下载地址】: 附件下载
【作者声明】: 这个目标程序似乎只需处理2个分支,寻找个处理IAT的思路,最后的IAT修复也有点不一样
--------------------------------------------------------------------------------
【详细过程】
  一、前言
  
  ASPr 1.31用volx大狭的脚本脱不了,刚好碰到了这么个东西,试了下,没深研,关于1.31版本的教程以前不少大狭都有写,虽看似很复杂
  但是很详细,本人只是希望本人能起到抛砖之用,目标程序PEID-Ver 0.15查得:Version: ASProtect 1.31 build 04.27 Beta [Extract]
  大家看教程的过程中注意看着色的地方。以免你们的操作会出现错误。
  
  二、处理IAT
  
  忽略所有异常
  he GetModuleHandleA,Shift+F9,中断2次,Alt+F9
  找到段尾
  
  

00D285C1 61 popad ; 直接F4
00D285C2 75 08 jnz short 00D285CC
00D285C4 B8 01000000 mov eax, 1
00D285C9 C2 0C00 retn 0C
00D285CC 68 00000000 push 0
00D285D1 C3 retn

  
  Ctrl+B:8A 00 FF 43 08
  
  

00D1555B 8A00 mov al, byte ptr [eax] ; 找到这里,F2,F9
00D1555D FF43 08 inc dword ptr [ebx+8] ; 中断后删除断点
00D15560 33D2 xor edx, edx
00D15562 8AD0 mov dl, al
00D15564 8BC7 mov eax, edi

  
  Ctrl+B:8B 54 24 0C 89 02 8B 44 24 0C 89 06 0F B7 44 24 04 01 43 08
  
  

00D1574B 8B5424 0C mov edx, dword ptr [esp+C] ; 找到这里
00D1574F 8902 mov dword ptr [edx], eax ; ①ebp里是IAT,把eax改成ebp
00D15751 8B4424 0C mov eax, dword ptr [esp+C]
00D15755 8906 mov dword ptr [esi], eax
00D15757 0FB74424 04 movzx eax, word ptr [esp+4]
00D1575C 0143 08 add dword ptr [ebx+8], eax

  
  Ctrl+B:8B 54 24 0C 89 02 8D 4C 24 0C 8A 54 24 07 8B C3
  
  

00D15672 8B5424 0C mov edx, dword ptr [esp+C] ; 找到这里
00D15676 8902 mov dword ptr [edx], eax ; ②ebp里是IAT,把eax改成ebp
00D15678 8D4C24 0C lea ecx, dword ptr [esp+C]
00D1567C 8A5424 07 mov dl, byte ptr [esp+7]
00D15680 8BC3 mov eax, ebx
00D15682 E8 F9F7FFFF call 00D14E80 ; ③加密Call,nop掉
00D15687 8BC6 mov eax, esi
00D15689 83E8 02 sub eax, 2
00D1568C 66:8338 00 cmp word ptr [eax], 0
00D15690 75 10 jnz short 00D156A2 ; ④改jmp

  
  做了上述4次修改后,设置忽略除了内存访问和指定异常之外的所有异常
  Shift+f9,中断异常,此时IAT处理完毕,撤消上述4处修改,以免后面出现内存保护错误
  继续Shift+f9到达最后一次异常
  
  三、到达OEP
  
  

00D1E56E 0156 00 add dword ptr [esi], edx ; 最后一次异常
00D1E571 848D 12FB0F29 test byte ptr [ebp+290FFB12], cl
00D1E577 BC 2AA5F123 mov esp, 23F1A52A

  
  Alt+M,在Code段下断,Shift+f9来到OEP

  

00401000 > 6A 00 push 0 ; OEP
00401002 E8 0D010000 call 00401114 ; Enter进去
00401007 A3 00304000 mov dword ptr [403000], eax

  
  

0040110E - FF25 0804D700 jmp dword ptr [D70408] ; kernel32.ExitProcess
00401114 0000 add byte ptr [eax], al ; 二进制编辑为FF25
00401116 5C pop esp
00401117 04 D7 add al, 0D7
00401119 00FF add bh, bh
0040111B 25 6804D700 and eax, 0D70468
00401120 0000 add byte ptr [eax], al ; 二进制编辑为FF25
00401122 74 04 je short 00401128
00401124 D7 xlat byte ptr [ebx+al]
00401125 00FF add bh, bh
00401127 25 8004D700 and eax, 0D70480
0040112C - FF25 9003D700 jmp dword ptr [D70390] ; user32.EndPaint
00401132 - FF25 9C03D700 jmp dword ptr [D7039C] ; user32.LoadBitmapA
00401138 - FF25 7C3FD700 jmp dword ptr [D73F7C] ; user32.SendMessageA
0040113E - FF25 0843D700 jmp dword ptr [D74308] ; GDI32.BitBlt
00401144 - FF25 4445D700 jmp dword ptr [D74544] ; GDI32.CreateCompatibleDC
0040114A - FF25 E845D700 jmp dword ptr [D745E8] ; GDI32.DeleteDC
00401150 - FF25 6C48D700 jmp dword ptr [D7486C] ; GDI32.DeleteObject
00401156 - FF25 344CD700 jmp dword ptr [D74C34] ; GDI32.SelectObject

  
  上述2处二进制编辑后,真实的IAT面貌出现了:)
  
  

0040110E - FF25 0804D700 jmp dword ptr [D70408] ; kernel32.ExitProcess
00401114 - FF25 5C04D700 jmp dword ptr [D7045C] ; kernel32.GetModuleHandleA
0040111A - FF25 6804D700 jmp dword ptr [D70468] ; user32.BeginPaint
00401120 - FF25 7404D700 jmp dword ptr [D70474] ; user32.DialogBoxParamA
00401126 - FF25 8004D700 jmp dword ptr [D70480] ; user32.EndDialog
0040112C - FF25 9003D700 jmp dword ptr [D70390] ; user32.EndPaint
00401132 - FF25 9C03D700 jmp dword ptr [D7039C] ; user32.LoadBitmapA
00401138 - FF25 7C3FD700 jmp dword ptr [D73F7C] ; user32.SendMessageA
0040113E - FF25 0843D700 jmp dword ptr [D74308] ; GDI32.BitBlt
00401144 - FF25 4445D700 jmp dword ptr [D74544] ; GDI32.CreateCompatibleDC
0040114A - FF25 E845D700 jmp dword ptr [D745E8] ; GDI32.DeleteDC
00401150 - FF25 6C48D700 jmp dword ptr [D7486C] ; GDI32.DeleteObject
00401156 - FF25 344CD700 jmp dword ptr [D74C34] ; GDI32.SelectObject

  
  四、修复
  
  大家看到了,IAT所在的区段是在D70000,我们打开ImportREC,OEP输入1000,点自动查找IAT,竟然提示
  “在此OEP处未找到可用的信息”
  于是,我们需要特殊处理下了:(

  
  按照下图示操作后,修复脱壳文件,运行看看,脱壳成功
  该版了,咋样插图进来呀?:(
  
  用FixRes和Resource Binder优化下吧
  
--------------------------------------------------------------------------------
【经验总结】
  1、引申到某些壳,如果IAT被加密了,请先确定一个IAT的地址,对这个地址进行下断,可以找到IAT处理的点
  

  2、ASPr 1.31的有几个分支处理,本目标程序似乎只需处理2个分支,而且使用的是很懒的法子,并非某些大狭使用的Patch
  代码的法子,如果有兴趣大家可以看看fly原先写的教程
  
--------------------------------------------------------------------------------
【版权声明】: 本文原创于看雪技术论坛, 转载请注明作者并保持文章的完整, 谢谢!

                                                       2007年04月11日 wynney

[课程]Linux pwn 探索篇!

上传的附件:
收藏
免费 7
支持
分享
最新回复 (18)
雪    币: 256
活跃值: (248)
能力值: ( LV9,RANK:170 )
在线值:
发帖
回帖
粉丝
2
支持楼主好文!顶!
2007-4-11 09:21
0
雪    币: 304
活跃值: (82)
能力值: ( LV9,RANK:170 )
在线值:
发帖
回帖
粉丝
3

申请加入粉丝团~~~~
2007-4-11 10:37
0
雪    币: 215
活跃值: (27)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
4
:好文:不一样的思路:顶了
2007-4-11 10:41
0
雪    币: 443
活跃值: (200)
能力值: ( LV9,RANK:1140 )
在线值:
发帖
回帖
粉丝
5
申请加入粉丝团~~~~
2007-4-11 11:14
0
雪    币: 405
活跃值: (10)
能力值: ( LV9,RANK:1130 )
在线值:
发帖
回帖
粉丝
6
没用过高级指令这个东西,原来这样的
2007-4-11 16:22
0
雪    币: 2585
活跃值: (2105)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
7
顶了
2007-4-11 21:06
0
雪    币: 250
活跃值: (11)
能力值: ( LV6,RANK:90 )
在线值:
发帖
回帖
粉丝
8
这个思路真的不一样,照着楼主的思路走一遍吧
2007-4-11 21:12
0
雪    币: 200
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
9
强。我向你们学习。
2007-4-11 21:54
0
雪    币: 144
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
10
申请加入粉丝团 :)
2007-4-11 22:22
0
雪    币: 416
活跃值: (29)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
11
俺也申请加入粉丝团 :)
2007-4-11 23:09
0
雪    币: 0
能力值: (RANK:10 )
在线值:
发帖
回帖
粉丝
12
慢慢看吧```
2007-4-12 13:19
0
雪    币: 200
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
13
还是OEP的问题!~
支持楼主
2007-5-9 23:31
0
雪    币: 200
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
14
这个学习了!谢谢分享
2007-5-9 23:37
0
雪    币: 200
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
15
支持了顶,谢谢楼主
2007-5-10 18:49
0
雪    币: 212
活跃值: (10)
能力值: ( LV4,RANK:50 )
在线值:
发帖
回帖
粉丝
16
谢谢分享了!
2007-6-29 21:13
0
雪    币: 190
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
17
2007-7-7 12:27
0
雪    币: 200
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
18
刚学,还看不懂哦,
2007-7-9 11:04
0
雪    币: 200
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
fjy
19
支持楼主!顶
2007-8-3 23:37
0
游客
登录 | 注册 方可回帖
返回
//