[从零开始的免杀生活]02.逃出生天
0x00.序
上篇说到 如何编写一个基础的加密shellcode Loader ,但是当当一个基础的加密的loader是无法绕过强大的杀毒特征库的,这篇我们来讲讲特征码 的查找与如何对特征码进行混淆
0x01.回顾
将上篇提到的代码写入VS中编译出来 一复制到虚拟机环境中就被火绒报毒了
上篇代码
|
|
将上篇提到的代码写入VS中编译出来 一复制到虚拟机环境中就被火绒报毒了
那么肯定是其中的某个地方被标记为特征码了,我们只需要找出来并进行修改就可以绕过杀毒的拦截。 那么,怎么找到特征码呢。
MyCCL
该款工具也是历史的眼泪了,在10年的时候这款工具在各个已经被Ban的 “免杀” 论坛 流行着,该工具利用了杀毒对单一特征码的检测,对PE文件进行分块处理,我们只需要将分块的文件查杀,然后找到被杀毒杀的那一个区块然后再进行定位就行。
二分查找
该方法适用于代码少的情况下,注释一半一半的的代码然后进行编译,编译后进行查杀,如果这一半没被查杀就对另外一半进行同样的步骤
当然以上方法都是在 代码段 (.text) 进行的,如果杀软是对资源段进行了"启发式"扫描 则就算只有一个空的main
函数还是会造成报毒 (某60) ,当然是有办法解决的。
0x02.实践
基于以上的方法,在这笔者选择使用 二分查找
相对于第一个历史遗留的方法,二分查找
更适合 现代的内存加载ShellCode
首先注释掉所有的代码 来判断 代码段(.text)
内是否有特征码
编译 查杀
发现未找到病毒(果然火绒不像360的启发式一样杀资源XD)
然后继续 进行二分注释,注释掉下面一部分
然后再进行编译查杀,后续就是重复以上步骤了
最终我们发现注释掉RtlMoveMemory(scAddr, encShellcode, scLen);
这个函数时就不杀了 说明这个函数即为特征码 我们可以将其用其他函数进行代替,也可以利用添加花指令,或者是添加SEH异常。
这里笔者以Seh异常进行修改,如果不懂SEH异常也没关系
|
|
这样处理后再进行编译 查杀
完美处理掉特征
双击运行测试
成功上线
0x03.总结
以特征码的形式进行的查杀可以很快的封锁掉已知的病毒,但只要稍做修改就能轻松绕过,不过这也是对抗的一环,现在的家用杀软以及EDR不局限于传统的特征码查杀,还有基于AI的启发式查杀,能够快速的定位以及感知到威胁。