通过上一章对PE结构如此详实的了解,现在是时候做点手脚来干扰一下2B的杀软了:
1PE文件与免杀思路
A移动PE文件头
判断PE文件有效性漏洞:
一般会认为Size Of Optional Header的必定是0xE0
导致有人未必读取它的值以确定实际的大小。
我们通过将其移动到Dos stub中,然后修改被忽略的Size Of Optional Header
B导入表移动免杀
通过修改指向导出表具体项目的ThunkValue并移动这个具体项目。
2PE文件与反启发式扫描
其它非与PE文件相关的启发式扫描请参考第16章“免杀技术前沿”内容。
A最后一个区段为代码段。这会引发“异常的入口点”。会引起启发式扫描引擎的注意。
B可疑的区段头部属性
代码段可写,数据段可执行。。。
蠕虫感染文件只有三种方案:
a增加新的可执行区段
b现在代码段插入恶意代码
c穿插到不同区段,并修改相应区段属性
C可疑的PE选项头的有效尺寸值
D可疑的代码节名称
E多个PE头部
F导入表项存在可疑导入
a无效导入表
b导入方式可疑:对于系统API使用基于序号的导入方式,or使用偏移调用API
c导入函数可疑,导入了完成某个特定恶意行为的API序列或程序内部包含有相关API函数的名称。
应对:使用自己实现的GetProcAddress函数,以便通过散列值等方法寻找并调用相关敏感API。
3隐藏导入表
A异或加密
B导入表单项移除(N种哈)
a对应IAT删掉(会导致其后所有的DLL导入函数失效)
b在启动初期用正确的值填充IAT(需要用到LoadLibrary和GetProcAddress这两个API函数,当然还有其它更复杂的办法不需要导入这两个API函数)
书中给出了浅显的例子和详尽的说明。P168
C重构导入表
D利用HOOK方式打乱其调用等