首页
社区
课程
招聘
用 PE Tools 的修复重定位插件快速修复 DLL 的重定位表
发表于: 2006-1-1 23:54 14608

用 PE Tools 的修复重定位插件快速修复 DLL 的重定位表

2006-1-1 23:54
14608

【脱壳作者】 CCDebuger
【使用工具】 OllyDBG 1.10,PE Tools 1.5,ImportREC 1.6 修正版
【脱壳平台】 WinXP_SP2
【实例下载】 http://www.un4seen.co.uk/files/xmplay33.zip
【文件大小】 322.6k
【软件简介】 XMPlay 是一款小巧玲珑的音频播放器,支持多种音频格式。
1、流媒体格式:OGG/MP3/MP2/MP1/WMA/WAV;
2、Module(指令模块)格式:MO3/IT/XM/S3M/MTM/MOD/UMX;
3、播放清单:PLS/M3U/ASX;
4、其它格式:除了上述内置支持的格式外,通过使用 Winamp 的输入插件,XMPlay 能播放所有 Winamp 所支持的音频文件。
  XMPlay 支持定制外观和插件,外观和插件均可从其主页插件下载或自己制作(其主页上有制作教材)。通过插件,XMPlay 能直接播放压缩包中的音频文件(包括 rar、arj、lzh、zip、pp……等压缩格式)及其它一些音频格式。
  XMPlay 支持拖放文件进行播放或添加到清单(这取决于你的设置);有完整的快捷键系统,另外,还可定义全局热键――你随时都能进行播放控制;内置几个可视化效果――频谱和 3D 频谱,MOD 图表显示;还支持文件格式转换。3.2 版起,增加了媒体库功能。
  XMPlay 还有一些绝活:能够实现选曲(或称编程)播放――在播放清单中右键点击曲目标题,选择加入队列;实现记忆播放――右键点击“关闭”按钮……
【作者声明】 只是感兴趣,不当之处还请各位大侠指教!
--------------------------------------------------------------------------------
【脱壳过程】

今天脱这个东西,里面有十几个 PEtite 2.2 加壳的 DLL 文件(从官方网站上下的压缩包里只有3个DLL,我这里的十几个DLL都是其它插件,也可以在官方网站下载),开始想找看雪兄的那个工具来修复重定位表的,可遍寻都未找到。没办法,就算用 fly 介绍的 ReloX 来手工修改这么多文件的重定位表也会死人的。看 PE Tools 1.5 里带了个修复重定位表的插件,试用了一下,哈哈,真是一个爽啊。不敢独享,特记下来给象我这样的壳盲参考。这里我所使用的工具都是我自己汉化的版本,如有些名词给你造成误解还望原谅!我这篇文章是写给象我这样的壳盲看的,高手要看的话,请先保护好你的大牙!不多说了,下面开始:
我们从官方网站下载的原始压缩包中选一个 xmp-wma.dll 来测试一下。用 OllyDBG 载入,会有一个请求载入 DLL 文件的对话框,问是否用 LOADDLL.EXE 载入,我们选“是”。稍等一会又出来一个入口点警告的对话框,点“确定”,接着又有个询问是否为压缩代码,是否需要分析的对话框,这里我们选“否”。进入程序,我们停在这:

10017039 >  B8 00700110     MOV EAX,xmp-wma.10017000                 ; 开始停在这
1001703E    68 00500110     PUSH xmp-wma.10015000
10017043    64:FF35 0000000>PUSH DWORD PTR FS:[0]
1001704A    64:8925 0000000>MOV DWORD PTR FS:[0],ESP
10017051    66:9C           PUSHFW
10017053    60              PUSHAD
10017054    50              PUSH EAX

不要管它,直接 F9 运行(在我这跳出一个异常对话框,不管它,点确定,SHIFT+F9继续运行),稍后 OllyDBG 的左下角会显示“要调试的 DLL 初始化结束”,我们暂停在这里:

10001000  /$  55            PUSH EBP                                 ;  停在这里
10001001  |.  8BEC          MOV EBP,ESP
10001003  |.  83EC 20       SUB ESP,20
10001006  |.  53            PUSH EBX
10001007  |.  56            PUSH ESI
10001008  |.  8BF1          MOV ESI,ECX
1000100A  |.  33DB          XOR EBX,EBX
1000100C  |.  57            PUSH EDI
1000100D  |.  8B46 0C       MOV EAX,DWORD PTR DS:[ESI+C]

现在继续不管,还是在 OllyDBG 中 F9 运行,再用鼠标左键点击任务栏那的绿色的 LOADDLL.EXE 的图标,出来一个小窗口,点关闭图标关掉它,我们将在 OllyDBG 中停在这里:

10017039 > $- E9 08B5FFFF   JMP xmp-wma.10012546                     ;  停在这里,跳转目标就是OEP
1001703E   $- E9 84307F6C   JMP kernel32.WideCharToMultiByte
10017043   $- E9 75297F6C   JMP kernel32.LocalAlloc
10017048   $- E9 79BA7F6C   JMP kernel32.GetSystemInfo
1001704D   $- E9 24A47F6C   JMP kernel32.DisableThreadLibraryCalls
10017052   $- E9 CEA57E6C   JMP kernel32.DeviceIoControl
10017057   $- E9 5B81806C   JMP kernel32.GlobalMemoryStatus
1001705C   $- E9 4C38D067   JMP USER32.wsprintfA
10017061   $- E9 C65F9966   JMP ole32.CoTaskMemFree

大家可以注意看一下,和刚开始进入的地址是不是一样啊?呵呵。这时按一下 F8 单步一下,来到这里:

10012546  /.  55            PUSH EBP                                 ;  OEP,可直接用插件  OllyDump 脱壳
10012547  |.  8BEC          MOV EBP,ESP
10012549  |.  53            PUSH EBX
1001254A  |.  8B5D 08       MOV EBX,DWORD PTR SS:[EBP+8]
1001254D  |.  56            PUSH ESI
1001254E  |.  8B75 0C       MOV ESI,DWORD PTR SS:[EBP+C]
10012551  |.  57            PUSH EDI
10012552  |.  8B7D 10       MOV EDI,DWORD PTR SS:[EBP+10]

这里找 OEP 的方法是利用了 DLL 退出时会再次中断在EP处的原理,记得 fly 曾经说过。如果你和我一样用的是 OllyDump v3.00.110 版的插件的话,这个 DLL 脱出来后都不需修复输入表。如果不是的话,修复也很简单:
用插件脱壳后先不要关 OllyDBG ,继续让 OllyDBG 暂停在上面 10012546 地址处,启动 ImportREC_fix.exe,在进程列表中选择 loaddll.exe,再点后面的“选取 DLL”按钮,选择 xmp-wma.dll 后按确定,把选项中的“使用来自磁盘的 PE 文件头”选项去掉,“重建原始 FT”选项勾上,在OEP中填12546,点“自动查找 IAT”按钮,出来一个对话框,点“确定”,再点“获取输入表按钮”,会有一些函数无效。点“显示无效的”按钮,在无效函数上右击,选“跟踪级别 1 (反汇编)”菜单,这时所有无效函数都已修复,现在点“修复转存文件”按钮把你刚才脱出来的文件修复一下就可以了。

到此为止我们的脱壳工作已告一段落,剩下的就是修复重定位表的问题了。现在我们打开 PE Tools 1.5,点菜单 插件->Reloc 重建器,选择我们刚才脱壳后的文件,点“重建”按钮,OK,完工!测试一下,一切正常!到此可再用 PE Tools 优化一下文件,减小一下体积。

--------------------------------------------------------------------------------
【脱壳总结】

这种修复重定位的方法并非完全有效,我在测试精华6中 fly 那篇《用Ollydbg手脱Petite V2.2加壳的DLL》文章中附带的例子程序时,用 PE Tools 1.5 修复重定位表的话则提示无法修复,不过前面找OEP的方法倒是通用。写这篇文章主要是希望大家在修复DLL的重定位表时多一种选择而已,希望能给象我这样的壳盲提供一点参考!

--------------------------------------------------------------------------------
【版权声明】 本文纯属技术交流, 转载请注明作者并保持文章的完整, 谢谢!


[培训]内核驱动高级班,冲击BAT一流互联网大厂工作,每周日13:00-18:00直播授课

收藏
免费 7
支持
分享
最新回复 (18)
雪    币: 898
活跃值: (4039)
能力值: ( LV9,RANK:3410 )
在线值:
发帖
回帖
粉丝
2
有空测试看看
2006-1-2 00:11
0
雪    币: 0
能力值: (RANK:10 )
在线值:
发帖
回帖
粉丝
3
试了下大虾的目标程序
确实有效

不知道其他的怎么样~?
2006-1-2 02:32
0
雪    币: 2506
活跃值: (1030)
能力值: (RANK:990 )
在线值:
发帖
回帖
粉丝
4
我试了一些其它的壳,也是有效的,上次试了个Softlocx加壳的OCX文件,也可以用。不知道是不是具有通用性,大家可以测试一下。
2006-1-2 10:14
0
雪    币: 255
活跃值: (207)
能力值: ( LV9,RANK:250 )
在线值:
发帖
回帖
粉丝
5
俺一直用着呢.
2006-1-2 11:06
0
雪    币: 277
活跃值: (312)
能力值: ( LV9,RANK:330 )
在线值:
发帖
回帖
粉丝
6
又学到了,只是从来没成功过。
2006-1-2 13:22
0
雪    币: 389
活跃值: (912)
能力值: ( LV9,RANK:770 )
在线值:
发帖
回帖
粉丝
7
2006-1-2 14:21
0
雪    币: 122
活跃值: (68)
能力值: ( LV6,RANK:90 )
在线值:
发帖
回帖
粉丝
8
停在这f810017039 > $- E9 08B5FFFF   JMP xmp-wma.10012546跳不到oep
为什么?
2006-1-2 17:41
0
雪    币: 319
活跃值: (2459)
能力值: ( LV12,RANK:980 )
在线值:
发帖
回帖
粉丝
9
tElock的壳好象不支持。
2006-1-2 18:38
0
雪    币: 2506
活跃值: (1030)
能力值: (RANK:990 )
在线值:
发帖
回帖
粉丝
10
最初由 herx 发布
停在这f810017039 > $- E9 08B5FFFF JMP xmp-wma.10012546跳不到oep
为什么?

JMP xmp-wma.10012546 这条指令执行后就会跳转到10012546(OEP)。不知你是什么问题,难道执行这条指令后不会跳转到地址10012546吗?
2006-1-2 18:58
0
雪    币: 159
活跃值: (339)
能力值: ( LV8,RANK:130 )
在线值:
发帖
回帖
粉丝
11
好帖子...支持聪哥
2006-1-2 19:07
0
雪    币: 2506
活跃值: (1030)
能力值: (RANK:990 )
在线值:
发帖
回帖
粉丝
12
最初由 Lenus 发布
好帖子...支持聪哥

啥时冒出来的?好长时间看不见你人。
2006-1-2 19:32
0
雪    币: 61
活跃值: (160)
能力值: ( LV9,RANK:170 )
在线值:
发帖
回帖
粉丝
13
2006-1-3 02:21
0
雪    币: 603
活跃值: (617)
能力值: ( LV12,RANK:660 )
在线值:
发帖
回帖
粉丝
14
简单易用好学,多谢!
2006-1-3 09:06
0
雪    币: 159
活跃值: (339)
能力值: ( LV8,RANK:130 )
在线值:
发帖
回帖
粉丝
15
最初由 CCDebuger 发布

啥时冒出来的?好长时间看不见你人。

呵呵...最近没钱上网了...现在给你回帖还是借同学的上网卡呢...
2006-1-3 13:09
0
雪    币: 427
活跃值: (412)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
16
最初由 Lenus 发布

呵呵...最近没钱上网了...现在给你回帖还是借同学的上网卡呢...


那东西可以破解的。
2006-1-3 13:25
0
雪    币: 2506
活跃值: (1030)
能力值: (RANK:990 )
在线值:
发帖
回帖
粉丝
17
最初由 Lenus 发布

呵呵...最近没钱上网了...现在给你回帖还是借同学的上网卡呢...

2006-1-3 13:25
0
雪    币: 50
活跃值: (145)
能力值: ( LV12,RANK:290 )
在线值:
发帖
回帖
粉丝
18
实用!!!!!!!!!!!
2006-1-4 13:51
0
雪    币: 250
活跃值: (103)
能力值: ( LV6,RANK:90 )
在线值:
发帖
回帖
粉丝
19
最初由 prince 发布
简单易用好学,多谢!

好东西!
2006-1-6 19:15
0
游客
登录 | 注册 方可回帖
返回
//