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

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

2013-1-14 00:41
6448

用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代码:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
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
支持
分享
赞赏记录
参与人
雪币
留言
时间
伟叔叔
为你点赞~
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
PLEBFE
为你点赞~
2023-3-7 00:37
最新回复 (0)
游客
登录 | 注册 方可回帖
返回

账号登录
验证码登录

忘记密码?
没有账号?立即免费注册