另一种使用C++的shellcode注入技术,试图通过XOR加密魔法和UUID字符串疯狂来绕过Windows Defender :)。
首先,生成一个二进制格式的payload(可以使用 Havoc、CobaltStrike 或 msfvenom),例如使用 msfvenom,可以这样做(我使用的payload仅用于演示目的,你可以使用任意payload):
msfvenom -p windows/messagebox -f raw -o shellcode.bin
然后使用Python3脚本 bin_to_uuid.py 将shellcode(二进制/原始格式)转换为 UUID 字符串格式:
./bin_to_uuid.py -p shellcode.bin -o uuid.txt
使用Python3脚本 xor_encryptor.py 对 uuid.txt 中的 UUID 字符串进行 xor 加密:
./xor_encryptor.py uuid.txt > xor_crypted_out.txt
复制文件 xor_crypted_out.txt 中的 C风格 数组,并将其粘贴到C++文件中作为 unsigned char 数组,即 unsigned char payload[]{your_output_from_xor_crypted_out.txt}
此shellcode注入技术包括以下后续步骤:
VirtualAlloc 为payload的执行和驻留分配虚拟内存xor 密钥值对payload进行 xor 解密UuidFromStringA 将 UUID 字符串转换为其二进制表示形式,并存储到之前分配的内存中。这用于避免使用可疑的API,如 WriteProcessMemory 或 memcpy。EnumChildWindows 执行之前加载到内存中的payload(第一步中)memcpy 或 WriteProcessMemory 这样的标准函数,这些函数已知会引起AV/EDR的警报,该程序使用名为 UuidFromStringA 的Windows API函数,该函数可用于解码数据并将其写入内存(是不是很棒,朋友们? 请别说“不!” :))。xor 密钥(第85行)修改为你想要的。同时还需要在 ./xor_encryptor.py Python3脚本中修改 KEY 变量。密钥必须匹配!可执行文件名 值(第90行)修改为你的文件名。mingw,但你可以使用任何你喜欢的编译器。:)make


该二进制文件于2022年8月1日使用 antiscan.me 进行扫描。

https://research.nccgroup.com/2021/01/23/rift-analysing-a-lazarus-shellcode-execution-method/