首页
社区
课程
招聘
[原创]OdScript+VC 练习还原重定位表
发表于: 2013-1-14 00:41 6326

[原创]OdScript+VC 练习还原重定位表

2013-1-14 00:41
6326

用VC2010编译出来的EXE程序跟DLL很像,在PE文件里的基址一般写着0X400000,但是一般不会被加载到这个位置。这就意味着,如果加壳工具去除了EXE程序的原始重定位表,我们似乎只能用两种方法来处理壳:1.在壳代码中强制它以0X400000为重定位基址,然后DUMP 2.像处理DLL一样修复它的重定位表。本文以UPX加EXE为例试验了第二种方法,修复EXE的重定位与修复DLL的重定位原理差不多,坛上帖子多,我就不废话了。

大致操作过程如下:
1.使用的ESP定律迅速找到OEP 2.找到OEP以后进入原程序的代码,找几个需要重定位的地址,下内存断点,中断两三次后会发现类似下面这样的代码,拦截ebx,保存起来后处理一下即可得到重定位表。
add eax,esi
mov [ebx],eax

详细操作见OD代码:

var bp1rva=10546 
var pcurrmem_ori=0
var pcurrmem
var membase=0
var memsize=2000
var hdaddr=0

msgyn "是否要执行本脚本?"
cmp 0,$RESULT
jnz next
next:

mov memsize,2000
alloc memsize	//分配内存用作重定位表的修复
mov pcurrmem,$RESULT
mov pcurrmem_ori,pcurrmem
log pcurrmem

gmemi eip,MEMORYOWNER
mov membase,$RESULT //获取当前加载基址
mov bp1rva,10546
add bp1rva,membase
bp bp1rva //在这个地址下断

//ESP定律
sti
mov hdaddr,esp
log hdaddr
bphws hdaddr,"r"
run
eob manytimes

manytimes:
//会先停在bp1

cmp eip,bp1rva
jnz maybetheend
mov [pcurrmem],ebx //保存即可
add pcurrmem,4//指针加4
run

maybetheend:
dm pcurrmem_ori,memsize,"d:\desktop\reloc.hex"
bphwc hdaddr

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

上传的附件:
收藏
免费 6
支持
分享
最新回复 (0)
游客
登录 | 注册 方可回帖
返回
//