Ox00 前言
-
什么是加壳
-
利用特殊的算法,对可执行文件里的资源数据或代码进行压缩加密。添加对应的Stub代码段用于对加密后的文件解密,以及充当PE加载器的角色,对目标程序执行修复重定位**、修复(加密)IAT**等操作。
-
常见的手段有:伪装OEP特征,反反汇编,IAT加密,函数偷取(通常偷取OEP),代码虚拟化等
-
-
手动添加区段的步骤
-
区段头表中添加区段信息
-
文件头表中添加区段个数
-
修改扩展头中镜像大小
-
修改OEP为新的区段RVA
-
填充文件,主要是跳转原OEP的代码
-
Ox10 添加新区段
- 新区段的文件偏移计算方式: 原文件大小(需要经过文件对齐粒度对齐)
- 新区段rva计算方式 : 上一个区段的rva + 上一个区段的大小(内存粒度对齐后的大小)
- 新区段的文件属性 : 可读可写可执行
- 扩展头映像大小的设置 : 新区段的rva + 新区段的大小(不对齐, 文件粒度对齐, 内存粒度对齐的大小均可)
Ox20 移植区段修复重定位
- 重定位项 = 重定位项 - stub.dll加载基址 + 被加壳程序默认加载基址 - stub.dll代码段rva + 被加壳程序新区段rva
Ox30 修复IAT
- 遍历INT , 通过GetProcAddress获取函数地址并填写到IAT.