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

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

2019-1-25 20:44
22619

模拟PE加载器加载PE文件,对导入表以及重定位表的操作过程。

PE加载器的步骤:

1.将PE文件用ReadFile读取数据

2.根据PE结构获取镜像大小,在自己的程序中申请可读可写可执行的内存。

3.将申请的空间全部填为0

4.将用ReadFile读取的数据映射到内存中


由上图可知,PE文件在加载到内存中对齐粒度不同,因此在写代码时要注意这个问题

5.修复重定位

重定位后的地址 = 需要重定位的地址 - 默认加载基址 + 当前加载基址

6.根据PE结构的导入表,加载所需的dll,并获取导入函数的地址并写入导入表中

7.修改PE文件的加载基址

8.跳转到PE的入口点处执行

通过上述代码,成功加载并运行程序:


[招生]科锐逆向工程师培训(2024年11月15日实地,远程教学同时开班, 第51期)

最后于 2019-2-27 19:25 被Iam0x17编辑 ,原因:
上传的附件:
收藏
免费 12
支持
分享
最新回复 (43)
雪    币: 8924
活跃值: (5147)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
jgs
2
普及文章,收藏备用,谢谢楼主
2019-1-25 22:53
1
雪    币: 783
活跃值: (1121)
能力值: ( LV5,RANK:78 )
在线值:
发帖
回帖
粉丝
3
科普文章 感谢 
2019-1-26 20:13
0
雪    币: 45
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
4
谢谢!很实用
2019-1-26 22:47
0
雪    币: 6
活跃值: (3290)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
5
64位PE呢??
2019-1-27 00:18
0
雪    币: 204
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
6
建议打包个源码文件
2019-1-27 08:37
1
雪    币: 13650
活跃值: (19)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
7
咖啡_741298 64位PE呢??
64位PE叫做PE32+,和PE32除了头部分之外基本相同。
2019-1-27 09:06
0
雪    币: 3170
活跃值: (129)
能力值: ( LV3,RANK:30 )
在线值:
发帖
回帖
粉丝
8
顶一下
2019-1-27 09:25
0
雪    币: 7165
活跃值: (3937)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
9
mark顶一下
2019-1-29 20:01
0
雪    币: 1604
活跃值: (640)
能力值: ( LV13,RANK:460 )
在线值:
发帖
回帖
粉丝
10
支持


最后于 2019-1-29 21:02 被shayi编辑 ,原因:
2019-1-29 21:00
0
雪    币: 0
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
11
学习了
2019-1-29 21:11
0
雪    币: 4900
活跃值: (2555)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
12
目测是科锐的学生~ 
2019-1-29 22:16
0
雪    币: 1103
活跃值: (521)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
13
有个64位PE 的加载器就完美了!!!
2019-1-30 00:12
0
雪    币: 751
活跃值: (1409)
能力值: ( LV9,RANK:150 )
在线值:
发帖
回帖
粉丝
14
Iceshara 目测是科锐的学生~
15pb
2019-1-30 09:24
0
雪    币: 4900
活跃值: (2555)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
15
看雪已经成为了科锐和51PB的作业论坛了.....   文章质量下滑严重 
2019-1-30 14:50
2
雪    币: 6552
活跃值: (4346)
能力值: ( LV10,RANK:163 )
在线值:
发帖
回帖
粉丝
16
没有异常处理的PE LOAD都是 渣渣。
2019-1-30 15:51
0
雪    币: 54
能力值: ( LV1,RANK:0 )
在线值:
发帖
回帖
粉丝
17
马克
2019-1-30 16:24
0
雪    币: 751
活跃值: (1409)
能力值: ( LV9,RANK:150 )
在线值:
发帖
回帖
粉丝
18
 
最后于 2019-1-30 17:50 被Iam0x17编辑 ,原因:
2019-1-30 17:48
0
雪    币: 751
活跃值: (1409)
能力值: ( LV9,RANK:150 )
在线值:
发帖
回帖
粉丝
19
 
最后于 2019-1-30 17:50 被Iam0x17编辑 ,原因:
2019-1-30 17:50
0
雪    币: 375
活跃值: (356)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
20
支持,学习了,还少一个GetSizeOfImage(pFileBuff)函数,我怎么总是不成功?有源码吗,发一份给,谢谢!
2019-2-19 15:18
0
雪    币: 635
活跃值: (1016)
能力值: ( LV6,RANK:80 )
在线值:
发帖
回帖
粉丝
21
感谢分享
2019-2-25 13:23
0
雪    币: 1258
活跃值: (1434)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
22
Iceshara 看雪已经成为了科锐和51PB的作业论坛了..... 文章质量下滑严重 [em_38]
2019-2-25 17:12
0
雪    币: 1558
活跃值: (3453)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
23
楼主有源码么,可以发一份不,最近在学这部分内容,照着你的思路自己写的,总是失败,排查bug也查了十几个小时也查不到在哪,和你发的源码一点点比对也找不出来,吐血了.
2019-2-26 10:56
0
雪    币: 1558
活跃值: (3453)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
24
你这人怎么关键性的东西留一手?如果这个程序没有重定位表,这种方法根本就没法实现PE加载器,所有全局变量全是错的
2019-2-27 17:33
0
雪    币: 1558
活跃值: (3453)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
25
而大多数.exe都没有重定位表,怎么去实现这个加载器?
2019-2-27 17:45
0
游客
登录 | 注册 方可回帖
返回
//