手动增加pe节并修改oep
一直想学学怎么动动pe文件,学习了几篇文章尤其是寒晨的文章后,自己动手也尝试了一下加节和修改oep,写出来供和我一样菜的一起进步。
一、 增加pe节需要的操作
1. 确定内存中的节的对齐粒度和文件中的节的对齐粒度,分别是pe+0038h 和3ch

也就是说 内存和文件的对齐粒度都是1000h.
2. 在文件末尾增加数据。
因为文件对齐的粒度是1000h,那么我们在文件末尾增加2000h个数据。

3. 在节表末尾增加新的节信息

在最后一个节信息后面增加一个.peng的节
2E 70 65 6E 67 00 00 00 --------.peng的ASCII码。
00 18 00 00 --------- VirtualSize实际大小(随便写的)。
00 B0 00 00 --------- VirtualAddress dd 节区的RVA地址(因为.data节的RVA地址是7000,大小是3E24,加起来是AE24,为了对齐,所以是B000,表示成为00B00000。
00 20 00 00----- SizeOfRawData在文件中对齐后的尺寸(末尾加了2000h个字节,都算上了)
00 A0 00 00 ---- PointerToRawData在文件中的偏移物理文件地址,刚才加的地址是A000,所以直接写成00 A0 00 00。这里为什么不是上边的00 B0 00 00 呢?开始我也想当然的这么写了,但是程序总是不对。后来想明白了,因为我们增加的2000h个字节,是从A000开始加的,并不是B000,如果非要写成B000,那么还要再末尾加1000h个字节才行呢,否则就凑不齐SizeOfRawData 中写的这个节有2000个数据了。
之后
00000000 PointerToRelocations
00000000 PointerToLinenumbers
0000 NumberOfRelocations dw
0000 NumberOfLinenumbers dw
20 00 00 60 Characteristics 节的属性 可读取,可执行 ,代码。
4.在pe+6出修改节数目。

原来是03 00,改成04 00。
5.在pe+50处 修改内存映像大小。

原来是00 B0 00 00 改成00 D0 00 00,原来的映像为什么是B000大小呢?注意下面图中,.data是原来最后一个节,RVA地址是7000,大小是3E24,总和是AE24,按照对齐原则,总大小是B000.

所以,新的内存映像大小应该是,B000+1800=C800 对齐后是D000.
6.测试
用lordpe 加载看到,.peng 区段正确显示,运行程序也正常。

二、 修改OEP
1、OEP在pe+28处,查看并修改。

原OEP在1203处,记下该地址,并修改成B000(注意不是A000,oep是RVA, 开始我搞错了,程序崩溃),

2.打开OD

会停留在新的oep处,修改成jmp 00401203,然后保存.
3.测试
正常运行!
OK!
手动增加pe节并修改oep的更多相关文章
- CentOS 手动增加、删除swap区
SWAP是Linux中的虚拟内存,用于扩充物理内存不足而用来存储临时数据存在的.它类似于Windows中的虚拟内存.在Windows中,只可以使用文件来当作虚拟内存.而linux可以文件或者分区来当作 ...
- centos 手动增加swap分区
SWAP是Linux中的虚拟内存,用于扩充物理内存不足而用来存储临时数据存在的.它类似于Windows中的虚拟内存.在Windows中,只可以使用文件来当作虚拟内存.而linux可以文件或者分区来当作 ...
- CentOS如何手动增加 删除swap区
SWAP是Linux中的虚拟内存,用于扩充物理内存不足而用来存储临时数据存在的.它类似于Windows中的虚拟内存.在Windows中,只可以使用文件来当作虚拟内存.而linux可以文件或者分区来当作 ...
- PE节表详细分析
目录 PE节表详细分析 0x00 前言 0x01 PE节表分析 节表结构 节表数量 节表名字 节表大小 节位置 节表属性 0x02 代码编写 PE节表详细分析 0x00 前言 上一篇文章我们学习了PE ...
- Oracle表字段的增加、删除、修改和重命名
本文主要是关于Oracle数据库表中字段的增加.删除.修改和重命名的操作. 增加字段语法:alter table tablename add (column datatype [default val ...
- 10月16日下午MySQL数据库CRUD操作(增加、删除、修改、查询)
1.MySQL注释语法--,# 2.2.后缀是.sql的文件是数据库查询文件. 3.保存查询. 关闭查询时会弹出提示是否保存,保存的是这段文字,不是表格(只要是执行成功了表格已经建立了).保存以后下次 ...
- 使用oracle数据库,多用户同时对一个表进行增加,删除,修改,查看等操作,会不会有影响?
使用oracle数据库,多用户同时对一个表进行增加,删除,修改,查看等操作,会不会有影响? 1.问题:各操作间或者性能上会不会有影响? 如果有该如何解决? 多用户操作的影响主要是回锁定记录,oracl ...
- Linux学习(十四)磁盘格式化、磁盘挂载、手动增加swap空间
一.磁盘格式化 分好去的磁盘需要格式化之后才可以使用.磁盘分区一般用mke2fs命令或者mkfs.filesystemtype.这个filesystemtype分为ext4,ext3,xfs等等.xf ...
- 手动增加swap空间
在日常工作中,swap没有必要搞那么大的空间,因为现在好多服务器都使用了ssd硬盘,这些硬盘还是比较贵的.如果服务器内存是128G,swap空间还设置成内存的两倍的话,那岂不是很明显是很 ...
随机推荐
- 《uniGUI for cBuilder入门到精通》新书预定
<uniGUI for cBuilder入门到精通>火热预定中,从零开始带你入瓮带你飞,手把手教你如何快速安装,开发和部署一个web系统,前十名用户售价暂定100元,后续价格每本200元, ...
- REST easy with kbmMW #17 – Database 6 – Existing databases
kbmMW已经包含了非常精细的功能来确定和解释数据库中表的元数据. 在下一版本中,这个功能将得到进一步加强,可以导入现有数据库中的表,自动创建与表相匹配的ORM实体类. 这意味着你能够使用kbmMW的 ...
- 判断终端是ios还是android来加载不同的样式
<script type="text/javascript"> var addStyleLink = function(href){ var head = docume ...
- c++ 类图
https://baijiahao.baidu.com/s?id=1609647985519542865&wfr=spider&for=pc
- SDM(Supervised Descent Method and its Applications to Face Alignment )
sdm SDM 人脸对齐的核心内容很简单,就是特征到偏移量的映射: Ix = R I 是特征,x是映射矩阵,R是偏移 ...
- HanLP 配置与使用
https://github.com/hankcs/HanLP 下载 hanlp-1.6.0.jar和 hanlp.properties 放在主目录下 修改 hanlp.properties 参考官网 ...
- C++ 中时钟函数的使用
头文件: #incllude <time.h> 定义: clock_t var1, var2; 获取时间: var1 = clock(); 每过千分之一秒(1毫秒),调用clock()函数 ...
- [LeetCode&Python] Problem 429. N-ary Tree Level Order Traversal
Given an n-ary tree, return the level order traversal of its nodes' values. (ie, from left to right, ...
- [Algorithm] Good Fibonacci
def good_fibonacci(n): if n<=1: return (n,0) else: (a,b)=good_fibonacci(n-1) return (a+b,a)
- VMware安装CentOS以及CentOS的一些配置
转:http://blog.csdn.net/u013082989/article/details/51911330