首页
论坛
课程
招聘
[求助]win8 OD 程序加载地址总是变化
2015-7-17 10:36 7967

[求助]win8 OD 程序加载地址总是变化

2015-7-17 10:36
7967
我有一个程序VideoPlay.exe,检查了一下没有加壳,证据如下:
PEiD v0.95检测结果:


ExeinfoPe 3.7检测结果:


二者检测出的入口地址和文件偏移都一样。
用OD加载后,程序停在了这里 0101E0CA,但并不是上图给出的地址,不过后四位倒是相同



如果我用Ctrl + F2 重新加载,程序还是会停在这个地址处。
但是下次开机再次加载这个程序,地址就变了,如下图,变为011CE0CA


这种地址的变化就导致了一个问题——我如果在代码里写一个绝对跳转,比如 JMP 0101ABCD ,就会因为加载地址的变动导致无法跳转到这一地址。

我看一些帖子,上来就说找到0x4000这个地址,可能以前的XP系统不支持地址重定位,所以入口地址总是在这里吧。我没有XP的环境,用虚拟机加载那个程序,程序会立马自杀。我也尝试修改程序PE头,将Character和Dll什么的标志位改了,让他不支持重定位,结果程序就无法运行了。直接跳转如果无法实现,我想用相对跳转来实现,但是不知道如何获取程序的基地址。

这里也有类似问题:http://bbs.pediy.com/archive/index.php?t-136087.html

我现在就想在Windows 7 及以上的系统上使用这个播放器,该怎么办?难道在Windows7以上的系统中就无法破解程序了吗?

[注意] 欢迎加入看雪团队!base上海,招聘安全工程师、逆向工程师多个坑位等你投递!

上传的附件:
收藏
点赞0
打赏
分享
最新回复 (16)
雪    币: 6851
活跃值: 活跃值 (453)
能力值: ( LV4,RANK:50 )
在线值:
发帖
回帖
粉丝
b23526 活跃值 2015-7-17 11:24
2
0
windows vista开始有动态基地址的功能,只要pe头Dll Characteristics有0x40每次加载时基地址都不一样
去掉IMAGE_OPTIONAL_HEADER.DllCharacteristics的IMAGE_DLLCHARACTERISTICS_DYNAMIC_BASE可以禁用随机基址
雪    币: 37
活跃值: 活跃值 (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
功明哥哥 活跃值 2015-7-17 16:37
3
0
这个方法我试了,不行。原本是0x40,也就是bit[6]为1,我将它改为0,也就是最后是0x00,保存后,程序就无法运行了。
雪    币: 631
活跃值: 活跃值 (45)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
linyifeng 活跃值 2015-7-17 19:10
4
0
call $5
pop eax
and eax,0xffff0000
and eax,base
jmp eax

后四位固定,前四位,动态
雪    币: 631
活跃值: 活跃值 (45)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
linyifeng 活跃值 2015-7-17 19:11
5
0
呃,是  or eax,base
雪    币: 239
活跃值: 活跃值 (21)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
romas 活跃值 2015-7-17 20:31
6
0
不能强行关ALSR么
雪    币: 37
活跃值: 活跃值 (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
功明哥哥 活跃值 2015-7-19 13:46
7
0
是的,修改后程序就打不开了
雪    币: 37
活跃值: 活跃值 (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
功明哥哥 活跃值 2015-7-19 13:47
8
0
这个方法我试了,不行。原本是0x40,也就是bit[6]为1,我将它改为0,也就是最后是0x00,保存后,程序就无法运行了
雪    币: 37
活跃值: 活跃值 (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
功明哥哥 活跃值 2015-7-19 13:49
9
0
意思是把这段代码加到程序里来还是怎么样?
雪    币: 631
活跃值: 活跃值 (45)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
linyifeng 活跃值 2015-7-21 00:41
10
0
相对寻址代码. 给你参考下.原理和 文件偏移<=>内存偏移 类似
雪    币: 300
活跃值: 活跃值 (261)
能力值: ( LV3,RANK:30 )
在线值:
发帖
回帖
粉丝
xxdisasm 活跃值 2015-7-21 01:07
11
0
你看看这样行不。你要找的代码相对于模块基地址的偏移应该是固定的,计算这个偏移,每次加载先得到模块基地址,基地址加偏移就定位了。
雪    币: 37
活跃值: 活跃值 (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
功明哥哥 活跃值 2015-7-22 09:47
12
0
正是这么想的,偏移很好计算,但是基地址求不出来
雪    币: 1091
活跃值: 活跃值 (524)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
chixiaojie 活跃值 2015-7-22 12:41
13
0
吾爱破解论坛上有一篇文章还是有一个工具是专门针对你说的这个问题的,自己找一下看看。
雪    币: 135
活跃值: 活跃值 (45)
能力值: ( LV5,RANK:60 )
在线值:
发帖
回帖
粉丝
karlx 活跃值 1 2015-7-22 14:18
14
0
ARSL 可以关闭 如果我没记错的话 MS出过工具

名字叫EMET ===The Enhanced Mitigation Experience Toolkit
雪    币: 300
活跃值: 活跃值 (261)
能力值: ( LV3,RANK:30 )
在线值:
发帖
回帖
粉丝
xxdisasm 活跃值 2015-7-22 20:02
15
0
GetModuleHandle
雪    币: 239
活跃值: 活跃值 (370)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
寧靜致遠 活跃值 2015-7-22 20:21
16
0
+1,我刚想准备说的。结果楼上先看到先说了。

GetModuleHandle(NULL) 得到当前EXE的基址
雪    币: 300
活跃值: 活跃值 (261)
能力值: ( LV3,RANK:30 )
在线值:
发帖
回帖
粉丝
xxdisasm 活跃值 2015-7-22 20:32
17
0
游客
登录 | 注册 方可回帖
返回