首页
社区
课程
招聘
[分享]Ollvm 指令替换混淆还原神器:GAMBA 使用指南
发表于: 2025-12-12 17:15 1304

[分享]Ollvm 指令替换混淆还原神器:GAMBA 使用指南

2025-12-12 17:15
1304

在当今的二进制安全与逆向工程领域,代码混淆技术层出不穷。其中,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​ 表示遍历所有变量取值从 02^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编辑 ,原因:
收藏
免费 93
支持
分享
最新回复 (57)
雪    币: 179
活跃值: (1068)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
2
图没了
2025-12-12 17:17
0
雪    币: 2254
活跃值: (536)
能力值: ( LV6,RANK:90 )
在线值:
发帖
回帖
粉丝
3
wolf_lc 图没了

有了现在

最后于 2025-12-12 17:26 被xiusi编辑 ,原因:
2025-12-12 17:19
1
雪    币: 2743
活跃值: (6243)
能力值: ( LV3,RANK:20 )
在线值:
发帖
回帖
粉丝
4
g%ggggg
2025-12-12 20:44
1
雪    币: 347
能力值: ( LV1,RANK:0 )
在线值:
发帖
回帖
粉丝
5
看看隐藏
2025-12-12 20:48
0
雪    币: 10
能力值: ( LV1,RANK:0 )
在线值:
发帖
回帖
粉丝
6
7666
2025-12-12 22:29
0
雪    币: 7
能力值: ( LV1,RANK:0 )
在线值:
发帖
回帖
粉丝
7
感谢分享
2025-12-12 23:06
0
雪    币: 2412
活跃值: (4649)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
8
666
2025-12-12 23:37
0
雪    币: 0
能力值: ( LV1,RANK:0 )
在线值:
发帖
回帖
粉丝
9
1111
2025-12-13 01:35
0
雪    币: 23
能力值: ( LV1,RANK:0 )
在线值:
发帖
回帖
粉丝
10
666
2025-12-13 08:57
0
雪    币: 6650
活跃值: (5611)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
11
谢谢分享   
2025-12-13 09:09
0
雪    币: 200
能力值: ( LV1,RANK:0 )
在线值:
发帖
回帖
粉丝
12
666
2025-12-13 10:28
0
雪    币:
能力值: ( LV1,RANK:0 )
在线值:
发帖
回帖
粉丝
13
2025-12-13 12:12
0
雪    币: 204
能力值: ( LV1,RANK:0 )
在线值:
发帖
回帖
粉丝
14
666
2025-12-13 13:16
0
雪    币: 4978
活跃值: (5039)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
15
666
2025-12-13 13:34
0
雪    币: 160
活跃值: (1536)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
16

666
2025-12-13 16:41
0
雪    币: 0
活跃值: (98)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
17
看看隐藏
6天前
0
雪    币: 6
活跃值: (2194)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
18
牛啊
6天前
0
雪    币: 5599
活跃值: (6452)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
19
嗯 要用数学对抗数学。对方有航母打击群 我们也必须要有
5天前
0
雪    币: 798
能力值: ( LV1,RANK:0 )
在线值:
发帖
回帖
粉丝
20
牛逼呀,谢谢了
5天前
0
雪    币: 71
活跃值: (1748)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
21
666
5天前
0
雪    币: 312
活跃值: (648)
能力值: ( LV2,RANK:15 )
在线值:
发帖
回帖
粉丝
22
看看
5天前
0
雪    币: 104
活跃值: (7074)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
23
tql
5天前
0
雪    币: 169
活跃值: (948)
能力值: ( LV4,RANK:40 )
在线值:
发帖
回帖
粉丝
24
秋落 
  22 楼
看看
5天前
0
雪    币: 293
能力值: ( LV1,RANK:0 )
在线值:
发帖
回帖
粉丝
25
6666666
5天前
0
游客
登录 | 注册 方可回帖
返回