-
-
重建重定位表脚本--特别附加说明
-
2004-10-19 11:29
4444
-
看来还是没多少人说会用这个脚本或反馈错误,为了普及测试,硬着头皮再细说一下,用这么大的篇幅写说明还是头一次,感觉好像在写个小软件,但我确实没写过什么软件,真的,顶多做过1、2个KeyGen:
脚本使用面向两类需求者:
1.是只想得到一份重定位表数据的朋友,称为“急者”吧,重定位表可以作为一个独立的section,它的RVA只直接填该section的RVA。
2.是追求空间的“Dump者”,这类Dump者需要对 PEDIY 有一定认识的朋友。
我们来看输入参数:
1.ImageBase:这个是被调试进程的当前内存映像基址,不要说你不知道。
2.START: 自定义重建重定位表起始地址。自定义嘛,自己挑,建议选择被调试进程的程序空间(在入口时自己大搜查确定),也不要选择程序空间是可能破坏当前循环重定位的进程指令空间地址。比如:a到d的地址是循环重定位指令空间,你就不要选择a+1或a-1的地址作为START,是不是说得很白痴。
3.bound: 设定检测重定位表边界地址,主要是为充分利用进程空间的Dump者所想的 -- 你不需再去计算重定位表的RVA和SIZE,脚本结束会有计算结果,你唯一想的是如何安排START和这个bound,bound是重定位表的假定结束地址,可以说是个有效地址检测,采用重写后才检测,它应该是被重写区块之内的结束边界或出于你估计的地址值,使用体会中才能明白,我无法一语中的;若你只是想得到一份重定位数据的“急者”,那么不需要太多考虑这个,只要这个数值大于重定位表起始地址而不是系统共享空间地址就行了,最后选择输出“C:\Reloc.bin”,同样结束后也有SIZE提示信息。
4.bPoint: 映像区块重定位指针地址(脚本断点)。被调试进程重定位如何实现(解密等),我们不需关心,仅对本脚本有用的是写入新的重定位的指令,当中有重定位需要的指针“寄存器”或“变量”,它是不断变化的,作提取为脚本备用。地址需自己确定,如何确定这条指令的小Tips吧:首先要知道什么地方进行重定位(少不了code块吧),在马上运行就要重定位时,直接在code段下内存断点,运行中断的那条指令10有89就是了,也可参看OD状态栏中断提示。大概是这样的形式:mov [reg或var],some reg或var
5.mRVA: 接着上面所说的,下面要填的是 mov mRVA,some reg ,some reg 就是重定位变量指针
hRVA: //处理VA,SOB
mov mRVA,ebx //☆☆☆映像区块重定位指针地址,需手工设置,一般是寄存器,比如:upx壳是ebx☆☆☆
and mRVA,0FFFF000
sub mRVA,ImageBase
6.endaddr: 重定位处理结束的指令地址,简称“出口”(脚本断点)。也是自己寻找的,应该不难吧!不是有很多教程都有指出来了吗?
另:本脚本只设有两个断点,如果运行当中出现其它中断或异常(Anti、未清断点),脚本将会自行提示结束!当中的问题可能需要你自己去解决,不明的中断或异常会对脚本带来不可估计的影响,所以就这么办。断点地址确定我采用询问输入为了通用性,你也可以修改偶的脚本,用find命令查找特征串确定,就成了你的专用脚本!
例子:
点击下载: UPX加壳的DLL脱壳!
http://bbs.pediy.com/upload/files/1085925706.rar
XP环境脚本参数参考(适合“Dump者”和“急者”):
ImageBase:003B0000
START: 003B4440 (自定义)
bound: 003B5000 (自估计)
bPoint: 003B8276
mRVA: ebx
endaddr: 003B8287
具体其它PE文件的操作不是本脚本范围的能力,测试通过附件中调用 DLL 的程序EdrTest.exe:)
[培训]二进制漏洞攻防(第3期);满10人开班;模糊测试与工具使用二次开发;网络协议漏洞挖掘;Linux内核漏洞挖掘与利用;AOSP漏洞挖掘与利用;代码审计。