Skip to content
KitploitKITPLOIT
工具漏洞利用博客
Log in
提交
工具漏洞利用博客
提交

黑客、渗透测试和网络安全工具,武装您的安全武器库!

Kitploit 是一个黑客、网络安全和渗透测试工具的目录。发现最新的项目更新,查找漏洞、分析系统、自动化测试并加强你的安全。

订阅源联系隐私© 2026 Kitploit

工具目录

分类

查看所有分类
Loading categories
qsynthesis — 面向汇编指令去混淆的灰盒合成器。 | Kitploit
工具/GitHubGitHub/quarkslab/qsynthesis
静态分析动态分析 (沙盒)漏洞分析代码分析逆向工程实用工具与框架二进制分析论文与研究
GitHubquarkslab/qsynthesis

qsynthesis

面向汇编指令去混淆的灰盒合成器。

查看仓库
1781711年前Kitploit 审核通过

最受欢迎

查看全部 →

发现我们社区最常用的工具。

探索所有工具

浏览我们的工具集合

查看所有工具 →
网站
分享

Qsynthesis

QSynthesis 是一个 Python3 API,用于对位向量表达式执行基于 I/O 的程序合成。它旨在促进代码反混淆。该算法采用灰盒方法,结合了基于黑盒 I/O 的合成和白盒 AST 搜索来合成子表达式 (如果根节点无法合成)。

该算法最初在 BAR 学术研讨会上被描述:

  • QSynth: A Program Synthesis based Approach for Binary Code Deobfuscation (使用的基准测试可在此处获取:here)

该代码已作为以下 Black Hat 演讲的一部分发布:

  • Greybox Program Synthesis: A New Approach to Attack Dataflow Obfuscation

免责声明:此框架是实验性的,仅应用于实验目的。 它主要旨在促进该领域的研究。

文档

安装、示例和 API 文档可在专用文档中找到:Documentation

功能

核心合成基于 Triton 符号引擎,整个框架构建在其之上。它提供以下功能:

  • 位向量表达式的合成
  • 通过 SMT 检查合成表达式语义等价性的能力
  • 合成常量的能力 (如果表达式编码了一个常量)
  • 通过学习机制随时间改进预言机(预计算表)的能力
  • 将合成表达式重新组装回汇编的能力
  • 通过 REST API 提供预言机以方便合成使用的功能
  • 提供合成集成的 IDA 插件

快速开始

安装

为了工作,首先必须安装 Triton:安装文档。 Triton 不会自动安装到 virtualenv 中,请将其复制到你的 venv 中,或在配置 venv 时使用 --system-site-packages。

然后:

$ git clone https://github.com/quarkslab/qsynthesis.git
$ cd qsynthesis
$ pip3 install '.[all]'

[all] 将安装所有依赖项 (有关轻量安装,请参阅文档)。

表生成

合成算法需要生成从语法 (一组变量和运算符) 派生的预言机表。Qsynthesis 安装提供了实用程序 qsynthesis-table-manager,用于操作表。以下命令生成一个包含 3 个 64 位变量、5 个运算符、使用 16 个输入向量的表。我们将生成限制为 500 万条条目。

$ qsynthesis-table-manager generate -bs 64 --var-num 3 --input-num 16 --random-level 5 --ops AND,NEG,MUL,XOR,NOT --watchdog 80 --limit 5000000 my_oracle_table
Generate Table
Watchdog value: 80.0
Depth 2 (size:3) (Time:0m0.23120s)
Depth 3 (size:21) (Time:0m0.23198s)
Depth 4 (size:574) (Time:0m0.26068s)
Depth 5 (size:400858) (Time:0m21.23231s)
Threshold reached, generation interrupted
Stop required
Depth 5 (size:5000002) (Time:4m52.56009s) [RAM:9.52Gb]

注意:生成过程消耗 RAM,--watchdog 允许设置一个 RAM 百分比,超过该百分比时生成将被中断。

合成位向量表达式

然后我们可以尝试用以下代码简化一个看似混淆的表达式:

from qsynthesis import SimpleSymExec, TopDownSynthesizer, InputOutputOracleLevelDB

blob = b'UH\x89\xe5H\x89}\xf8H\x89u\xf0H\x89U\xe8H\x89M\xe0L\x89E\xd8H\x8bE' \
       b'\xe0H\xf7\xd0H\x0bE\xf8H\x89\xc2H\x8bE\xe0H\x01\xd0H\x8dH\x01H\x8b' \
       b'E\xf8H+E\xe8H\x8bU\xe8H\xf7\xd2H\x0bU\xf8H\x01\xd2H)\xd0H\x83\xe8' \
       b'\x02H!\xc1H\x8bE\xe0H\xf7\xd0H\x0bE\xf8H\x89\xc2H\x8bE\xe0H\x01\xd0' \
       b'H\x8dp\x01H\x8bE\xf8H+E\xe8H\x8bU\xe8H\xf7\xd2H\x0bU\xf8H\x01\xd2' \
       b'H)\xd0H\x83\xe8\x02H\t\xf0H)\xc1H\x89\xc8H\x83\xe8\x01]\xc3'

# Perform symbolic execution of the instructions
symexec = SimpleSymExec("x86_64")
symexec.initialize_register('rip', 0x40B160)  # arbitrary address
symexec.initialize_register('rsp', 0x800000)  # arbitrary stack
symexec.execute_blob(blob, 0x40B160)
rax = symexec.get_register_ast("rax")  # retrieve rax register expressions

# Load lookup tables
ltm = InputOutputOracleLevelDB.load("my_oracle_table")

# Perform Synthesis of the expression
synthesizer = TopDownSynthesizer(ltm)
synt_rax, simp = synthesizer.synthesize(rax)

print(f"expression: {rax.pp_str}")
print(f"synthesized expression: {synt_rax.pp_str} [{simp}]")

限制

  • 合成准确性受限于预计算表的穷尽程度
  • 表生成受限于 RAM 消耗
  • 重新组装不能涉及内存变量,目标必须是寄存器,并且架构取决于 llvmlite (因此主要是 x86_64)
  • 代码引用了基于跟踪的合成,但该功能已禁用 (因为底层框架尚未开源)

作者

  • Robin David (@RobinDavid), Quarkslab

贡献者

非常感谢对本研究做出贡献的人员:

  • Luigi Coniglio
  • Jonathan Salwan
下载工具