首页
社区
课程
招聘
用Ollydbg手脱ASPack加壳的DLL
发表于: 2004-6-2 11:43 25400

用Ollydbg手脱ASPack加壳的DLL

fly 活跃值
85
2004-6-2 11:43
25400

            
                     
                        
【目标程序】:ASPack加壳的EdrLib.dll。附件中含有输入表和UnPacked以供参考。        
            
【作者声明】:只是感兴趣,没有其他目的。失误之处敬请诸位大侠赐教!
         
【调试环境】:WinXP、Ollydbg1.10、LordPE、ImportREC
            
―――――――――――――――――――――――――――――――――
【脱壳过程】:
         
         
                           
一、重定位表RVA + OEP
               
      

     
003B7001     60                  pushad//进入OD后停在这
003B7002     E8 03000000         call EdrLib.003B700A
mov ecx,dword ptr ds:[esi+4]
sub ecx,8
shr ecx,1
003B71C8     8785 35050000       xchg dword ptr ss:[ebp+535],eax
003B71CE     8B95 22040000       mov edx,dword ptr ss:[ebp+422]
003B71D4     8B85 2D050000       mov eax,dword ptr ss:[ebp+52D]
003B71DA     2BD0                sub edx,eax
//这里其实就是检测与映像基址是否相符,和ASProtect的方法一样。不符则重定位处理!★
003B71DC     74 79               je short EdrLib.003B7257
//可以在这里改标志位Z=1,使其跳转,这样脱壳后就不需要修改基址了。 ★
003B71DE     8BC2                mov eax,edx
003B71E0     C1E8 10             shr eax,10
003B71E3     33DB                xor ebx,ebx
003B71E5     8BB5 39050000       mov esi,dword ptr ss:[ebp+539]
//[ebp+539]=003B754C=00006000 ★ 这个00006000就是重定位表的RVA!
003B71EB     03B5 22040000       add esi,dword ptr ss:[ebp+422]
003B71F1     833E 00             cmp dword ptr ds:[esi],0
003B71F4     74 61               je short EdrLib.003B7257
//重定位处理完毕后这里就跳转       在003B7257处下断
003B71F6     8B4E 04             mov ecx,dword ptr ds:[esi+4]
//找到这里
003B71F9     83E9 08             sub ecx,8
003B71FC     D1E9                shr ecx,1
003B71FE     8B3E                mov edi,dword ptr ds:[esi]
003B7200     03BD 22040000       add edi,dword ptr ss:[ebp+422]
003B7206     83C6 08             add esi,8
003B7209     66:8B1E             mov bx,word ptr ds:[esi]
003B720C     C1EB 0C             shr ebx,0C
003B720F     83FB 01             cmp ebx,1
003B7212     74 0C               je short EdrLib.003B7220
003B7214     83FB 02             cmp ebx,2
003B7217     74 16               je short EdrLib.003B722F
003B7219     83FB 03             cmp ebx,3
003B721C     74 20               je short EdrLib.003B723E
003B721E     EB 2C               jmp short EdrLib.003B724C
003B7220     66:8B1E             mov bx,word ptr ds:[esi]
003B7223     81E3 FF0F0000       and ebx,0FFF
003B7229     66:01041F           add word ptr ds:[edi+ebx],ax
003B722D     EB 1D               jmp short EdrLib.003B724C
003B722F     66:8B1E             mov bx,word ptr ds:[esi]
003B7232     81E3 FF0F0000       and ebx,0FFF
003B7238     66:01141F           add word ptr ds:[edi+ebx],dx
003B723C     EB 0E               jmp short EdrLib.003B724C
003B723E     66:8B1E             mov bx,word ptr ds:[esi]
003B7241     81E3 FF0F0000       and ebx,0FFF
003B7247     01141F              add dword ptr ds:[edi+ebx],edx
003B724A     EB 00               jmp short EdrLib.003B724C
003B724C     66:830E FF          or word ptr ds:[esi],0FFFF
//这里把许多重定位数据变为FFFF ★ NOP掉!
003B7250     83C6 02             add esi,2
003B7253     E2 B4               loopd short EdrLib.003B7209
003B7255     EB 9A               jmp short EdrLib.003B71F1//循环处理
         
003B7257     8B95 22040000       mov edx,dword ptr ss:[ebp+422]//这里下断,ESI=003B63B0
003B725D     8BB5 41050000       mov esi,dword ptr ss:[ebp+541]
003B7263     0BF6                or esi,esi
003B7265     74 11               je short EdrLib.003B7278

[注意]传递专业知识、拓宽行业人脉——看雪讲师团队等你加入!

收藏
免费 11
支持
分享
最新回复 (52)
雪    币: 898
活跃值: (4039)
能力值: ( LV9,RANK:3410 )
在线值:
发帖
回帖
粉丝
2
EdrLib.dll[ASPack]+UnPacked.rar 包含文件:
            
   
   
EdrLib.dll
EdrTest.exe
UnPaacked-EdrLib.dll
树文件.txt

点击下载:EdrLib.dll[ASPack]+UnPacked.rar !
2004-6-2 11:46
0
雪    币: 223
活跃值: (106)
能力值: ( LV4,RANK:50 )
在线值:
发帖
回帖
粉丝
3
:D
2004-6-2 11:47
0
雪    币: 319
活跃值: (2459)
能力值: ( LV12,RANK:980 )
在线值:
发帖
回帖
粉丝
4
fly兄真是神速啊!
2004-6-2 13:34
0
雪    币: 211
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
5
太厉害了
2004-7-2 09:22
0
雪    币: 239
活跃值: (478)
能力值: ( LV6,RANK:90 )
在线值:
发帖
回帖
粉丝
6
偶像级人物呀!严重支持!
2004-7-2 09:39
0
雪    币: 16
能力值: (RANK:10 )
在线值:
发帖
回帖
粉丝
7
看看再说,我是来学习的
2004-10-14 13:58
0
雪    币: 549
活跃值: (2245)
能力值: ( LV7,RANK:100 )
在线值:
发帖
回帖
粉丝
8
跟随研究
2004-10-15 10:18
0
雪    币: 16
能力值: (RANK:10 )
在线值:
发帖
回帖
粉丝
9
如果在003B71DC处跳过了重定位处理,则不需要修改基址。

================
什么意思?

1,这个时候的脱壳还需要修改重定位表吗?
2004-10-21 14:21
0
雪    币: 898
活跃值: (4039)
能力值: ( LV9,RANK:3410 )
在线值:
发帖
回帖
粉丝
10
基址和重定位表不是一个概念
需要找到重定位表的RVA
2004-10-21 16:17
0
雪    币: 761
活跃值: (3662)
能力值: ( LV5,RANK:60 )
在线值:
发帖
回帖
粉丝
11
hoho,今天正在看dll的脱壳fly就来一个经典的,thx,不过,我看了你好多教程,非常感谢你的“义务劳动”,不过你的教程中经常有这样的句子:”搜索xxx,下断点“,却没说xxx如何来,呵呵,我想这个更重要,比如这个例子中找修改重定表的地方你是如何判断的呢?

希望能得到你答复,thx
2004-10-21 20:04
0
雪    币: 898
活跃值: (4039)
能力值: ( LV9,RANK:3410 )
在线值:
发帖
回帖
粉丝
12
搜索命令序列是跟踪N次后发现的
当然,你可以单步走

判断重定位表的方法见《加密与解密》
你可以对程序中需要重定位的地方下断
然后就能跟踪到重定位处理的地方
2004-10-21 20:07
0
雪    币: 761
活跃值: (3662)
能力值: ( LV5,RANK:60 )
在线值:
发帖
回帖
粉丝
13
thx,学习ing...
2004-10-21 20:35
0
雪    币: 200
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
14
学习学习。
2004-10-22 11:11
0
雪    币: 549
活跃值: (2245)
能力值: ( LV7,RANK:100 )
在线值:
发帖
回帖
粉丝
15
好啊,想什么来什么,正需要呢
2004-10-22 11:52
0
雪    币: 200
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
16
我觉得也是,搜索的命令序列是怎样单步找到的.
在教程里没有说吖,对于我们这样的菜鸟,还是不能理解.
2004-10-22 18:55
0
雪    币: 244
活跃值: (45)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
17
2004-10-22 19:00
0
雪    币: 200
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
18
天啊,恐怖,我这个菜鸟什么时候能达到这个水平呀。
2004-10-24 22:39
0
雪    币: 204
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
btq
19
mov ecx,dword ptr ds:[esi+4]
sub ecx,8
shr ecx,1
-----------------------
Ctrl+S...找不到这里...
Dll的壳是Aspack 2.12...PEiD查出来的...
2004-11-12 00:40
0
雪    币: 204
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
btq
20
fly...
//[ebp+539]=003B754C=00006000 ★ 这个00006000就是重定位表的RVA!
003B754C=00006000这句话怎么理解啊?
2004-11-13 00:27
0
雪    币: 898
活跃值: (4039)
能力值: ( LV9,RANK:3410 )
在线值:
发帖
回帖
粉丝
21
看一下[003B754C]转存处
2004-11-13 15:04
0
雪    币: 214
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
22
003B71DC     74 79               je short EdrLib.003B7257
//可以在这里改标志位Z=1,使其跳转,这样脱壳后就不需要修改基址了。 ★
003B71DE     8BC2                mov eax,edx
003B71E0     C1E8 10             shr eax,10
003B71E3     33DB                xor ebx,ebx
003B71E5     8BB5 39050000       mov esi,dword ptr ss:[ebp+539]
//[ebp+539]=003B754C=00006000 ★ 这个00006000就是重定位表的RVA!
如果程序直接在 003B71DC     74 79               je short EdrLib.003B7257
处跳转,如何得到 RAV 呢?
2004-11-13 17:56
0
雪    币: 898
活跃值: (4039)
能力值: ( LV9,RANK:3410 )
在线值:
发帖
回帖
粉丝
23
到达上面后,可以在转存窗口Ctrl+G:ebp+539
2004-11-13 18:00
0
雪    币: 98745
活跃值: (201039)
能力值: (RANK:10 )
在线值:
发帖
回帖
粉丝
24
支持!!!
2004-11-13 18:05
0
雪    币: 214
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
25
IDA 4.7 的插件就是用ASPack 加的壳,照此脱文忙了半天没有结果,fly兄可否看看,写一篇脱文?
2004-11-13 19:10
0
游客
登录 | 注册 方可回帖
返回
//