首页
社区
课程
招聘
[半原创-照本宣科]TheMide加壳Dll文件的简单脱壳流程
发表于: 2008-4-5 20:07 12131

[半原创-照本宣科]TheMide加壳Dll文件的简单脱壳流程

2008-4-5 20:07
12131

【文章作者】: duenyu
【软件名称】: test.dll
【加壳方式】: Themida|WinLicense V1.9.2.0  -> Oreans Technologies *
【编写语言】: Microsoft Visual C++ 7.0
【使用工具】: The0DBG/HideToolz,LordPE,ImportREC_fix,peid,WinHex,
Dll_LoadEx,ReloX
【操作平台】: WinXP_SP2
【作者声明】: 只是感兴趣,没有其他目的。失误之处敬请诸位大侠赐教!
-------------------------------------------------------------------------
【详细过程】

①        检查版本       


②        用OD载入test.dll,停在这里↓。       
        ※用HideToolz隐藏OD后,再载入。


③        打开ODBGScript的ScriptWindow和LogWindow。

④        Load Themida&WinLicenScript_1[1].91+.txt,然后运行脚本。停在这里↓。       


⑤        这个时候脚本已经完成Dump了,文件存放在dll所在的目录中。

⑥        用LordPE打开来看看,输出表没有问题,输入表不全,重定向表有问题,资源没问题。       


⑦        修复输入表,看Script的Log Window

        iattop = 3D8B5000,在OD的数据窗口Ctrl+G到3D8B5000,转换成Address如下图,查到IAT的范围从3D8B5000到3D8B51EC。
       
        算出大小为1EC。然后用ImportREC_fix修复输入表。
        打开loaddll进程,pick dll找到test.dll如下图

        修改OEP为000093A4,然后点IAT AutoSearch按钮。

        接下来点GetImports取得输入表,全部正常。
        最后,点Fix Dump选择dump出来的dll文件进行修复。
        ※ 在OD中用Dump插件Dump的话,会得到输入表正常的dll。


⑧        修复重定向表
        将没有脱壳的test.dll文件copy两份,分别叫做test1.dll和test2.dll,然后用DLLLoadEx将两个DLL载入。

        然后用lordPE将这两个dll文件dump出来保存成1.dll和2.dll。
        用ReloX打开1.dll和2.dll并在对应的行后面输入test1.dll和test2.dll的ImageBase的值,点击Compare后点击Fix PE Module修复dump的dll文件。如图

        用LordPE打开修复后的foepdump__.dll文件,看到输入输出表,重定向表都没问题了。用PEiD看一下,壳已经脱掉。


⑨        优化

        写这文章之前,我将脱壳的DLL文件各个部分完全分开,用二进制文件的形势保存起来,
然后重新手动组装并新建了输入输出表和资源,对PE的结构稍微熟悉些了,不过手工重建重定向表没有成功。
        所以这里只说一下用工具的简单优化。
        用lordPE打开foepdump__.dll,打开Sections,可以看到有很多Section。每一次修
复几乎都重新建了一个Section。


其中,       
        .text 是存放代码的
        .rsrc 是存放资源的
        .data0和.data1是自定义数据。
        .idata是刚刚dump出来时候的不好用的输入表。
        .mackt是Import REC修复输入表新建的
        .reloc是Relox修复重定向表新建的
        .themide我认为是壳的代码和数据。(第一次的时候我将它删掉了,结果输出表和
        重定位表出错了。后来察看VS发现输出表在这个里面。重定位表有几条数据在这里面。)

        好了,开始优化,首先把.idata可以不用犹豫的删除掉了。       
        先RebuildPE一下foepdump__.dll。然后用WinHex打开foepdump__.dll。       
        把从160A6E开始的B77个字节的内容copy出来。然后在.themide的最后1000字节
清零,将copy出来的exportTable数据copy到0020C000,保存。用lordPE打开dll文件,将.themide
的大小改小1000,修改.mackt的Voffset为0020C000,Vsize到2000。
        然后修改exportTable的rva为0020C000,Size不变。接下来用WinHex里面打开Dll文件修改0020C000部分的输出表地址的Name RVA,Export AddressTable RVA,Name Pointer RVA和Ordinal Table RVA。可参照PE文件头结构。存盘后用lordPE打开dll文件,在导出表处可以看到,dll文件名等可以显示,但里面的函数名都不对。
        对应WinHex中看到的函数名称起始地址修改LordPE中的导出表的每一项,我修改了20多分钟,晕。
        将重定位表中涉及.themide中数据的far address地址减去ImageBase得到偏移量,并把该地址的数据copy出来,放到.data1的后面,然后修改这几项的重定位表偏移地址。这个方法比较笨,不知道还有没有其他办法。正在寻找中。
        然后删除themide,重新编译dll文件。文件从2.06M变成了890K。重新loaddll正常。
⑩        最后

        这篇文章涉及技术很少,主要是写一下流程,和一些工具的基本适用,上传图片尺寸有限制,没有上传太多图片,比较遗憾。
        感觉出了重定向的问题,DLL脱壳比exe稍微容易一些。可能是加壳的时候重视程度不如exe。不知道DLL文件有没有偷代码的情况,我对照了几个VC7.0写的DLL也是有特征的,这个DLL没有。
        应朋友需要脱这个文件的壳,原来从来没接触过脱壳,只是进行了一个月的逆向,所以花了1周时间才搞定。但很多细节并不了解,如果有错误的地方,请指教。
        感觉脱壳需要对PE文件结构,各种语言的编码特征,壳的特性需要相当程度的了解,才能游刃有余。大家努力吧。
        最后贴几句Themide的典型代码,再恶心一下自己。。。。
        mov eax,0
        pushad
        or eax,eax
        je short 0047E086
        call 0047E023


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

上传的附件:
收藏
免费 7
支持
分享
最新回复 (12)
雪    币: 200
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
2
谢谢提供,学习中……
2008-4-6 03:07
0
雪    币: 200
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
3
及时雨,果然行得通。不过至于dll瘦身,哈哈,本人比较懒拉
2008-4-6 03:16
0
雪    币: 200
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
4
感谢楼主,学习中
2008-4-7 05:26
0
雪    币: 1481
活跃值: (874)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
5
谢谢!~~~~~~~~~~~
2008-4-14 00:41
0
雪    币: 200
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
6
感谢楼主,学习中
2008-4-14 10:06
0
雪    币: 334
活跃值: (47)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
7
学习一下         
2008-4-14 10:46
0
雪    币: 200
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
8
高 但我还是看不懂
2008-4-14 18:10
0
雪    币: 233
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
9
themdia加的壳重定位一般也加密了,用ReloX不管用,你碰到的是个软柿子。
2008-4-14 23:42
0
雪    币: 200
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
10
好厉害,虽然没看懂~~~
2008-4-24 21:01
0
雪    币: 200
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
11
HOHO。厉害,可是我看不懂
2008-4-25 08:51
0
雪    币: 48
活跃值: (496)
能力值: ( LV8,RANK:130 )
在线值:
发帖
回帖
粉丝
12
谢谢!
学习中!
2008-4-25 12:23
0
雪    币: 200
活跃值: (16)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
13
感谢楼主,
2009-9-3 20:12
0
游客
登录 | 注册 方可回帖
返回
//