首页
社区
课程
招聘
[求助]把exe作为dll 载入时的重定位
发表于: 2016-11-23 11:22 6895

[求助]把exe作为dll 载入时的重定位

2016-11-23 11:22
6895
想把exe作为dll 一样载入,然后调用里面的代码。  用loadlibrary 显示载入的时候,目标exe的baseimage被占用了,所以被加载到了别的位置,所以代码段和数据段都需要手工重定位,在想有没办法能把目标exe  加载到目标exe的baseimage上,如0x400000,这样可以免去重定位。

还尝试把目标exe 加到主程序IAT上面,想法是在主程序启动的时候就先去加载目标exe,这样就能启动的时候先去占位置了,不过改了之后程序启动不了了,有没有人成功过??

[培训]内核驱动高级班,冲击BAT一流互联网大厂工作,每周日13:00-18:00直播授课

收藏
免费 0
支持
分享
最新回复 (8)
雪    币: 608
活跃值: (648)
能力值: ( LV4,RANK:50 )
在线值:
发帖
回帖
粉丝
2
如果你的PE有重定位表的话,你可以把你的Image加载到任意你想加载到的地方。如果没有那就没办法了
2016-11-23 11:36
0
雪    币: 6541
活跃值: (4501)
能力值: ( LV7,RANK:110 )
在线值:
发帖
回帖
粉丝
3
之前曾经弄过一个软件的注册机,自己写个dll,分析一下主程序在哪个位置初始化完成,就在那里load下自己的dll,然后用dll调用exe的代码,有过你这种想法,但好像不行,某些代码,直接调用不了,应该要让主程序自己初始化一下
2016-11-23 11:42
0
雪    币: 5299
活跃值: (3689)
能力值: ( LV13,RANK:283 )
在线值:
发帖
回帖
粉丝
4
你自己分配内存,重新映射下不就行了吗
2016-11-23 11:46
0
雪    币: 7651
活跃值: (523)
能力值: ( LV9,RANK:610 )
在线值:
发帖
回帖
粉丝
5
其实不复杂,说两个要点:
1.要调用的exe没有重定位表没关系,比如默认基址都是0x400000,你自己的程序在编译的时候可以改到其它基址,比如0x20000000,这样load别的exe的时候就可以加载到它的默认基址了,不需要重定位
2.对一些api要做特殊处理,比如GetModuleHandle,当exe调用它的时候,你得返回它实际加载的位置,不然就变成你exe加载的位置了,一般是用hook处理,当然需要处理的还有其它一些函数

这样的话,大部分不是太复杂的程序应该没问题了
2016-11-23 12:20
0
雪    币: 4751
活跃值: (1783)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
6
ImageBase要处理好
2016-11-23 12:22
0
雪    币: 31
活跃值: (11)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
7
谢谢大侠回答,第一次发帖,收到热心回复,心情小激动。
我确实是这么做的,但是我在启动自己的exe 的时候 0x400000 这个地址又会被其他的dll给先占用了,导致要调用的exe 一直无法加载到它默认的基址上去。  所以我才会想把exe 加入导入表,把它放到导入表的开头位置,让它先被加载,先去占个位置,结果失败了。  原因 可能是那种加载方式默认的都是加载dll,而dll一般都要用重定位表,而exe是没有重定位表的。
2016-11-24 10:03
0
雪    币: 62
活跃值: (2032)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
8
帮你顶一下,这个问题困挠我好多年,看有没有那位大侠帮忙解决一下。
2016-12-16 22:00
0
雪    币: 353
活跃值: (57)
能力值: ( LV9,RANK:140 )
在线值:
发帖
回帖
粉丝
9
代码是网上找的,我仅依葫芦画瓢写了一个LoadExeFromImage(),WinXP测试,有时可以,有时崩溃,原因不明。希望对你有帮助。
上传的附件:
2016-12-30 22:48
0
游客
登录 | 注册 方可回帖
返回
//