目录
整体原理分析
思路层 ← 免杀思路分析
先搞清楚:检测方到底在看什么
静态层 ←shellcode编码处理
静态层 —— 多字节 XOR:让文件里没有"载荷"这个东西
取址层 ←Ntapi绕过kernel32
取址层 —— 手写 PE 解析:让导入表里没有可疑名字
弹药层 ←Loader注入
内存层 —— RW → RX 两步式:永远不出现 RWX
执行层 ←Ntapi绕过kernel32
NtCreateThreadEx:绕开 kernel32 的起线程入口
四层对策的合体效果
剩余暴露面(哪些地方还是躲不掉)
源码实现分析
总体源码分析
细节分析
不引 winternl.h,手写四个函数原型
密文载荷,以及它的来源
ManualGetProcAddress —— 手写 PE 导出表解析
两个容易踩的坑
顺带聊聊 strcmp
主流程解析 6 大部分
取址层:四个函数,一次解析
第一步:先要一块"只是数据"的内存
写入密文
明文只存在于执行前一刻
第二步:翻转
起线程
思路复用与扩张
总结
整体原理分析
思路层 ← 免杀思路分析
如果把"免杀"拆开看,它其实只有一句话:
让"代码长什么样"与"代码干了什么"之间的对应关系断掉。
杀软和 EDR 之所以能抓到恶意程序,靠的从来不是"读心术",而是观测点。程序从落盘到跑起来,中间会经过一连串可以被观测的事件:文件写到磁盘