加密与混淆
UUID Shellcode
作为一种已成为经典的混淆方式,本质上是将 shellcode 转换成 uuid 数组的形式,然后使用 UuidFromStringA
这一个 win api 去转换再填入指定内存,然后再去执行 shellcode。
demo 涉及的主要 win api 调用:
- 创建空间:
HeapCreate
, HeapAlloc
- 转换:
UuidFromStringA
, 这一步也可以自己手写实现而不调用 api
- 执行:
EnumSystemLocalesA
回调函数
其他的 回调函数 还有:
EnumFontsW
EnumUILanguages
EnumFontFamiliesEx
- …
现状:被 AV 杀穿。
Encrypted Shellcode
使用非明文 shellcode,具体方式的选择就看各自喜欢了,不过尽量选不使用 win api 的加解密实现,可以选择手写算法或用一些第三方提供的纯语言实现。
demo 提供了一个 aes cbc 128 解密,使用 libaes
这一个纯 rust 实现的 aes 加解密 crate:
使用
基本上如果不用 win api 来做加解密操作,稍微套几层,静态 av 是识别不到 shellcode 的,只能结合其他特征来进一步判断。
还有一些其他常用的加密手段:
加载方式
参数化传递
文件读取
远程加载