首页
社区
课程
招聘
用Ollydbg手脱Petite V2.2加壳的DLL
发表于: 2004-12-27 21:44 11774

用Ollydbg手脱Petite V2.2加壳的DLL

fly 活跃值
85
2004-12-27 21:44
11774

.         
            
【作者声明】:只是感兴趣,没有其他目的。失误之处敬请诸位大侠赐教!
            
【调试环境】:WinXP、Ollydbg V1.10、LordPE、ImportREC、ReloX
            
―――――――――――――――――――――――――――――――――
【脱壳过程】:
         

Petite也加密了重定位表,写这篇简单的笔记只是再次推荐一下用ReloX来修复重定位表。
―――――――――――――――――――――――――――――――――
一、EP和OEP
            

设置Ollydbg忽略所有的异常选项,载入Petite加壳的EdrLib.dll。

003D7042     B8 00703D00       mov eax,EdrLib.003D7000
//进入Ollydbg后暂停在这
003D7047     68 0E493D00       push EdrLib.003D490E
003D704C     64:FF35 00000000  push dword ptr fs:[0]
003D7053     64:8925 00000000  mov dword ptr fs:[0],esp

Petite加壳程序的OEP非常好找,在EP处下断:HE EIP

如果不想脱壳后修改基址,可以在适当的时机Dump。
下断:BP GetProcAddress
中断后取消断点,Alt+F9返回

003D4AC4     FF95 94070000     call dword ptr ss:[ebp+794]; kernel32.GetProcAddress
003D4ACA     85C0              test eax,eax               ; kernel32.lstrlenW
//返回这里
003D4ACC     74 7F             je short EdrLib.003D4B4D
//下面的循环是处理输入表的

Ctrl+S 在当前位置下搜索命令序列:
  mov edi,ecx
  mov edx,ebp
  mov eax,dword ptr ds:[ecx]
  test eax,eax
找到在003D4C60处,直接F4至003D4C5A

003D4C54     8DB5 0000C0FF     lea esi,dword ptr ss:[ebp+FFC00000]
003D4C5A     8D8D 00600000     lea ecx,dword ptr ss:[ebp+6000]
//这里[ebp+6000]的6000是原来重定位表的RVA
003D4C60     8BF9              mov edi,ecx
003D4C62     8BD5              mov edx,ebp
003D4C64     8B01              mov eax,dword ptr ds:[ecx]
003D4C66     85C0              test eax,eax
003D4C68     74 1B             je short EdrLib.003D4C85
003D4C6A     3C FF             cmp al,0FF
003D4C6C     75 0B             jnz short EdrLib.003D4C79

此时输入表已经处理完毕,程序还没有进行重定位,运行LordPE完全Dump出这个dll。

F9运行,中断在刚开始下的硬件断点处:
003D7042     E9 82A1FFFF       jmp EdrLib.003D11C9
//飞向光明之点巅!

003D11C9     55                push ebp
//OEP    ^O^
003D11CA     8BEC              mov ebp,esp
003D11CC     53                push ebx
003D11CD     8B5D 08           mov ebx,dword ptr ss:[ebp+8]

―――――――――――――――――――――――――――――――――
二、输入表
            
            
随便从程序找一个API调用,如:
003D10FD     FF15 20403D00     call dword ptr ds:[3D4020]; kernel32.GetVersion
在转存中跟随3D4020,上下看到许多函数地址,很明显的可以找到IAT开始和结束的地址:
            
003D3FF0   00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00  ................
003D4000   74 81 EF 77 E8 7C EF 77 49 C4 EF 77 3B D7 EF 77  t?w椟秣I娘w;罪w
…… ……
003D40C0   79 70 3D 00 40 7A 95 7C 00 00 00 00 00 00 00 00  yp=.@z?........
            
开始地址=003D4000
结束地址=003D40C8
            
运行ImportREC。注意:去掉“使用来自磁盘的PE部首”的选项,选择“重建原始FT”选项!  
选中Ollydbg的loaddll.exe的进程,然后点“选取DLL”,选择EdrLib.dll,填入RVA=00004000、大小=000000C8 ,点“Get Import”,得到输入表,用追踪层次1修复无效函数。改OEP=000011C9,FixDump!

―――――――――――――――――――――――――――――――――
三、ReloX:修复重定位表的“通用”简便方法

把EdrLib.dll复制一份,然后用DLL_LoadEX载入EdrLib.dll和复制EdrLib.dll,注意两个DLL进程的基址。
用LordPE直接把这2个DLL进程Dump出来,另存为1.dll(ImageBase=01060000)和2.dll(ImageBase=01080000)

运行ReloX,选择1.dll和2.dll,分别填入其相应的基址,点ComPare,稍等,分析完毕。

Fix PE Module,提示dumped_.dll保存成功。ReloX已经自动修正了Relocation RVA和Size!

如果想删除壳区段,则需要挪移输出表数据,具体操作看《用Ollydbg手脱Neolite加壳的DLL》教程。
可以用LordPE或者FileScanner优化一下脱壳后的文件。
测试一下,正常运行,脱壳完成了。

            
―――――――――――――――――――――――――――――――――   
                                
         ,     _/
        /| _.-~/            \_     ,        青春都一晌
       ( /~   /              \~-._ |\
       `\\  _/                \   ~\ )          忍把浮名
   _-~~~-.)  )__/;;,.          \_  //'
  /'_,\   --~   \ ~~~-  ,;;\___(  (.-~~~-.        换了破解轻狂
`~ _( ,_..--\ (     ,;'' /    ~--   /._`\
  /~~//'   /' `~\         ) /--.._, )_  `~
  "  `~"  "      `"      /~'`\    `\\~~\   
                         "     "   "~'  ""
   
              UnPacked By :  fly
               2004-12-27 20:00


[招生]科锐逆向工程师培训(2024年11月15日实地,远程教学同时开班, 第51期)

收藏
免费 7
支持
分享
最新回复 (18)
雪    币: 898
活跃值: (4039)
能力值: ( LV9,RANK:3410 )
在线值:
发帖
回帖
粉丝
2
压缩包含有文件:


EdrLib.dll
EdrTest.exe
UnPacked-EdrLib.dll
Dll_LoadEx.exe
Relox V1.0a.zip
树文件.txt
用Ollydbg手脱Petite V2.2加壳的DLL.txt


:D

附件:Petite_DLL.rar
2004-12-27 21:45
0
雪    币: 97697
活跃值: (200819)
能力值: (RANK:10 )
在线值:
发帖
回帖
粉丝
3
支持!!!
2004-12-27 21:46
0
雪    币: 209
活跃值: (40)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
4
是否 其它的壳来修复重定位的话可以这样呢?
2004-12-27 22:25
0
雪    币: 898
活跃值: (4039)
能力值: ( LV9,RANK:3410 )
在线值:
发帖
回帖
粉丝
5
可以测试
目前遇到的几个DLL加壳重定位表修复成功
2004-12-27 22:26
0
雪    币: 61
活跃值: (160)
能力值: ( LV9,RANK:170 )
在线值:
发帖
回帖
粉丝
6
版主厉害,:D :D
2004-12-28 12:02
0
雪    币: 222
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
7
请教 FLY 兄弟关于使用 Relox 的 Select Sections 功能钮时,区段的勾选该如何判断,是全部勾选呢还是部分勾选即可,判断依据何在??...谢谢
2004-12-28 18:37
0
雪    币: 898
活跃值: (4039)
能力值: ( LV9,RANK:3410 )
在线值:
发帖
回帖
粉丝
8
一般壳区段可以不选择
Neolite加壳的DLL我是手动去掉壳区段再处理的
2004-12-28 19:06
0
雪    币: 222
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
9
最初由 fly 发布
一般壳区段可以不选择
Neolite加壳的DLL我是手动去掉壳区段再处理的


谢谢 FLY 兄的说明.
2004-12-29 18:38
0
雪    币: 258
活跃值: (230)
能力值: ( LV12,RANK:770 )
在线值:
发帖
回帖
粉丝
10
好快啊~~~
学习+感谢!!!
2004-12-30 19:15
0
雪    币: 200
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
11
FLY兄真是牛人,辛苦了!
看雪有你而精彩!:D
2004-12-30 21:05
0
雪    币: 200
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
12
http://www.un4seen.com,也就是Petite的家,里面有一个叫BASS的音频动态库也是用自家的Petite加壳,但版本有可能是内部版,因为用Enlarge 1.3也不能脱它的壳。。不知版主能否分析一下呢?
下载地址:
http://www.un4seen.com/files/bass21.zip
2005-1-10 23:50
0
雪    币: 898
活跃值: (4039)
能力值: ( LV9,RANK:3410 )
在线值:
发帖
回帖
粉丝
13
最初由 bosee 发布
http://www.un4seen.com,也就是Petite的家,里面有一个叫BASS的音频动态库也是用自家的Petite加壳,但版本有可能是内部版,因为用Enlarge 1.3也不能脱它的壳。。不知版主能否分析一下呢?
下载地址:
http://www.un4seen.com/files/bass21.zip


没有什么大的变化
试试这个

附件:UnPacKed-bass.rar
2005-1-11 19:57
0
雪    币: 200
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
14
佩服!脱壳后的DLL正常,请问这个版本的Petite和2.2主要有那里不同?我转了好久还没搞定。
2005-1-17 20:51
0
雪    币: 200
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
hdy
15
我看不懂,是在运行到
003D4C6C     75 0B             jnz short EdrLib.003D4C79
处后,运行LordPE完全Dump出这个dll吗?
2005-1-17 22:00
0
雪    币: 898
活跃值: (4039)
能力值: ( LV9,RANK:3410 )
在线值:
发帖
回帖
粉丝
16
TO bosee:开始的地方有点不同,大体一样

TO hdy:
003D4C5A     8D8D 00600000     lea ecx,dword ptr ss:[ebp+6000]
//这里[ebp+6000]的6000是原来重定位表的RVA
此时输入表已经处理完毕,程序还没有进行重定位,运行LordPE完全Dump出这个dll
2005-1-18 11:09
0
雪    币: 198
活跃值: (40)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
17
去持FLY
2005-1-28 13:48
0
雪    币: 200
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
18
我是个中专生,一直都很热爱编程,可是由于基础差,总觉得自己少点什么东西! 希望大哥能赐教,我该从哪学起,需要哪些基础知识,是不是一定要考大学?
2005-6-1 19:33
0
雪    币: 208
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
19
fly兄脱壳太精彩了,真牛!!
前N天看雪主页打不开,没来此看论坛,大哭一场!
说来我笨,后一天,把www.pediy.com 改成bbs.pediy.com轻松进来了,又兴奋一场!
2005-6-1 23:47
0
游客
登录 | 注册 方可回帖
返回
//