首页
社区
课程
招聘
用Ollydbg手脱tElock V0.98加壳的DLL
发表于: 2004-6-3 00:31 12586

用Ollydbg手脱tElock V0.98加壳的DLL

fly 活跃值
85
2004-6-3 00:31
12586
            
      
               
【目标程序】:tElock加壳的EdrLib.dll。附件中含有UnPacked以供参考。        
            
【作者声明】:只是感兴趣,没有其他目的。失误之处敬请诸位大侠赐教!
         
【调试环境】:WinXP、Ollydbg1.10、LordPE
            
―――――――――――――――――――――――――――――――――
【脱壳过程】:
         
         
            
借用《解密与解密》第二版中的话:tElock加壳的DLL的致命弱点就是输入表和重定位加密代码可以被跳过!也就是说我们只要搞定了这两个Magic Jump就行了。下面的方法和书上的操作流程有点不同,其实原理是一样的。
           
―――――――――――――――――――――――――――――――――
一、双重Magic Jump:避开重定位和输入表加密
            
            
设置Ollydbg忽略除了“INT3中断”之外的所有其它异常选项。老规矩:用IsDebug 1.4插件去掉Ollydbg的调试器标志。
         
         
003B8BD6     E9 25E4FFFF         jmp EdrLib.003B7000//进入OD后停在这
003B8BD0     FF6424 04           jmp dword ptr ss:[esp+4]

         
Shift+F9 运行,程序中断在INT3异常处
         
003B708D     90                  nop//第1次异常
003B7B28     90                  nop//第2次异常

         
提供一个简便寻找ASPack加壳DLL的重定位处理代码段的方法!
现在设置Ollydbg忽略所有异常选项。Ctrl+S在“整个段块”搜索命令序列:
         
mov ebx,edx
shr ebx,10
mov eax,dword ptr ds:[esi]

         
找到在003B8195处!我们在其上的003B8177处下断,Shift+F9 运行,中断
         
003B8177     8BB5 56D34000       mov esi,dword ptr ss:[ebp+40D356]
//[ebp+40D356]=[003B8CB4]=00006000 ★ 这个00006000就是重定位表的RVA!
003B817D     85F6                test esi,esi
003B817F     0F84 8B000000       je EdrLib.003B8210
003B8185     8B95 62D34000       mov edx,dword ptr ss:[ebp+40D362]
003B818B     03F2                add esi,edx
003B818D     2B95 66D34000       sub edx,dword ptr ss:[ebp+40D366]
//这里其实就是检测与映像基址是否相符,不符则重定位处理!★
003B8193     74 7B               je short EdrLib.003B8210
//Magic Jump,可以第2次Load后在这里改标志位Z=1,使其跳转 ★
003B8195     8BDA                mov ebx,edx//找到这里!
003B8197     C1EB 10             shr ebx,10
003B819A     8B06                mov eax,dword ptr ds:[esi]
003B819C     85C0                test eax,eax
003B819E     74 70               je short EdrLib.003B8210
//重定位处理完毕后这里就跳转       在003B8210处下断
003B81A0     8B4E 04             mov ecx,dword ptr ds:[esi+4]
003B81A3     83E9 08             sub ecx,8
003B81A6     D1E9                shr ecx,1
003B81A8     8BBD 62D34000       mov edi,dword ptr ss:[ebp+40D362]
003B81AE     03F8                add edi,eax
003B81B0     83C6 08             add esi,8
003B81B3     0FB706              movzx eax,word ptr ds:[esi]
003B81B6     C1C8 0C             ror eax,0C
003B81B9     FEC8                dec al
003B81BB     78 4C               js short EdrLib.003B8209
003B81BD     74 0E               je short EdrLib.003B81CD
003B81BF     FEC8                dec al
003B81C1     74 13               je short EdrLib.003B81D6
003B81C3     FEC8                dec al
003B81C5     74 3C               je short EdrLib.003B8203
003B81C7     FEC8                dec al
003B81C9     74 14               je short EdrLib.003B81DF
003B81CB     EB 3C               jmp short EdrLib.003B8209
003B81CD     C1E8 14             shr eax,14
003B81D0     66:011C07           add word ptr ds:[edi+eax],bx
003B81D4     EB 33               jmp short EdrLib.003B8209
003B81D6     C1E8 14             shr eax,14
003B81D9     66:011407           add word ptr ds:[edi+eax],dx
003B81DD     EB 2A               jmp short EdrLib.003B8209
003B81DF     52                  push edx
003B81E0     C1E8 14             shr eax,14
003B81E3     8BD8                mov ebx,eax
003B81E5     C1E0 10             shl eax,10
003B81E8     66:8B16             mov dx,word ptr ds:[esi]
003B81EB     66:81E2 FF0F        and dx,0FFF
003B81F0     66:8BC2             mov ax,dx
003B81F3     5A                  pop edx
003B81F4     8D8410 00800000     lea eax,dword ptr ds:[eax+edx+8000]
003B81FB     89041F              mov dword ptr ds:[edi+ebx],eax
003B81FE     46                  inc esi
003B81FF     46                  inc esi
003B8200     49                  dec ecx
003B8201     EB 06               jmp short EdrLib.003B8209
003B8203     C1E8 14             shr eax,14
003B8206     011407              add dword ptr ds:[edi+eax],edx
003B8209     46                  inc esi
003B820A     46                  inc esi
003B820B     49                  dec ecx
003B820C     7F A5               jg short EdrLib.003B81B3
003B820E     EB 8A               jmp short EdrLib.003B819A//循环处理
003B8210     8B95 62D34000       mov edx,dword ptr ss:[ebp+40D362]
//当我们中断在003B8210处时,重定位处理完毕。此时ESI=003B63B0,★ 就是重定位表的结束地址啦。
//得到重定位表信息:RVA=00006000,大小=000003B0
         
003B8216     8BB5 52D34000       mov esi,dword ptr ss:[ebp+40D352]
//[ebp+40D352]=[003B8CB0]=0000442C ★ 这就是输入表的RVA啦。
003B821C     85F6                test esi,esi
003B821E     0F84 06040000       je EdrLib.003B862A
//第2个Magic Jump,改标志位Z=1,使其跳转,则不加密IAT
003B8224     03F2                add esi,edx
003B8226     83A5 52D44000 00    and dword ptr ss:[ebp+40D452],0
003B822D     8B46 0C             mov eax,dword ptr ds:[esi+C]
003B8230     8366 0C 00          and dword ptr ds:[esi+C],0
003B8234     85C0                test eax,eax
003B8236     0F84 EE030000       je EdrLib.003B862A
003B823C     03C2                add eax,edx
003B823E     8BD8                mov ebx,eax
003B8240     50                  push eax
003B8241     FF95 D0D24000       call dword ptr ss:[ebp+40D2D0]//GetModuleHandleA
003B8247     85C0                test eax,eax
003B8249     0F85 BA000000       jnz EdrLib.003B8309

         
咱们已经得到重定位表信息了,所以可以再次载入这个DLL,重复上面的步骤,在003B8193处改标志位Z=1,使其跳转,避开重定位表加密!
         
         
―――――――――――――――――――――――――――――――――
二、第2区段内存断点法:快速直达OEP
         
         
当我们修改了以上两个Magic Jump,自003B821E处跳至003B862A。
003B862A     8BBD 5AD34000       mov edi,dword ptr ss:[ebp+40D35A]
003B8630     85FF                test edi,edi
003B8632     EB 03               jmp short EdrLib.003B8637

         
现在我们Alt+M打开 内存查看 窗口:
003B0000   00001000   EdrLib   003B0000 (itself)  PE header//第1区段
003B1000   00003000   EdrLib   003B0000           code//第2区段  ★
003B4000   00001000   EdrLib   003B0000           data 

         
在003B1000第2区段上 设置内存访问断点!Shift+F9 运行,直接中断在OEP处!
         
003B11C9     55                  push ebp//OEP ★
003B11CA     8BEC                mov ebp,esp
003B11CC     53                  push ebx
003B11CD     8B5D 08             mov ebx,dword ptr ss:[ebp+8]
003B11D0     56                  push esi
003B11D1     8B75 0C             mov esi,dword ptr ss:[ebp+C]
003B11D4     57                  push edi
003B11D5     8B7D 10             mov edi,dword ptr ss:[ebp+10]
003B11D8     85F6                test esi,esi
003B11DA     75 09               jnz short EdrLib.003B11E5

         
用LordPE选中Ollydbg的loaddll.exe的进程,在下面的列表里选择EdrLib.dll,然后完整脱壳,得到dumped.dll。
         
         
―――――――――――――――――――――――――――――――――
三、PE修正:完成脱壳
         
         
因为我们已经跳过了双重Magic Jump,所以使得修复工作变得很简单:
用LordPE修正dumped.dll的OEP=000011C9,输入表RVA=0000442C,保存之。
用LordPE修正dumped.dll的重定位表RVA=00006000、大小=000003B0,保存之。
OK,脱壳完成啦。
               
            
―――――――――――――――――――――――――――――――――   
                              
         ,     _/ 
        /| _.-~/            \_     ,        青春都一晌
       ( /~   /              \~-._ |\
       `\\  _/                \   ~\ )          忍把浮名 
   _-~~~-.)  )__/;;,.          \_  //'
  /'_,\   --~   \ ~~~-  ,;;\___(  (.-~~~-.        换了破解轻狂
 `~ _( ,_..--\ (     ,;'' /    ~--   /._`\ 
  /~~//'   /' `~\         ) /--.._, )_  `~
  "  `~"  "      `"      /~'`\    `\\~~\   
                         "     "   "~'  ""

   

     Cracked By 巢水工作坊――fly [OCN][FCG][NUKE][DCM]

                2004-06-02  01:00
                        

[课程]FART 脱壳王!加量不加价!FART作者讲授!

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


:D

点击下载:EdrLib.dll[tElock V0.98]+UnPacked.rar!
2004-6-3 00:33
0
雪    币: 446
活跃值: (723)
能力值: ( LV7,RANK:100 )
在线值:
发帖
回帖
粉丝
3
只是是Fly的贴,都是精品~!
只是是Fly的贴,我都收藏~!
只要是Fly的贴,我都学习~!
2004-6-3 07:57
0
雪    币: 200
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
4
“用LordPE修正dumped_.dll的输入表RVA=0000442C,保存之。
  用LordPE修正dumped_.dll的重定位表RVA=00006000、大小=000003B0,保存之。OK,脱壳完成啦。”

    我有一丝不明请fly指教:
LordPE脱出的dumped.dll看懂了,可这个dumped_.dll,是如何来的?莫非要用ImportREC先修复一下(可为何我做不到}?

    另可否详解一下用LordPE修正修正时,哪个程序在运行?关于LordPE修正
的具体操作怎样做?
2004-6-3 12:33
0
雪    币: 239
活跃值: (473)
能力值: ( LV6,RANK:90 )
在线值:
发帖
回帖
粉丝
5
GOOD!STUDYING!
2004-6-3 12:38
0
雪    币: 690
活跃值: (1821)
能力值: ( LV9,RANK:250 )
在线值:
发帖
回帖
粉丝
6
好文章,出手果然快,昨晚我也刚刚脱掉,思路基本一样。
2004-6-3 12:44
0
雪    币: 898
活跃值: (4039)
能力值: ( LV9,RANK:3410 )
在线值:
发帖
回帖
粉丝
7
TO tjwp:

你就直接修正dumped.dll就行了
dumped_.dll是我为了防止出错复制的dumped.dll

用LordPE直接打开dumped.dll,点 目录,就可以看见需要修正的地方了
2004-6-3 13:55
0
雪    币: 200
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
8
多谢 fly 的及时答疑解惑!
2004-6-3 14:14
0
雪    币: 319
活跃值: (2404)
能力值: ( LV12,RANK:980 )
在线值:
发帖
回帖
粉丝
9
003B818D     2B95 66D34000       sub edx,dword ptr ss:[ebp+40D366]
//这里其实就是检测与映像基址是否相符,不符则重定位处理!★
003B8193     74 7B               je short EdrLib.003B8210
//Magic Jump,可以在这里改标志位Z=1,使其跳转,这样脱壳后就不需要修改基址了。 ★
003B8195     8BDA                mov ebx,edx//找到这里!
.
.
.
.
.

003B820E     EB 8A               jmp short EdrLib.003B819A//循环处理
003B8210     8B95 62D34000       mov edx,dword ptr ss:[ebp+40D362]
//当我们中断在003B8210处时,重定位处理完毕。此时ESI=003B63B0,★ 就是重定位表的结束地址啦。
//得到重定位表信息:RVA=00006000,大小=000003B0

有一问题请教FLY兄弟:

以上003B8193处跳转后循环处理重定位代码都执行不到了,这样会影响重定位表吗?
2004-6-3 14:55
0
雪    币: 898
活跃值: (4039)
能力值: ( LV9,RANK:3410 )
在线值:
发帖
回帖
粉丝
10
2004-6-3 15:10
0
雪    币: 898
活跃值: (4039)
能力值: ( LV9,RANK:3410 )
在线值:
发帖
回帖
粉丝
11
最初由 csjwaman 发布


以上003B8193处跳转后循环处理重定位代码都执行不到了,这样会影响重定位表吗?


你可以先执行1次得到重定位表的RVA和大小信息
然后再来一次,就可以直接跳过了
sorry,我没有说清楚,呵呵
2004-6-3 15:12
0
雪    币: 200
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
12
烦请fly兄看看,已脱出修复的dumped.dll是否真的弄好了?

因我脱出修复后比你所附的要大,所以心中无底。
2004-6-3 18:09
0
雪    币: 200
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
13
我为何无法上传一个40K 的附件?
2004-6-3 18:21
0
雪    币: 898
活跃值: (4039)
能力值: ( LV9,RANK:3410 )
在线值:
发帖
回帖
粉丝
14
最初由 tjwp 发布
烦请fly兄看看,已脱出修复的dumped.dll是否真的弄好了?

因我脱出修复后比你所附的要大,所以心中无底。


你指的是压缩包内的UnPacked-EdrLib[tElock V0.98].dll文件?
已经脱壳了。可以用EdrTest.exe测试呀

至于大小的问题没什么奇怪的,我简单优化了一下
2004-6-3 18:22
0
雪    币: 200
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
15
多谢!将脱出的dumped.dll改名为 EdrLib.dll,与 EdrTest.exe

重放入一新建文件夹中,EdrTest.exe可启动。
2004-6-3 18:31
0
雪    币: 218
活跃值: (40)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
16
003B8216     8BB5 52D34000       mov esi,dword ptr ss:[ebp+40D352]
//[ebp+40D352]=[003B8CB0]=0000442C ★ 这就是输入表的RVA啦。
有一问题请教FLY兄弟:
输入表的RVA=0000442C是如何计算得到的
2004-6-4 20:54
0
雪    币: 898
活跃值: (4039)
能力值: ( LV9,RANK:3410 )
在线值:
发帖
回帖
粉丝
17
最初由 lfsx 发布
003B8216 8BB5 52D34000 mov esi,dword ptr ss:[ebp+40D352]
//[ebp+40D352]=[003B8CB0]=0000442C ★ 这就是输入表的RVA啦。
有一问题请教FLY兄弟:
输入表的RVA=0000442C是如何计算得到的


这是tElock V0.98的规律,不需要计算,跟到这个地址就可以看见[ebp+40D352]的值了
2004-6-4 22:20
0
雪    币: 218
活跃值: (40)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
18
:D
2004-6-4 22:43
0
雪    币: 6075
活跃值: (2236)
能力值: (RANK:1060 )
在线值:
发帖
回帖
粉丝
19
好帖……
2004-6-5 19:44
0
雪    币: 203
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
20
找到在003B8195处!我们在其上的003B8177处下断,Shift+F9 运行,中断

取得RVA后.又怎么做啊.把我这处菜鸟看得一愣愣的.Fly能一步一步写清楚吗.让我们菜鸟也可以看明白.最好有录像.嘿
2004-10-27 21:13
0
雪    币: 898
活跃值: (4039)
能力值: ( LV9,RANK:3410 )
在线值:
发帖
回帖
粉丝
21
建议先系统看看《加密与解密》吧
抱歉,比较忙,脱壳录像是没时间做的
2004-10-27 21:17
0
雪    币: 223
活跃值: (106)
能力值: ( LV4,RANK:50 )
在线值:
发帖
回帖
粉丝
22
来迟了,差点错过好教程。收藏先。:D
2004-10-28 09:40
0
雪    币: 258
活跃值: (230)
能力值: ( LV12,RANK:770 )
在线值:
发帖
回帖
粉丝
23
感谢fly大哥,已经把exe的也脱了ing~~~
支持fly大哥~~~
这个magic jmp 郁闷我好久了ing~~~
2004-10-29 19:13
0
雪    币: 202
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
24
高手,高见!
2004-10-31 08:51
0
雪    币: 202
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
25
学习中
依葫芦画了一个瓢,能够运行.谢谢FLY大侠.
2004-10-31 10:58
0
游客
登录 | 注册 方可回帖
返回
//