首页
社区
课程
招聘
[原创]第一次脱DLL的壳,一点笔记,给和有我一样的新手
发表于: 2012-4-12 13:25 4463

[原创]第一次脱DLL的壳,一点笔记,给和有我一样的新手

2012-4-12 13:25
4463
《加密与解密》DLL脱壳笔记.rar

1 确定基地址,按<m>查看

基地址003c0000
2 寻找OEP
有个个人的小技巧,就是.text 在3c1000,那么就每次都跳过一些函数段,直到运行到3c1***附近,如图:

每次到了一个新的函数里面,如果不再.text附近,直接找retn,F4运行到这里,就可以进入下一个函数。

按照这个方法,很快就到了3C1240,这里就是函数入口了,强制分析一下就可以看到代码

OEP: 003C1240
3 DUMP
上面找到的这里可以dump,但是对于DLL,重定位处理代码的位置很重要,所以还是需要找到重定位代码出,同时顺便跳过重定位代码,所以就先不dump了,重新启动程序。
这个代码的定位似乎没有什么技巧,感觉和壳有关,看雪上有人回复说这是靠经验,一般是匹配特征码的,所以我也不纠结这里了。
直接跟踪来到这里

本来是不跳的,可以双击z寄存器,让他跳

双击后(判断寄存器就变了)

重新来到OEP,这时候就可以DUMP了
用LoadPE,由于是DLL,不要使用这个 ,因为加载的基地址不是磁盘上的默认值00400000H了。

选中相关进程,修复一下基地址,这个是习惯,因为挺多壳喜欢改这里
然后把edrlib.dll dump下来
4 IAT修复
自己手工找一下IAT的地址,建议学会手工,因为其实也不难,ImportRec经常搞不定这个,在OEP入口一下任何地方找类似一下的语句

看到 0x3C702C了吧,然后在<COMMON >里面输入

然后在数据窗口就可以看到这些函数来,上下翻动,就可以知道RVA和SIZE啦

在ImportRec里面
003C7000  77EFEF1C            GDI32.GetTextExtentPoint32A
003C70E0  7C809C98            kernel32.MultiByteToWideChar

重定位表在.reloc区块里面做好两件事

记住 这里不要选。
然后修复输入表就行了。

5 重定位表
这是最麻烦的地方,很难讲清楚通用规则,我个人感觉和壳有关,但是还是直接找到重定位的处理代码,然后按照《加密与解密》的方法打补丁
Pushad
Mov edx,dword ptr[XX]
Sub ebx,YY
Mov dword ptr [edx],ebx
Add edx,4
Mov dword ptr[XX],edx
Popad
Or al,al
Jmp short ZZZZZ

XX:填写申请的内存空间的地址
YY:填写DLL载入的基地址
ZZZZZ:

[课程]Android-CTF解题方法汇总!

上传的附件:
收藏
免费 0
支持
分享
最新回复 (3)
雪    币: 145
活跃值: (105)
能力值: ( LV7,RANK:110 )
在线值:
发帖
回帖
粉丝
2
我是新手,各位大牛手下留情,如果可以在重定位表那里给我点建议,感觉重定位表的处理代码比较难找,不是有经验的大侠是怎么处理这里的
2012-4-12 13:27
0
雪    币: 20
活跃值: (42)
能力值: ( LV5,RANK:60 )
在线值:
发帖
回帖
粉丝
3
打包的DLL没有壳吧?还是打错了?
2012-4-12 15:47
0
雪    币: 145
活跃值: (105)
能力值: ( LV7,RANK:110 )
在线值:
发帖
回帖
粉丝
4
看雪DLL脱壳笔记.rar

不好意思,打包错了,这个才是
上传的附件:
2012-4-12 18:27
0
游客
登录 | 注册 方可回帖
返回
//