首页
社区
课程
招聘
[原创]PE加载器的简单实现
发表于: 2019-1-25 20:44 22619

[原创]PE加载器的简单实现

2019-1-25 20:44
22619
收藏
免费 12
支持
分享
最新回复 (43)
雪    币: 751
活跃值: (1409)
能力值: ( LV9,RANK:150 )
在线值:
发帖
回帖
粉丝
26
if_816554 而大多数.exe都没有重定位表,怎么去实现这个加载器?
等于我补发一下,sorry,我代码中有判断是否含重定位的,我这个程序是自己练习写的,适用性不高,主要是为了理解PE文件加载的过程,加载的程序用VS编写不去掉随机基址是带重定位表的
2019-2-27 19:23
0
雪    币: 2473
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
27
Iceshara 看雪已经成为了科锐和51PB的作业论坛了..... 文章质量下滑严重 [em_38]
2019-2-27 19:48
0
雪    币: 1558
活跃值: (3453)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
28
抱歉,语气有点差,想了十几天没想出来是哪里有问题头疼...后来查资料找到编译出重定位表的exe程序,实现了你说的效果
2019-2-27 20:24
0
雪    币: 1558
活跃值: (3453)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
29
搜了下论坛里帖子,用这个帖子也能实现
{想把exe作为dll 一样载入,然后调用里面的代码。  用loadlibrary 显示载入的时候,目标exe的baseimage被占用了,所以被加载到了别的位置,所以代码段和数据段都需要手工重定位,在想有没办法能把目标exe  加载到目标exe的baseimage上,如0x400000,这样可以免去重定位。

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

{其实不复杂,说两个要点:
1.要调用的exe没有重定位表没关系,比如默认基址都是0x400000,你自己的程序在编译的时候可以改到其它基址,比如0x20000000,这样load别的exe的时候就可以加载到它的默认基址了,不需要重定位
2.对一些api要做特殊处理,比如GetModuleHandle,当exe调用它的时候,你得返回它实际加载的位置,不然就变成你exe加载的位置了,一般是用hook处理,当然需要处理的还有其它一些函数

这样的话,大部分不是太复杂的程序应该没问题了}
2019-2-27 20:25
0
雪    币: 1558
活跃值: (3453)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
30
这个练习代码哪里有问题,查错都困难,吐血...
2019-2-27 21:33
0
雪    币: 26
能力值: ( LV1,RANK:0 )
在线值:
发帖
回帖
粉丝
31
好他吗牛逼
2019-2-28 04:43
0
雪    币: 635
活跃值: (1016)
能力值: ( LV6,RANK:80 )
在线值:
发帖
回帖
粉丝
32
mark
2019-3-18 18:02
0
雪    币: 47
活跃值: (143)
能力值: ( LV3,RANK:30 )
在线值:
发帖
回帖
粉丝
33
mark。学习原理事半功倍
2019-3-19 11:05
0
雪    币: 183
活跃值: (2427)
能力值: ( LV3,RANK:20 )
在线值:
发帖
回帖
粉丝
34
0x0003121E 处(位于 我的妈呀.exe 中)引发的异常: 0xC0000005: 读取位置 0x00402018 时发生访问冲突。为什么在跳转入口点的时候不成功,exe,没有重定位,我用od做exe试的,od有重定位也不行
2019-6-26 18:32
0
雪    币: 161
活跃值: (40)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
35
如果exe里有重定位的可以成功,例如vs19编译的控制台程序 没有重定位不行的,易语言编译出的exe就没重定位表,加载到内存里baseaddress不是0x400000 里面调用api的时候就出错 
2019-7-3 20:48
0
雪    币: 3312
活跃值: (3918)
能力值: ( LV3,RANK:20 )
在线值:
发帖
回帖
粉丝
36
资源表怎么处理?
2019-7-12 11:57
0
雪    币: 290
活跃值: (109)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
37
谢谢 已学习
2019-7-14 16:12
0
雪    币: 6124
活跃值: (4661)
能力值: ( LV6,RANK:80 )
在线值:
发帖
回帖
粉丝
38
支持
2019-7-14 18:02
0
雪    币: 161
活跃值: (40)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
39
杰克王 0x0003121E 处(位于 我的妈呀.exe 中)引发的异常: 0xC0000005: 读取位置 0x00402018 时发生访问冲突。为什么在跳转入口点的时候不成功,exe,没有重定位,我用od ...
exe要有重定位表才行,vs我编译的exe没问题,易语言的没重定位不行
2019-7-22 08:37
0
雪    币: 1
活跃值: (213)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
40
qj111111 搜了下论坛里帖子,用这个帖子也能实现 {想把exe作为dll 一样载入,然后调用里面的代码。 用loadlibrary 显示载入的时候,目标exe的baseimage被占用了,所以被加载到了别的位 ...
感觉这种方法局限性很大啊,让目标程序加载在默认基址处,虽然可以正常调用目标程序的内部函数,但是如果目标程序调用了其他的库函数,不一样要凉凉?
2019-7-25 17:03
0
雪    币: 240
活跃值: (78)
能力值: ( LV3,RANK:22 )
在线值:
发帖
回帖
粉丝
41
谢谢分享,很好得学习资料
2019-12-5 12:56
0
雪    币:
能力值: ( LV1,RANK:0 )
在线值:
发帖
回帖
粉丝
42
谢谢分享...
2020-4-4 20:45
0
雪    币: 27
能力值: ( LV1,RANK:0 )
在线值:
发帖
回帖
粉丝
43
请问为什么要用Ulong32?能具体解释下马,最近看PE加载器看到ULONG64和ULONG32,础差,希望得到大佬的解释
2022-2-10 17:24
0
雪    币: 3312
活跃值: (3918)
能力值: ( LV3,RANK:20 )
在线值:
发帖
回帖
粉丝
44
pe文件加载后在内核有对应的section,file数据结构,可没简单
2022-3-22 12:00
0
游客
登录 | 注册 方可回帖
返回
//