Ox00 前言

  • 什么是加壳

    • 利用特殊的算法,对可执行文件里的资源数据或代码进行压缩加密。添加对应的Stub代码段用于对加密后的文件解密,以及充当PE加载器的角色,对目标程序执行修复重定位**、修复(加密)IAT**等操作。

    • 常见的手段有:伪装OEP特征,反反汇编,IAT加密,函数偷取(通常偷取OEP),代码虚拟化等

  • 手动添加区段的步骤

    1. 区段头表中添加区段信息

    2. 文件头表中添加区段个数

    3. 修改扩展头中镜像大小

    4. 修改OEP为新的区段RVA

    5. 填充文件,主要是跳转原OEP的代码


Ox10 添加新区段

  • 新区段的文件偏移计算方式:  原文件大小(需要经过文件对齐粒度对齐)
  • 新区段rva计算方式 : 上一个区段的rva + 上一个区段的大小(内存粒度对齐后的大小)
  • 新区段的文件属性 : 可读可写可执行
  • 扩展头映像大小的设置 : 新区段的rva + 新区段的大小(不对齐, 文件粒度对齐, 内存粒度对齐的大小均可)

Ox20 移植区段修复重定位

  • 重定位项 = 重定位项  - stub.dll加载基址 + 被加壳程序默认加载基址  - stub.dll代码段rva  + 被加壳程序新区段rva

Ox30 修复IAT

  • 遍历INT , 通过GetProcAddress获取函数地址并填写到IAT.