{
  "added_at": "2026-11-02",
  "additional_evidence_urls": [
    "https://github.com/DenuvoSoftwareSolutions/SiMBA/blob/228179970f5906ed763afb33fc8649de2846696e/src/simplify.py",
    "https://github.com/DenuvoSoftwareSolutions/SiMBA/blob/228179970f5906ed763afb33fc8649de2846696e/src/simplify_dataset.py",
    "https://github.com/DenuvoSoftwareSolutions/SiMBA/blob/228179970f5906ed763afb33fc8649de2846696e/src/check_linear_mba.py",
    "https://github.com/DenuvoSoftwareSolutions/SiMBA/tree/228179970f5906ed763afb33fc8649de2846696e/data",
    "https://github.com/DenuvoSoftwareSolutions/SiMBA/blob/228179970f5906ed763afb33fc8649de2846696e/paper/paper.pdf",
    "https://github.com/DenuvoSoftwareSolutions/SiMBA/blob/228179970f5906ed763afb33fc8649de2846696e/LICENSE",
    "https://arxiv.org/abs/2209.06335"
  ],
  "category": "native-analysis",
  "description_en": "Research tool from Denuvo that simplifies linear mixed Boolean-arithmetic (MBA) expressions, which combine bitwise and integer operations and are used in code obfuscation. Like MBA-Blast and MBA-Solver it works algebraically, using the fact that a linear MBA is fully determined by its values on inputs of zeros and ones: it evaluates the expression on every such combination and rewrites it as a linear combination of basic bitwise expressions, without first translating it to 1-bit space. Python scripts simplify single expressions or whole datasets, can check that an input is linear and can prove the result equivalent with Z3.",
  "description_zh": "Denuvo 发布的研究工具，用于化简线性混合布尔-算术（MBA）表达式；这类表达式混合使用位运算和整数运算，常见于代码混淆。它与 MBA-Blast、MBA-Solver 一样采用纯代数方法，依据线性 MBA 完全由其在 0/1 输入上的取值决定这一性质：对所有 0/1 输入组合求值，再把表达式改写为基本位运算表达式的线性组合，而无需先转换到 1 位空间。所附 Python 脚本可化简单个表达式或整个数据集，可检查输入是否为线性 MBA，并可用 Z3 证明结果与原式等价。",
  "entry_url": "https://awesomerea.org/resources/simba-mba-simplifier/",
  "entry_url_zh": "https://awesomerea.org/zh/resources/simba-mba-simplifier/",
  "evidence_url": "https://github.com/DenuvoSoftwareSolutions/SiMBA/blob/228179970f5906ed763afb33fc8649de2846696e/README.md",
  "group": "tools",
  "id": "simba-mba-simplifier",
  "json_url": "https://awesomerea.org/resources/simba-mba-simplifier/record.json",
  "kind": "tool",
  "markdown_url": "https://awesomerea.org/resources/simba-mba-simplifier/index.md",
  "markdown_url_zh": "https://awesomerea.org/zh/resources/simba-mba-simplifier/index.md",
  "name": "SiMBA",
  "name_zh": "SiMBA 线性 MBA 表达式化简工具",
  "record_type": "resource",
  "relationship": "foundation",
  "requirements": [
    "Accompanies Benjamin Reichenwallner and Peter Meerwald-Stadler's paper at the CheckMATE 2022 workshop, co-located with ACM CCS 2022 (DOI 10.1145/3560831.3564256, arXiv 2209.06335); the repository also holds the paper PDF, slides and a talk video. The reviewed main commit dates from 2022-12-12, and there are no releases or packages: the scripts run directly from src/.",
    "Needs Python 3; Z3's Python bindings are required by simplify_dataset.py and by the -z verification option of simplify.py. Input is expression text, or a file with one complex expression and its simpler equivalent per line, built from variables, constants and the operators ~, unary minus, *, +, -, &, ^ and |; the tool has no disassembler or decompiler integration. Output constants depend on the bit width, 64 by default and set with -b.",
    "Only linear MBAs are handled: the optional -l check rejects nonlinear input such as products of variables, and the README warns that operator precedence follows Python, so parentheses are needed. Result refinement through lookup tables of bitwise expressions covers up to three variables; expressions with more variables keep the generic linear-combination form.",
    "For reproducing part of the paper's experiments, data/ holds generated sets of 1,000 equivalent linear MBAs per target function with 2 to 4 variables, plus 5- and 6-variable sets for x+y; the README also mentions 7 variables, which are not in the tree. The datasets assume 64 bits, and simplify_dataset.py reports how many results Z3 verified or matched exactly and the average runtime. There is no test suite or CI.",
    "GPL-3.0, copyright 2022 Denuvo GmbH."
  ],
  "requirements_zh": [
    "配套 Benjamin Reichenwallner 与 Peter Meerwald-Stadler 在 CheckMATE 2022 研讨会（与 ACM CCS 2022 同期举办）发表的论文（DOI 10.1145/3560831.3564256，arXiv 2209.06335）；仓库还收录论文 PDF、幻灯片和演讲录像。所审阅的 main 提交日期为 2022-12-12，没有发布版或软件包，脚本直接在 src/ 下运行。",
    "需要 Python 3；simplify_dataset.py 以及 simplify.py 的 -z 验证选项需要 Z3 的 Python 绑定。输入为表达式文本，或每行包含一个复杂表达式及其较简等价式的文件，可使用变量、常量以及 ~、一元负号、*、+、-、&、^ 和 | 运算符；工具不集成反汇编器或反编译器。输出常量取决于位宽，默认 64 位，可用 -b 设置。",
    "只处理线性 MBA：可选的 -l 检查会拒绝变量相乘等非线性输入；README 提醒运算符优先级遵循 Python 规则，必要时须加括号。借助位运算表达式查找表细化结果的步骤只适用于至多三个变量；变量更多时保留通用的线性组合形式。",
    "为复现论文的部分实验，data/ 提供生成的数据集：每个目标函数各有 1,000 个含 2 至 4 个变量的等价线性 MBA，x+y 另有 5 个和 6 个变量的数据集；README 还提到 7 个变量的数据集，但仓库中没有。这些数据集以 64 位为前提；simplify_dataset.py 会报告经 Z3 验证或完全一致的结果数量及平均耗时。仓库没有测试套件或 CI。",
    "采用 GPL-3.0 许可，版权归 Denuvo GmbH（2022）。"
  ],
  "targets": [
    "binary"
  ],
  "url": "https://github.com/DenuvoSoftwareSolutions/SiMBA",
  "verification": "source-reviewed",
  "verified_at": "2026-10-20"
}
