ShellcodeLoader

Language: English

Windows 平台的 shellcode 免杀加载器。

功能特点

  1. 自带多种加载方式。32 位自带 13 种加载方式,64 位自带 12 种加载方式。
  2. 支持拓展。如果发现新的利用方式,按指定方式开发模板即可。
  3. shellcode 自动随机加密。使用时间为种子,生成 128 位密钥进行加密,相同 shellcode 出来的加载器的 md5 也不相同。

编译环境和方法

环境: 生成器使用 MFC 实现 UI,生成器和加载器模板均使用 C++ 开发,VS2015 静态编译。

方法: 使用 VS2015 打开项目的解决方案 (.sln),再进行编译即可。你也可以从realse下载成品。

文件组成

本工具由生成器 (shellcodeLoader.exe), 和众多加载器模板组成。不同的加载器模板需放入对应位数的目录。并最终放入生成器同目录下的 DATA 目录。

knownsec/shellcodeloader - 图1

使用方法

  1. 打开生成器
    knownsec/shellcodeloader - 图2

  2. 将想要加载的 shellcode 源文件 (.bin) 拖入该窗口
    knownsec/shellcodeloader - 图3

  3. 勾选加载器的运行位数,并选择你需要的配置选项,是否需要自启动 (自带方式皆为注册表方式自启动),是否需要反沙箱 (64 位下多数杀软不需要该选项即可免杀)

  4. 选择你想要的加载方式,不同位数下的加载方式会有不同,其取决于 DATA 目录下对应的加载器模板。
    knownsec/shellcodeloader - 图4

  5. 点击生成,则会在桌面生成最终的加载器。
    knownsec/shellcodeloader - 图5

拓展方法

  1. 在你新的模板源文件前包含 public.hpp.

  2. 调用 GetShellcodeFromRes() 函数获取 shellcode 信息, 注意 100 不可更改,除非你改了生成器中的资源序号。
    knownsec/shellcodeloader - 图6

    其返回 shellcode 的数据指针,并且,shellcodeSize 就是 shellcode 的大小。多数情况下,这一步是不需要进行更改的,你可以在获取 shellcode 之后做任何事。

  3. 按照你需要的方法加载 shellcode,完成后进行编译 (PS: 请确保你进行了静态编译,且取消了调试符号链接).
    knownsec/shellcodeloader - 图7

  4. 将编译出来的文件进行指定命名, 这里的命名就是 UI 上最终现实的加载方式名称,并将其后缀改为 DAT,放入指 DATA 目录下指定位数的目录中,生成器会自动获取该加载方式。
    knownsec/shellcodeloader - 图8

关于 public.hpp

public.hpp 源码中含有必要的注释。如果你想要其他的方式进行反沙箱, 你可以更改 antisandbox 中的函数;如果你想要其他方式自启动,你可以更改 autostart 函数中的内容。其他函数体的内容多数情况下是不需要更改的。

使用效果

VT 检测效果,均以 CS 原始 shellcode,并不勾选反沙箱为例:

加载方式 未绕过率
CreateThreadpoolWait 加载 3/72
Fiber 加载 4/72
NtTestAlert 加载 5/70
SEH 异常加载 2/72
TLS 回调加载 28/71
动态加载 1/72
动态加载 plus 28/71
系统 call 加载 1/69
APC 注入加载 6/72
Early Brid APC 注入加载 4/72
NtCreateSection 注入加载 2/71
入口点劫持注入加载 3/72
线程劫持注入加载 6/72

在动态加载方式勾选反沙箱之后,结果如下:

knownsec/shellcodeloader - 图9

使用该加载器 bypass 诺顿的智能防火墙出网拦截,并上线:

knownsec/shellcodeloader - 图10

参考