Skip to content
KitploitKITPLOIT
ツールブログ
提出
ツールブログ
提出

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

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

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

ツールディレクトリ

カテゴリ

すべてのカテゴリを見る
Loading categories
xyntia — Xyntia, the black-box deobfuscator | Kitploit
ツール/GitHubGitHub/binsec/xyntia
Code AnalysisDynamic Code Analysis (DAST)Reverse EngineeringBinary Analysis
GitHubbinsec/xyntia

xyntia

Xyntia, the black-box deobfuscator

リポジトリを見る
9638ヶ月前Kitploit レビュー済み

人気

すべて見る →

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

すべてのツールを探索

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

すべてのツールを見る →
共有

目次

  1. インストール
  2. 使用方法
    1. サンプリングファイルからの関数合成
    2. バイナリからの関数合成
    3. 文法の略称
    4. ヒューリスティックの略称
    5. 推論規則
    6. SyGUS問題の生成
  3. 実験
  4. 実行トレースからの全ブロックの合成
  5. 参考文献

インストール

表示

システム要件

Debian系システムでは、次のコマンドを実行してください:

root@kitploit:~
sudo apt install libgmp3-dev gcc-multilib gdb python3 python3-pip python3-venv openjdk-17-jdk libgmp-dev pkg-config opam

また、Ghidra をインストールし、Ghidraのインストールディレクトリを指定してGHIDRA環境変数を設定する必要があります。

root@kitploit:~
export GHIDRA=<ghidra-directory>

インストール

xyntiaをインストールする最も簡単な方法は、opamスイッチを作成することです。これにより、xyntiaとその依存関係が自動的にインストールされます:

root@kitploit:~
$ cd <xyntia-directory>
$ opam switch create . 4.14.1 -y # or any version >= 4.14.1
$ eval $(opam env)

使用方法

xyntiaのヘルプは xyntia -help で確認できます。以下では、xyntiaの2つの使用方法について説明します。

サンプリングファイルからの関数合成

表示

サンプリングファイルから関数を合成するには、次のコマンドを実行します:

root@kitploit:~
$ xyntia [-ops <grammar>] [-time <time>] [-heur <heur>] <file.json>

ここで、grammar は探索空間を定義するために使用される文法の略称(下記参照)、heur は使用される探索ヒューリスティックの略称(下記参照)、time は合成の時間予算(秒)、file はサンプリングファイルのパスです。

サンプリングファイルは、Syntiaのランダムサンプリングモジュールによって生成される形式である必要があります。examples/samples/example.json ファイルは、サンプリングファイルの例です。

バイナリからの関数合成

表示

xyntiaにバイナリの出力をサンプリングさせ、それらを合成するには、次のコマンドを使用します:

root@kitploit:~
$ xyntia [-ops <grammar>] [-time <time>] [-heur <heur>] -bin <binary-file> -config <config-file> 

ここで、binary-file は解析対象のバイナリへのパスであり、config-file はどの出力をサンプリングし、どのようにサンプリングするかを指定するスクリプトファイルです。

config-file で使用されるスクリプト言語は、Binsecスクリプト言語 の拡張です。次の新しい宣言と命令が追加されています:

  • sample N [ reg_1, ..., reg_n ]:各出力に対してN個のサンプルを生成することを指定します。対象のレジスタ出力のリストを設定できます。この場合、これらの出力のみがサンプリングされ、それ以外の場合は検出されたすべての出力がサンプリングされます。
  • set domain VAR [MIN, MAX]:VAR入力のサンプリングドメインを指定します。VARはレジスタまたは任意のDBA変数にできますが、メモリセルにはできません。メモリセルのドメインを指定するには、この例 を参照してください。
  • prune constant outputs:サンプリングされた出力のセットから、すべての定数出力(つまり、入力変数を含まない出力)を削除します。
  • set optimal sampling:Xyntiaの論文で説明されているサンプリング戦略を使用します。

例えば、add関数の eax 出力を合成するには、次のコマンドを実行します:

root@kitploit:~
$ cd examples/bin && make && cd -
$ xyntia -bin examples/bin/add -config examples/bin/add.ini

この場合、add.ini ファイルは次のようになります:

文法の略称

表示

ヒューリスティックの略称

表示

推論規則

表示

推論規則はいつ使用すべきか?

要約: 対象の式に定数値が含まれると予想される場合。

詳細: プログラム合成には根本的な限界があります。すなわち、任意の定数値と大きな式の処理です。これらの限界を回避するために、Xyntiaは探索をより適切に導き、候補解を(任意の定数値を含む可能性のある)対象の式へ一段階で高める 推論規則 を備えています。 したがって、対象の式に定数値が含まれる可能性が高い場合は、推論規則を使用してください。

より深く理解するには、私たちの論文 [3] をお読みください:

Augmenting Search-based Program Synthesis with Local Inference Rules to Improve Black-box Deobfuscation, Vidal Attias, Nicolas Bellec, Grégoire Menguy, Sébastien Bardin, Jean-Yves Marion, ACM Conference on Computer and Communications Security 2025

使用方法

推論規則を使用するには、オプション -infrules <val> を設定する必要があります。ここで、<val> は次のいずれかです:

  1. 規則のリスト(r1, r2, ..., rk)。各規則は、以下で説明する特定のケースを処理することを目的としています。

SyGUS問題の生成

表示

他のシンセサイザーとXyntiaを簡単に比較したり、それらを難読化解除タスクに適用したりするために、標準のSyGUS形式で合成問題を抽出する方法を提供しています。これを行うには、-sygus オプションを使用するだけです。

例えば、バイナリコードからSyGUS問題を抽出するには、次のコマンドを実行します:

root@kitploit:~
$ xyntia -bin <binary-file> -config <config-file> -sygus

実験

表示

[1] で紹介されている実験を再現するためのすべてのデータセットとスクリプトを提供しています。特に、Syntia の論文 [2] のB1データセット(共有してくださった Tim Blazytko に感謝します)、私たちのB2データセット、およびブラックボックス難読化解除対策の評価に使用されたデータセットが含まれています。

Pythonの依存関係

インストールを容易にするために、Pythonの依存関係を簡単にインストールできる requirements.txt も提供しています。

Python環境を作成して有効化するには、次のコマンドを実行します(任意):

root@kitploit:~
$ python3 -m venv <name-virtualenv> # create a virtual environment for python3
$ source <name-virtualenv>/bin/activate # active the virtual environment

次に、依存関係をインストールします:

root@kitploit:~
$ pip install -r requirements.txt

実験の実行

[1] で使用されたデータセットは、./datasets ディレクトリにあります。 指定したタイムアウト(例:1秒)でデータセット(例:B2)に対してXyntiaを実行するには、次のコマンドを実行します:

root@kitploit:~
$ python3 ./scripts/bench/bench.py --dataset datasets/b2 --out results --parallel -- xyntia -check -time 1

オプションとその意味は、--help オプションで確認できます。

実行トレースからの全ブロックの合成

表示

また、GhidraまたはGDBでコード実行をトレースし、実行された各コードブロックを抽出してサンプリングおよび合成する ./scripts/utils/all_from_trace.sh も提供しています。 マニュアルは ./scripts/utils/all_from_trace.sh --help で確認でき、次のように実行できます:

root@kitploit:~
$ XYNTIA="xyntia <options>" # the xyntia command to use
$ ./scripts/utils/all_from_trace.sh --outdir <resdir> --all -- binary arg1 arg2 ...

以下に例を示します:

root@kitploit:~
$ cd examples/bin && make && cd -
$ ./scripts/utils/all_from_trace.sh --outdir <resdir> --all -- ./examples/bin/add

参考文献

[1] Menguy, G., Bardin, S., Bonichon, R., & Lima, C. D. S. (2021, November). Search-Based Local Black-Box Deobfuscation: Understand, Improve and Mitigate. In Proceedings of the 2021 ACM SIGSAC Conference on Computer and Communications Security.

[2] Blazytko, T., Contag, M., Aschermann, C., & Holz, T. (2017). Syntia: Synthesizing the semantics of obfuscated code. In 26th USENIX Security Symposium (USENIX Security 17).

[3] Attias, V., Bellec, N., Menguy, G., Bardin, S., Marion, J. (2025, October). Augmenting Search-based Program Synthesis with Local Inference Rules to Improve Black-box Deobfuscation. In Proceedings of the 2025 ACM SIGSAC Conference on Computer and Communications Security.

ツールをダウンロード
root@kitploit:~
$ cat examples/bin/add.ini
starting from <add>

set sample output stdout

explore all

hook <add:last> with 
    sample 100 eax
    halt
end

starting from 命令はリバースウィンドウの開始を指定します。hook 命令はリバースウィンドウの終了を指定します(注:<add:last> は add 関数の最後のバイトを表します。add の最後の命令が ret であり、そのオペコードがわずか1バイト長であるため、これが機能します)。

スクリプトの他の例は、sampler/examples ディレクトリにあります。

シンボリック式を直接サンプリングすることも可能です。例は sampler/examples/expr.ini にあります。サンプリングするには、次のコマンドを使用します:

root@kitploit:~
# The <() is here to replace the binary path. Indeed, in this case we do not need any binary (only an empty file)
xyntia -bin <() -config sampler/examples/expr.ini
文法略称
混合ブール演算(MBA)mba
MBA+Divisionexpr
MBA+Division+Mod+Shiftfull
MBA+Shiftmba_shift
MBA+If then elsemba_ite
ヒューリスティック略称
反復局所探索ils
山登り法hc
ランダムウォークrw
焼きなまし法sa
メトロポリス・ヘイスティングスmh
推論規則式の種類
$\diamond \in { +, *, \oplus, >>u, <<, ror }$$e \diamond c$
maskotf$(e \land c_1) \lor c_2$
affine$(c_1 * e) + c_2$
poly2$(c_1 * e^2) + (c_2 * e) + c_3$

ここで、e は文法からの式であり、c, c1, c2, c3 は任意の定数値です。

  1. mba(+, maskotf, <<, *, ^ と同じ)と all(+, maskotf, <<, >>u, *, ^, ror, poly2, affine と同じ)のいずれかのキーワード。

試してみませんか?

Snapchatアプリの難読化された式の例を提供しています。これにXyntiaを適用するには、次のコマンドを実行します:

root@kitploit:~
$ xyntia -bin samplers/examples/snapchat -config samplers/examples/snapchat.ini -infrules all