利用01Editor编辑器进行手工加壳

  • 利用01Editor编辑器进行手工加壳已关闭评论
  • 2,808 视图
  • A+
所属分类:编程开发

心语家园 https://www.xinyucn.cc/ 为非盈利网站,纯公益性质,所有软件和插件均免费下载。象征性收取的少许费用,完全是为了维持网站运营,支付服务器费用。且收费有助于防止采集和拷贝。由于有些软件主题插件升级频繁,导致汉化不完全,如果你购买后发现此问题,可通过网站顶部“私信本站”反馈,我们将尽快完善汉化。

正文开始:

主要工具: 010Editor、LordPE、OD
实验平台:win10 64位
实现功能:加壳。

加壳原理

要想弄明白怎么对PE文件加壳,首先需要对PE文件比较熟悉,而最快的熟悉PE文件的方法就是自己写一个PE解析工具和写壳了。
先只用工具010Editor完成一个手工加壳,那么就明白加壳的原理了。

首先进行手工加壳

先用VS随便生成一个exe文件,我们使用它进行实验。
可以先使用010Editor、LordPE、OD等工具查看节区个数,我实验程序的原始区段(节区)个数是8个。

1. 给PE文件添加一个新区段

修改文件头的NumberOfSection
使用010Editor打开测试程序,按alt+4出现一个模板菜单找到NumberOfSection把该数字加1,这里改为了9。
利用01Editor编辑器进行手工加壳

2. 设置新的区段头

添加保存之后, 重新运行010Editor的模板(或者重启010),区段就增加了一个。
利用01Editor编辑器进行手工加壳
设置整个新增加的区段的数据,主要需要设置的字段如下:
利用01Editor编辑器进行手工加壳

  1. 区段名(可选)
  2. 区段数据的实际字节数Misc.VirtualSize
  3. 区段的VirtualAddress(区段数据在内存中的RVA),此值必须是: 上一个区段的VirtualAddress + 上一个区段经内存对齐粒度对齐后的大小(内存对齐大小是0x1000的整数倍)
  4. 区段以文件对齐粒度对齐后的大小SizeOfRawData(文件对齐大小是0x200的整数倍)
  5. 区段的PointerToRawData(区段数据在文件中的偏移),此值必须是:上一个区段的PointerToRawData + 上一个区段的SizeOfRawData
  6. 区段属性主要设置区段为可读可写可执行如下图
    利用01Editor编辑器进行手工加壳
    对比上一个区段修改新添加的区段里的字段。
    利用01Editor编辑器进行手工加壳
3.添加区段数据

区段头内容虽然设置好了,但真正重要的区段里的数据还需要插入到文件中,以扩充文件的大小,因为区段头只是一个相当于目录的存在,如果只有目录而没有内容,就会造成这个文件成为一个无效的PE文件。
把010Editor里的数据页滚动到最下面按Ctrl+shift+i添加200h个(16进制)字节
利用01Editor编辑器进行手工加壳
利用01Editor编辑器进行手工加壳

4. 修改PE文件的扩展头的SizeofImage

现在PE文件已经被扩充了大小,扩展头中的映像大小必须更新,否则当PE文件加载到内存后,新区段的数据将无法得到正常加载。
这个字段的值记录的是一个PE文件在内存中的大小,可以将之设置为: 最后一个区段在内存中的位置 + 最后一个区段在内存中的大小,即:
OptionalHeader.SizeofImage = 最后一个区段.VirtualAddress + 最后一个区段.SizeOfRawData按内存对齐粒度对齐的大小
利用01Editor编辑器进行手工加壳
保存之后,运行该程序,就能正常运行(中间某些环节操作错了就会导致该文件无法正常运行)到此添加区段成功了。那么加壳也就成功了90%,这个新区段之后称为壳代码段。

5.添加壳代码

先找到扩展头的DLL属性字段,去掉随机基址,把40 81改为 00 81后保存。
利用01Editor编辑器进行手工加壳
在这里为了方便,就使用LordPE来操作剩下的步骤了,先记录原始的OEP入口点为11055,把他改为新区段的RVA 1F000然后点击保存。
利用01Editor编辑器进行手工加壳
然后再使用OD打开,进入到入口点就是41F000,因为默认加载基址是0x400000, 发现全是00 00 00的字节,没用内容。把第一行代码改为跳转到原来的入口点jmp 0x411055,然后打一个补丁,程序就能正常运行了。
利用01Editor编辑器进行手工加壳
这就是一个完整的壳流程了,虽然这个壳的内容只有一条跳转到原入口点的代码,但万丈高楼平地起。基础的东西弄懂了后面才能少遇见一些坑!

 

本站所有发布资源均支持繁体中文,但因繁体中文用户量太少,大部分资源你需要申请汉化才能提供。从2021年1月1日开始,本站所有资源必须注册登陆后才能下载,全部免费。10家园币=1元人民币。如果你不想花钱,可以通过每天登陆、签到或邀请注册等方式免费获得家园币。
weinxin
官方微信公众号
扫一扫关注微信公众号,如果你觉得本站帮到了你,请通过下面的赏字按钮捐赠本站,谢谢!