Skip to content
KitploitKITPLOIT
ツールエクスプロイトブログ
Log in
提出
ツールエクスプロイトブログ
提出

ハッキング、侵入テスト、サイバーセキュリティツールをあなたのセキュリティアーセナルに!

Kitploitはハッキング、サイバーセキュリティ、ペネトレーションテストのツールディレクトリです。最新のプロジェクトアップデートを見つけて、脆弱性の発見、システム分析、テストの自動化、セキュリティの強化を行いましょう。

フィードお問い合わせプライバシー© 2026 Kitploit

ツールディレクトリ

カテゴリ

すべてのカテゴリを見る
Loading categories
qsynthesis — グレーボックスシンセサイザーは、アセンブリ命令の難読化解除に特化しています。 | Kitploit
ツール/GitHubGitHub/quarkslab/qsynthesis
静的分析動的分析 (サンドボックス)脆弱性分析コード分析リバースエンジニアリングユーティリティとフレームワークバイナリ解析論文と研究
GitHubquarkslab/qsynthesis

qsynthesis

グレーボックスシンセサイザーは、アセンブリ命令の難読化解除に特化しています。

リポジトリを見る
1781711年前Kitploit レビュー済み

人気

すべて見る →

コミュニティで最も使われているツールを見つけましょう。

すべてのツールを探索

ツールコレクションを閲覧

すべてのツールを見る →
ウェブサイト
共有

Qsynthesis

QSynthesisは、ビットベクトル式のI/Oベースのプログラム合成を行うためのPython3 APIです。コードの難読化解除を容易にすることを目的としています。このアルゴリズムは、ブラックボックスI/Oベースの合成と、部分式を合成するためのホワイトボックスAST検索を組み合わせたグレーボックスアプローチです (ルートノードが合成できない場合)。

このアルゴリズムは、もともとBAR学術ワークショップで発表されました:

  • QSynth: A Program Synthesis based Approach for Binary Code Deobfuscation (使用されたベンチマークはこちらで入手可能)

このコードは、以下のBlack Hat講演の一部として公開されました:

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

免責事項: このフレームワークは実験的なものであり、実験目的でのみ使用されるべきです。 主にこの分野の研究を促進することを目的としています。

ドキュメント

インストール、例、およびAPIドキュメントは専用のドキュメントで入手できます: Documentation

機能

コアとなる合成はTritonシンボリックエンジンに基づいており、フレームワーク全体がその上に構築されています。以下の機能を提供します:

  • ビットベクトル式の合成
  • SMTを通じて合成された式の意味的等価性を検証する機能
  • 定数を合成する機能 (式が定数をエンコードしている場合)
  • 学習メカニズムを通じてオラクル(事前計算されたテーブル)を経時的に改善する機能
  • 合成された式をアセンブリに再アセンブルする機能
  • 合成の使用を容易にするためにREST APIを通じてオラクルを提供する機能
  • 合成の統合を提供するIDAプラグイン

クイックスタート

インストール

動作させるには、まずTritonをインストールする必要があります: install documentation。 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 が提供されます。以下のコマンドは、64ビットの3つの変数、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
ツールをダウンロード