Tigress混淆c文件初探

由于用ollvm编译clang比较耗资源,这里采用Tigress项目来混淆c文件

先在官网下载Tigress:tigress.wtf/tigress-download.html

设置Tigress安装路径,同时将当前目录添加到环境变量

生成混淆的c文件test1_obf.c:./tigress –Seed=0 –Environment=x86_64:Linux:Gcc:7.3 –Transform=Flatten –Functions=main test1.c –out=test1_obf.c

用gcc编译生成二进制文件:gcc -O0 -std=c99 -I. test1_obf.c -o test1_obf

如果生成混淆的c文件遇到rellocarray相关报错,可以在c文件中把头文件<stdlib.h>删除,因为Tigress 的解析器无法处理现代linux发行版中stdlib.h包含的GCC属性,从而导致崩溃

Transform全部参数如下:

  1. 控制流混淆类 (最常用)

这类变换主要针对 IDA Pro 等反编译工具,使程序的流程逻辑变得极其复杂,难以还原逻辑图

  • **Flatten (控制流平坦化)**:这是最经典的方法。将程序的 if-else、for 等结构拉平,放入一个大的 switch 中
  • **Virtualize (代码虚拟化)**:Tigress 的核心技术。将 C 函数转换为自定义指令集(字节码),并在程序里嵌入一个解释器运行这些字节码
  • **AntiBranchAnalysis**:插入大量难以预测的跳转,破坏静态分析工具对条件分支的判断
  1. 数据与算术混淆类

这类变换专门用来对抗“变量跟踪”和“数学逻辑逆向”

  • **EncodeArithmetic**:将简单的 a + b 转换成复杂的算术表达式组合,增加运算的复杂度
  • **EncodeData**:对数据变量进行混淆(如使用不同编码或分拆变量),使内存中的数据呈现乱码状态
  • **EncodeLiterals**:隐藏程序中的常量字符串和数字,防止通过字符串搜索定位关键逻辑
  • **AntiTaintAnalysis / AntiAliasAnalysis**:防止污点分析和别名分析,让自动化的反混淆工具无法追踪变量流向
  1. 环境与完整性防御类

这类变换确保程序只能在预期的环境下运行,且未被篡改

  • **InitCheckEnvironment / CheckEnvironment**:插入检测代码,检查当前运行环境(如是否在调试器下、CPUID 等)
  • **Checksum**:为代码块或数据段生成校验和,如果程序被修改(Patch),程序会崩溃或停止运行
  • **InitOpaque / AddOpaque / UpdateOpaque**:添加“不透明谓词”(总是真或总是假的判断条件),让反汇编器看到不存在的分支
  1. 辅助与初始化类 (必要步骤)
  • **Initialize**:必须先运行这个,初始化混淆环境
  • **CleanUp**:在多次混淆后进行清理,优化代码结构,防止文件无限膨胀
  • **Inline**:将函数内联,改变原始代码的结构
  • **Split**:将一个大函数拆分成多个小函数
  • **Merge**:将多个函数合并成一个,隐藏逻辑边界
  • **RandomFuns**:插入无意义的垃圾代码函数,干扰逆向工程师的注意力
  1. 进阶与特殊技术类
  • **SelfModify (自修改代码)**:程序运行时通过修改自身内存中的指令来实现功能,这是最高级的混淆手段之一,极难调试
  • **Jit / JitDynamic**:运行时生成机器码执行,直接对抗静态反汇编工具
  • **Measure / SoftwareMetrics**:分析并输出代码复杂度数据,用于评估混淆的效果
  • **Ident**:对函数名和变量名进行随机化(伪随机命名)

./tigress –Seed=0 –Environment=x86_64:Linux:Gcc:7.3
–Transform=Initialize
–Transform=Flatten –Functions=main,MD5Transform,MD5Update
–Transform=Virtualize –Functions=main
–Transform=CleanUp
out1.c –out=out1_obf.c

混淆后的流程图

混淆后的伪代码

混淆前的流程图

混淆前的伪代码


Tigress混淆c文件初探
https://j1ya-22.github.io/2026/03/12/tigress混淆c文件初探/
作者
j1ya
发布于
2026年3月12日
许可协议