-
-
[原创]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
[注意]传递专业知识、拓宽行业人脉——看雪讲师团队等你加入!
赞赏记录
参与人
雪币
留言
时间
伟叔叔
为你点赞~
2024-5-31 06:50
心游尘世外
为你点赞~
2024-5-31 03:44
QinBeast
为你点赞~
2024-5-31 03:34
飘零丶
为你点赞~
2024-4-2 02:08
shinratensei
为你点赞~
2024-2-3 04:27
一笑人间万事
为你点赞~
2023-3-7 00:37
赞赏
他的文章
谁下载
看原图
赞赏
雪币:
留言: