文章总结: 本文介绍Tigress和OLLVM两种C代码混淆工具的实际测试效果,通过HelloWorld示例展示Tigress的虚拟化和字符串混淆功能以及OLLVM的控制流平坦与虚假控制流等技术。测试表明OLLVM生成的混淆代码复杂度更高,达到10万行,两个工具均能显著增加逆向分析难度。文章提供完整的命令参数,适合安全研究和渗透测试场景使用。 综合评分: 71 文章分类: 逆向分析,安全工具,红队,免杀,实战经验
Tigress和OLLVM混淆c代码
原创
陆安予 陆安予
白帽子安全笔记2.0
2026年3月26日 11:55 江苏
代码混淆是必须要掌握的技能,看下2个知名混淆工具的效果。
一、Tigress[1]
之前在已经见识过Nuitka的强大之处,类似的它也是源对源,但这是C对C。先用最简单的代码测试:
# tigress --Environment=x86_64:Linux:gcc:4.6 --Transform=Virtualize --Functions=main --out=obf_hello.c hello.c
# gcc -s obf_hello.c -o obf_hello.exe
#include <stdio.h>
int main() {
printf("Hello, World!\n");
return 0;
}
程序丢到DIE中,发现字符串未混淆,加入字符串混淆参数。
PS C:\Users\user5\Desktop> tigress --Environment=x86_64:Linux:gcc:4.6 --Transform=InitOpaque --Functions=main --Transform=EncodeLiterals --Functions=/./ --Transform=Virtualize --Functions=main --out=obf_hello.c hello.c
<<Tigress.CIL-WARNING>> C:/Strawberry/c/x86_64-w64-mingw32/include/stdlib.h:387: The name _abs64 is used for two distinct globals
<<Tigress.CIL-WARNING>> :-1: The name __debugbreak is used for two distinct globals
<<Tigress.CIL-WARNING>> :-1: The name __debugbreak is used for two distinct globals
PS C:\Users\user5\Desktop>
程序丢到IDA中,然后把结果丢到AI分析,总结如下:
obf_hello.exe 是一个使用字节码解释器进行强控制流混淆的 “Hello, World!” 程序。 它通过将正常的程序逻辑(一个简单的 printf)编码为自定义指令集,并在运行时通过一个虚拟机解释执行,极大地增加了逆向分析的难度。同时,它还结合了 TLS 回调、异常处理和 PEB 检查等反调试技术来阻碍动态分析。
二、OLLVM
开启全部参数混淆,控制流平坦虚假控制流等。
# clang-cl .\hello.c -mllvm -fla -mllvm -bcf -mllvm -bcf_prob=80 -mllvm -bcf_loop=3 -mllvm -sobf -mllvm -icall -mllvm -ibr -mllvm -igv -mllvm -sub -mllvm -sub_loop=3 -mllvm -split -mllvm -split_num=5
[Soule] registerPipelineStartEPCallback
[Soule] run.PipelineStartEPCallback
[Soule] force.run.StringEncryptionPass
[Soule] force.run.IndirectBranchPass
[Soule] force.run.IndirectGlobalVariablePass
这个结果已经相当复杂了,10万行,比Tigress多出10倍,AI分析总结如下:
这个可执行文件并非一个普通的程序。它使用了一系列高级的代码混淆技术来隐藏其真实意图。其核心功能是: 在运行时动态解密一段内嵌的、加密的数据。 将解密后的数据作为代码执行。 最终,经过一系列复杂的计算和跳转,程序会返回一个固定的值 0x4D06。 这个程序可能是: 一个恶意软件的加载器,用于在内存中释放并执行一个更复杂的恶意程序(Shellcode)。 一个软件保护机制,用于防止逆向工程,只有成功通过所有混淆检查后才能执行真正的功能。 0x4D06 这个返回值很可能是“成功”或“验证通过”的标志,用于向调用者表明解密和加载过程已经完成。 本回答由 AI 生成,内容仅供参考,请仔细甄别。
三、免责声明
本文涉及方案仅限合法授权的安全研究、渗透测试用途,使用者须确保符合《网络安全法》及相关法规。具体条款如下:
- • 仅可用于已获得书面授权的目标系统测试;
- • 遵守法律法规,不得用于侵犯他人隐私或数据窃取;
本人不承担因用户滥用本软件导致的任何后果。使用即视为同意并接受上述条款。
推荐阅读
- • Lua作为攻击载体的技术分析
- • [更新]红队加载器LoaderV5
- • [更新]红队加载器LoaderV4
- • [更新]红队加载器LoaderV3
- • 攻防必备,DLL代理自动化生成
- • 攻防必备,DLL侧载(白加黑)自动化生成
- • 采用黑白名单匹配进行反沙箱
- • [0day]新挖掘到一套高级LNK快捷方式
- • DLL侧载和DLL代理
引用链接
[1] Tigress: https://tigress.wtf/
免责声明:
本文所载程序、技术方法仅面向合法合规的安全研究与教学场景,旨在提升网络安全防护能力,具有明确的技术研究属性。
任何单位或个人未经授权,将本文内容用于攻击、破坏等非法用途的,由此引发的全部法律责任、民事赔偿及连带责任,均由行为人独立承担,本站不承担任何连带责任。
本站内容均为技术交流与知识分享目的发布,若存在版权侵权或其他异议,请通过邮件联系处理,具体联系方式可点击页面上方的联系我。
本文转载自:白帽子安全笔记2.0 陆安予 陆安予《Tigress和OLLVM混淆c代码》
版权声明
本站仅做备份收录,仅供研究与教学参考之用。
读者将信息用于其他用途的,全部法律及连带责任由读者自行承担,本站不承担任何责任。









评论