一:PE中增加节

使用工具为:LordPE、010Editor、CFF、OD

  1. List item
    先用 010Editor 查看节表部分是否足够长度加入新的节表目录

从图中看出,节表后面还有空余地方,可存放新增目录项

  1. 用 LordPE 查看PE头部信息,增加一节,在 setions 中修改新增节表的属性

    原始PE头信息:可得原始节表中有9项

    修改节表项数为10节

    然后点击Setions按钮,在里面修改新增节的相关属性(这里的相关原理有兴趣可自行了解)
    进去后可看见最后一节表项名字和其他相关数据均为 0 ;
    右键进入修改,修改项目为 Flags


    修改后记得Save

  2. 用 CFF 修改新增节的节名,和相关的偏移,偏移量的大小需要参照PE头中规定的内存对齐和文件对齐(节名等信息也可以在LordPE中的Setions修改,这里使用CFF软件,界面更清晰)

    ·这里定义新增的节名为 .liang

    ·节大小为0x200(为了方便展示,0x两百刚刚好为文件的最小对其,内存的对其为0x1000,对其信息在PE头信息的SectionsAlignment 和 FileAlignment 中)

    ·根据前面的信息可得.liang节的相关偏移量:
    例如:

    .reloc节大小为65C ,虚拟地址:22000
    该节最后偏移地址为 22000 + 65C = 2265C
    内存对其为1000,得:最终.liang节开始地址为23000(也是.reloc 的最后位置)

    ·其他数据同理可的

  3. 从上一步得:新增节的大小为0x200,则需要用010Editor 在文件的末尾加0x200的0字符(节表相当于目录,文件末尾的添加内容相当于目录对应的内容)

    举例:
    添加节表项内容,相当于在书本目录最后,增加了书本中的目录项,但是真实书本的最后,却还没有增页。

    这一步我们要做的就是在书本最后增加页

    使用工具 010Editor:

    上图得文件末尾地址为:C400
    具体步骤:
    编辑 -> 插入 -> 插入字节(这里选择填入全为 0 的数据)

    成功插入0x200个 0的数据

  4. 用 LordPE 修改映像大小(SizeofImage),手动修改,原大小+新增0x200;
    (自动修改,在LordPE中,点击Setions,如果新增节中的地址偏移已经算好并且填入,退出Sections时,会自动修改的映像大小)

    原映像大小为0x23000,新增后,大小为0x23200

保存并且退出,至此,PE增加节部分的工作已经完成。

二:修改程序入口地址

此程序为开启了随机地址的模式;
(固定地址模式的修改较为简单,可自行推导)

  1. LordPE 查看原程序的入口地址(OI)
    打开OD 找到原程序入口地址(OE)

  2. 在OD中拉到最后,找到一连串的ADD指令,因为填充的0x200个 0,汇编指令机器码刚好对应于ADD;

  3. OD中第一条ADD指令地址 (A1),A1 - OE = E1

  4. 在LordPE中把原入口地址修改为:OI + E1

    注意上述地址的符号

    保存并退出后,可再次打开 .exe,发现程序运行了一会儿后,出现错误

三:在新节中把控制权交回给原程序

分析第二部分最后的原因得:程序打开后,运行了一堆的ADD指令后,不再有其他的操作,导致程序崩溃;

使用OD:
我们可以修改第一条ADD指令,使用 jmp 跳转指令直接跳转到原程序入口点(OE)

大功告成,可在新增节中增加很多其他操作,此部分即为程序的壳。

后续更新…

【exe加壳:修改可执行文件的PE头,增加一节,修改程序入口地址为该节】相关推荐

  1. 对一个加壳的可执行文件进行脱壳三种方法

    1.自动静态脱壳:通过一些脱壳工具即可,相当于解压缩,最为方便快捷 2.自动动态脱壳:运行可执行文件,让脱壳存根的的文件脱出原始的可执行文件. 3.手动脱壳:找到加壳算法程序,自己分析源程序进行脱壳.

  2. 关于子函数头判断及cl编译器下入口地址的对齐问题

    (注:本文属于<浅谈C语言下如何批量设置函数指针数组>一文的续写) 前几天由于太懒不想手动将动态链接库里共计上百个子函数的指针逐个赋入函数指针数组,所以想了个通过以第一个装入的函数的地址为 ...

  3. html 动态修改列名,FineUI之动态增加列及修改列的实现

    在FineUI的官方示例中有类似的实现.示例中实现了动态增加列,但有时我们可能需要动态修改列.先来看效果图 下面是代码实现 DynamicGrid.aspx DynamicGrid.aspx.cs u ...

  4. 写一个PE的壳_Part 5:PE格式修复+lief源码修改

    系列汇总 写一个PE的壳_Part 1:加载PE文件到内存 写一个PE的壳_Part 2:ASLR+修复输入表(IAT)+重定位表支持(.reloc) 写一个PE的壳_Part 3:Section里实 ...

  5. experiment : EXE使用UPX加壳后, 用OD查找OEP

    测试程序 #include "stdafx.h" #include <windows.h> #include <tchar.h>int _tmain(int ...

  6. Windows Pe 第三章 PE头文件(上)

    第三章  PE头文件 本章是全书重点,所以要好好理解,概念比较多,但是非常重要. PE头文件记录了PE文件中所有的数据的组织方式,它类似于一本书的目录,通过目录我们可以快速定位到某个具体的章节:通过P ...

  7. 加壳器第二部分,加壳器

    1加壳器代码概述 为了软件的方便使用,这里我采用了mfc框架进行编写,其大致过程如下: 1.将加壳程序读入内存(因为要增加区段用于存放壳代码,并加密代码段) 2.加载壳代码 3.对一系列参数进行初始化 ...

  8. PE头解析-字段说明

    一.什么是可执行文件 1.可执行文件(executable file)指的是可以由操作系统进行加载执行的文件. 2.可执行文件的格式: Windows平台: PE(Portable Executabl ...

  9. 技术扫盲 软件加壳(转)

    首先我想大家应该先明白"壳"的概念.在自然界中,我想大家对壳这东西应该都不会陌生了,植物用它来保护种子,动物用它来保护身体等等.同样,在一些计算机软件里也有一段专门负责保护软件不被 ...

最新文章

  1. wpf 多线程处理同步数据_一文带你理解多线程的实际意义和优势
  2. 数组字符串转化成数组与eval函数
  3. 160 - 36 cupofcoffe.2
  4. Linux视频 pad,Wine 1.9.10 发布下载, 改善视频输出
  5. mysql不可重复读是锁的表吗,Mysql事务,并发问题,锁机制-- 幻读、不可重复读(转)...
  6. 第六:Pytest中的setup/teardown
  7. python灰度图cv2到plt变颜色_python中plt.imshow与cv2.imshow显示颜色问题
  8. android ndk makefile,用Android NDK打造自己的toolchain(使用C/C++默认的Makefile)
  9. 承载童年的游戏机,已停产!但我在 GitHub 找到了它们
  10. 日期插件datepicker的使用
  11. Spring Cloud之路---1.注册中心eureka与服务提供者
  12. ubuntu 14.04加入五笔输入法
  13. 光学基本知识--概念辨析
  14. 微信在线客服系统-微信公众平台开发
  15. drools学习笔记-rule组织方式
  16. php微信支付mch_id参数格式错误,在.net core上,Web网站调用微信支付-统一下单接口(xml传参)一直返回错误:mch_id参数格式错误...
  17. APS54083 DC/DC升降压恒流驱动芯片 2.4G调光 —提供DEMO板
  18. [PTA]实验11-2-7 统计专业人数
  19. 为什么企业选择局域网即时通讯软件?局域网即时通讯软件哪家好?
  20. vins-fusion代码解读[五] imu在vins里的理解

热门文章

  1. Phoenix客户端Squirrel安装
  2. linux下传输ts流,FFmpeg安装(Linux)以及MP4转码为ts和m3u8
  3. 高中必备学习软件_高中必备app下载-高中必备下载v2.0.7-西西软件下载
  4. 354. 俄罗斯套娃信封问题(良心注释)
  5. 2018宝宝生辰八字取名的方法
  6. 电子产品上亚马逊UL报告正确做法
  7. 在蜘蛛表格中实现微信消息通知是这样做到的
  8. xcode中gdb调试命令
  9. 微电子专业 | 哪所大学芯片最强?强在哪?(深度盘点)
  10. 谈谈小红书怎么引流减肥产品?让你轻松上热门变现