shellcode加载免杀

UUID为主的新型API加载技术

API组合

DDE函数写入内存

  1. DdeInitialize实例化一个DDE
  2. 使用DdeCreateDataHandle函数和DdeGetData可将shellcode写入内存
  3. 加载(回调函数)

    CoTaskMenAlloc申请内存

    申请内存为可读可写
    VirtualProtect改为可读可执行
    避免可读可写可执行敏感区域

    AllocADsMem和ReallocADsMem

MAC免杀

  1. VirtualAlloc分配一个内存
  2. RtlEthernetStringToAddressA将mac值转为二进制写入内存
  3. 执行

    IPV4/V6

  4. RtlIpv4AddressToStringA

  5. RTlIpv6AddressToStringA
  6. inet_pton加载
  7. 回调

    注册表免杀

  8. RegSeValueExA写入shellcode到注册表

  9. VirtualAlloc分配一个内存
  10. RegQueryValueExA读取注册表到内存
  11. 执行
  12. RegDeleteValueA删除注册表中的shellcode

    剪贴板+新型分离免杀

  13. echo fcxxxx | clip

  14. OpenClipboard
  15. GetClipboardData(CF_TEXT)
  16. GlobalLock 读取出来的是字符串
  17. Hexdecode
  18. 写入内存并加载

    技巧类加载

    地狱之门(HellGate)加载

    直接系统调用,从硬盘上读取ntdll
    相似的思路,是Dinvoke框架[Csharp]

Go语言导入表隐藏API和减少体积

LoadLibrary->GetProcAddress->Syscall9

替换传统创建线程执行的shellcode执行流程

比如回调函数之类的API调用内存中的shellcode

隐藏 API Name

使用API Hash -> 随机API Hash

bypass内存加载

VEH异常处理规避内存扫描

windows中主要的异常处理机制:VEH,SEH,C++EH
SEH:结构化异常处理,平时使用的try finally try except
VEH:向量异常处理。一般来说用AddVectoredExceptionHandler去添加一个异常处理函数,可以通过第一个参数决定是否将VEH函数插入到VEH链表头,插入到链表头的函数先执行,如果为1,则会优先执行
C++EH:是C++提供的异常处理方式,执行顺序将排到最后面

在用户模式下发生异常时,异常处理分发函数在内部会先调用遍历VEH记录链表的函数,如果没有找到可以处理异常的注册函数,再开始遍历SEH注册链表

  1. 终止当前程序的执行
  2. 调试器(进程必须被调试,向调试器发送EXCEPTION_DEBUG_EVENT消息)
  3. 执行VEH
  4. 执行SEH
  5. TopLevelEH(进程被调试时候不会被执行)
  6. 执行V E H
  7. 交给调试器(上面的异常都说处理不了,就再次交给调试器)
  8. 调用异常端口通知csrss.exe

V E H的执行顺序要优于SEH

当av扫描进程空间的时候,并不会将所有的内存空间都扫描一遍,否则资源消耗大,只会扫描敏感的内存区域
所谓的敏感区域无非是指可执行的区域,我们可以不断改变这一块内存属性,当应该执行命令或者某些操作的时候,执行的内存属性为可执行,当功能模块进入睡眠的时候则将内存属性改为不可执行

当执行的地址空间为不可执行时候,若强制执行则会返回0xc0000005异常,这个异常没有权限执行,所以通过V E H抓取这个异常,则可根据需求动态的改变内存属性,进而规避内存扫描

MSBuild执行shellcode

可以使用本机的二进制文件msbuild[系统白名单程序]来编译和执行存储在xml中的内嵌csharp代码

利用”小众”语言进行免杀

nim,Vlang,F#,Go
将来可能会出现zig
这一点还是可以持续的,主要是因为新的编程语言可以在不断的发明,而编程语言组成的二进制却一时间让杀软无法分析,只需要懂得新编程语言,windows A P I的调用方式,便可以过静态免杀

加密和混淆

主要利用各种工具

powershell免杀

以内存补丁为主

mimikatz免杀

基本需要从源代码方面进行改动,才能处理
或者国内杀软不注重内存,可以利用PE加载器

反弹shell免杀

重写一个反弹程序

https://github.com/trickster0/UDPlant rust.udp通道,隐蔽和免杀性较好

内存执行

https://github.com/TheWover/donut 可在内存中执行VBScript,JScript,EXE,DLL和DotNet程序 且内存加密