在当今的二进制安全与逆向工程领域,代码混淆技术层出不穷。其中,MBA(Mixed Boolean-Arithmetic,混合布尔算术) 表达式混淆因其极高的还原难度而备受青睐,常被核心算法保护及 OLLVM(Obfuscator-LLVM)等主流混淆器广泛采用。
简单来说,MBA 混淆通过将简单的算术运算(如 x + y)替换为复杂的位运算组合(如 (x & y) + (x | y) 甚至更复杂的嵌套多项式)。
这种变换在保持数学结果不变的前提下,会导致指令数量爆炸式增长,极大地增加了代码的复杂度和体积,使得人工分析和主流反编译器(如 IDA Pro、Ghidra)难以识别其真实逻辑。
面对这些令人“头秃”的复杂表达式,GAMBA 应运而生。它是一款基于代数重写和 SMT 求解技术的自动化简化工具,能够像剥洋葱一样,将那些冗长晦涩的位运算公式还原为最原始、最直观的算术形式。
与 D-810 的互补关系:
值得一提的是,虽然像 D-810 这样的 IDA 插件在去除 OLLVM 控制流平坦化等方面表现出色,但在处理高强度的 指令替换(Instruction Substitution) 混淆时,偶尔仍会存在还原不彻底的情况。此时,GAMBA 便能作为强有力的补充工具,对 D-810 遗留的“残渣”表达式进行二次深度简化,实现更完美的去混淆效果。
本文将基于 GAMBA 官方文档,结合最新的工具特性,为你详细拆解其参数用法与实战技巧,助你轻松攻克 OLLVM 混淆难关,并为后续的 OLLVM 文章作铺垫。
项目官网: GitHub - DenuvoSoftwareSolutions/GAMBA
GAMBA 的通用脚本通常为 simplify_general.py ,相比 simplify.py 在处理 Ollvm 的指令替换混淆时效果更好,而 simplify.py 在处理线性 MBA 上效果更好,两个脚本的命令参数大部分相同。其基本的命令行用法如下:
简单理解:
默认值:64 位
指定所有变量和常量在运算时的位宽。MBA 表达式的化简高度依赖于整数的宽度,因为计算机中的算术运算是模运算(Modulo Arithmetic):
场景 A:默认 64 位环境
输出:

场景 B:32 位环境下的负数表示
如果我们想查看 -x 在 32 位下的表现:
输出:

注意: 表达式避免直接以 "-" 开头,会被识别为参数,可以在前面添加一个空格避免这种情况

但如果你结合 -m 1(模约化显示):
输出:

原理解析:在 32 位无符号整数中, -1 = 2^{32} - 1 = 4294967295。
取值:0 (关闭,默认) 或 1 (开启)
调用 SMT 求解器 Z3 对简化前后的表达式进行数学证明级别的等价性验证。如果 GAMBA 简化出错,Z3 会检测到并报错。
输出:

取值:0 (关闭,默认) 或 1 (开启)
控制输出结果中常量的显示格式。将所有常数按模 2^{bit} 转换为无符号形式。
关闭模约化(默认):
输出:

开启模约化:
输出:

原理解析:这对应了十六进制的 0xFFFFFFFF。
取值:一个整数 n,表示测试 n 位的所有输入组合。
通过暴力穷举指定位宽内的所有可能输入值,验证简化结果是否正确。
例如 -v 3 表示遍历所有变量取值从 0 到 2^3-1 (即 0~7),代入原表达式和简化后的表达式进行比对。
由于 x+x 恒等于 2x,验证通过。

**如果简化错误会报错:**verification failed for input [...]
这两个参数都用于验证结果正确性,但侧重点不同:
建议:平时调试用 -v 快速检查;关键还原或发表分析结果前用 -z 兜底。
GAMBA 支持一次性传入多个表达式进行批量简化,大大提高了效率。
基本用法:

批量用法:
系统会依次输出每一个表达式的简化结果:

为了直观展示 GAMBA 的去混淆能力,我们直接使用官方提供的测试用例进行验证。可以在项目的 experiments 目录下找到更多类似的测试代码。
这里我们选取一段极度复杂的 MBA 表达式。这段代码看上去逻辑极其混乱,充斥着大量的异或、或、取反以及嵌套加法,典型地模拟了 OLLVM 中的指令替换(Instruction Substitution)混淆场景。
我们使用 -v 3 参数(对 3 位宽的所有输入进行穷举验证),以确保简化结果的正确性:
GAMBA 在经过短暂的计算和验证后,输出了如下结果:

可以看出,GAMBA 的简化能力非常彻底。它成功地将难以肉眼还原的 MBA 表达式,压缩回了其原始的逻辑形态。
这证明了 GAMBA 在对抗 指令替换 类混淆时具有极高的实用价值。当我们在逆向分析中提取出类似的混淆片段时,可以交给 GAMBA 自动化处理,从而极大地提高分析效率。
usage: GAMBA [-h] [-b BITCOUNT] [-z USEZ3] [-m MODRED] [-v VERIFYBITCOUNT] [exprs ...]
传播安全知识、拓宽行业人脉——看雪讲师团队等你加入!
最后于 2025-12-12 17:32
被xiusi编辑
,原因: