Tigress和OLLVM混淆c代码

admin 2026-03-30 00:07:40 网络安全文章 来源:ZONE.CI 全球网 0 阅读模式

文章总结: 本文介绍Tigress和OLLVM两种C代码混淆工具的实际测试效果,通过HelloWorld示例展示Tigress的虚拟化和字符串混淆功能以及OLLVM的控制流平坦与虚假控制流等技术。测试表明OLLVM生成的混淆代码复杂度更高,达到10万行,两个工具均能显著增加逆向分析难度。文章提供完整的命令参数,适合安全研究和渗透测试场景使用。 综合评分: 71 文章分类: 逆向分析,安全工具,红队,免杀,实战经验


cover_image

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&nbsp;<stdio.h>
int main() {
&nbsp; &nbsp; printf("Hello, World!\n");
&nbsp; &nbsp; 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代码》

xss绕过 网络安全文章

xss绕过

文章总结: 本文展示了一个XSS绕过案例,通过Unicode编码将payload进行转义,成功触发跨站脚本攻击。原始payload为img标签配合onerror
评论:0   参与:  0