一直想学学怎么动动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的更多相关文章

  1. CentOS 手动增加、删除swap区

    SWAP是Linux中的虚拟内存,用于扩充物理内存不足而用来存储临时数据存在的.它类似于Windows中的虚拟内存.在Windows中,只可以使用文件来当作虚拟内存.而linux可以文件或者分区来当作 ...

  2. centos 手动增加swap分区

    SWAP是Linux中的虚拟内存,用于扩充物理内存不足而用来存储临时数据存在的.它类似于Windows中的虚拟内存.在Windows中,只可以使用文件来当作虚拟内存.而linux可以文件或者分区来当作 ...

  3. CentOS如何手动增加 删除swap区

    SWAP是Linux中的虚拟内存,用于扩充物理内存不足而用来存储临时数据存在的.它类似于Windows中的虚拟内存.在Windows中,只可以使用文件来当作虚拟内存.而linux可以文件或者分区来当作 ...

  4. PE节表详细分析

    目录 PE节表详细分析 0x00 前言 0x01 PE节表分析 节表结构 节表数量 节表名字 节表大小 节位置 节表属性 0x02 代码编写 PE节表详细分析 0x00 前言 上一篇文章我们学习了PE ...

  5. Oracle表字段的增加、删除、修改和重命名

    本文主要是关于Oracle数据库表中字段的增加.删除.修改和重命名的操作. 增加字段语法:alter table tablename add (column datatype [default val ...

  6. 10月16日下午MySQL数据库CRUD操作(增加、删除、修改、查询)

    1.MySQL注释语法--,# 2.2.后缀是.sql的文件是数据库查询文件. 3.保存查询. 关闭查询时会弹出提示是否保存,保存的是这段文字,不是表格(只要是执行成功了表格已经建立了).保存以后下次 ...

  7. 使用oracle数据库,多用户同时对一个表进行增加,删除,修改,查看等操作,会不会有影响?

    使用oracle数据库,多用户同时对一个表进行增加,删除,修改,查看等操作,会不会有影响? 1.问题:各操作间或者性能上会不会有影响? 如果有该如何解决? 多用户操作的影响主要是回锁定记录,oracl ...

  8. Linux学习(十四)磁盘格式化、磁盘挂载、手动增加swap空间

    一.磁盘格式化 分好去的磁盘需要格式化之后才可以使用.磁盘分区一般用mke2fs命令或者mkfs.filesystemtype.这个filesystemtype分为ext4,ext3,xfs等等.xf ...

  9. 手动增加swap空间

           在日常工作中,swap没有必要搞那么大的空间,因为现在好多服务器都使用了ssd硬盘,这些硬盘还是比较贵的.如果服务器内存是128G,swap空间还设置成内存的两倍的话,那岂不是很明显是很 ...

随机推荐

  1. java学习笔记17(Calendarl类)

    Calendar类:(日历) 用法:Calendar是一个抽象类:不能实例化(不能new),使用时通过子类完成实现,不过这个类不需要创建子类对象,而是通过静态方法直接获取: 获取对象方法:getIns ...

  2. rem问题

    rem为单位时,根元素html的font-size 必须>=12px,否则 默认为font-size:12px. 为啥 html 设置成 62.5%,或者 10px 时,这种换算无效了呢?经过研 ...

  3. 微软Power BI报表服务器学习总览

    今天,微软宣布了8月更新Power BI Report Server!此版本包含一些新功能,包括一些备受期待的项目,如报表主题,条件格式改进和报表页面工具提示. 报告 报告主题 用于触发操作的按钮 组 ...

  4. iccv文献引用

    1.@inproceedings:会议 2.@article:期刊 3.@incollection:书 4.@misc:啥不是 author的名字书写: pdf显示为:G. Wang bibtex中: ...

  5. Java基础(2)面向对象和封装,对象的创建和使用、java对象的内存图

    1 类和对象 类:是一类事物的描述,抽象的.猫 对象:是一类事物的实例,具体的.某只猫 2 类的定义 成员变量和成员方法 //定义一个学生类 public class Student { //成员变量 ...

  6. Buildroot Savedefconfig

    /********************************************************************************* * Buildroot Saved ...

  7. Python中的print、input函数以及Python中交换两个变量解析

    一.Python中的值交换操作 首先明确一点点,Python中的一切都是面向对象的,可以理解为Python的中一切都是对象. 我们知道Java也是面向对象的语言,但是在Java中定义一个值变量如下: ...

  8. doc转html

    Doc2Html  li标签没闭合 在线Word转HTML  style样式

  9. xdoj-1319 求树上任意一点的最大距离----利用树的直径

    1 #include <bits/stdc++.h> using namespace std; ; vector < vector <int> > g(N); in ...

  10. 服务器-华为RH2288H V3-Server 2008R2忘记登录密码操作方法

    1.插入PE盘,重启服务器. 下载地址:http://pan.baidu.com/s/1c16cP6C 密码: 18hq 注:这是支持全系列阵列卡的专用服务器PE工具,市面上的绝大多数PE在服务器中都 ...