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

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

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

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

ツールディレクトリ

カテゴリ

すべてのカテゴリを見る
Loading categories
dragon-tales — LLVM上に構築されたバイナリ解析ライブラリで、x86、ARM、RISC-Vにわたる機械語の逆アセンブル、リフティング、シンボリック実行を可能にし、CFG復元とZ3求解を備えています。 | Kitploit
ツール/GitHubGitHub/fare9/dragon-tales
静的分析脆弱性分析コード分析リバースエンジニアリングマルウェア分析ユーティリティとフレームワークバイナリ解析バイナリエクスプロイト
GitHubfare9/dragon-tales

dragon-tales

LLVM上に構築されたバイナリ解析ライブラリで、x86、ARM、RISC-Vにわたる機械語の逆アセンブル、リフティング、シンボリック実行を可能にし、CFG復元とZ3求解を備えています。

リポジトリを見る
4410583日前Kitploit レビュー済み

人気

すべて見る →

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

すべてのツールを探索

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

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

dragon-tales

複数のアーキテクチャにわたるマシンコードの逆アセンブル、アセンブル、解析を行うためのバイナリ解析ライブラリ。LLVM 21上に構築されています。

機能:

  • 6つのアーキテクチャにわたる逆アセンブル(線形スイープおよび再帰的走査)とアセンブル
  • CFGおよび関数の復元
  • IGNIL — アーキテクチャ非依存の解析のための軽量中間言語
  • IGNILピープホール簡約器 — ブロックローカルな定数畳み込み、代数的恒等式、デッドTemp除去
  • 後方スライサ — 結合ノードを越えずにIGNIL CFGを通じて値を伝播
  • LLVMLifter — 復元されたFunction、または単一の平坦化されたIGNILブロック(CFG不要)をLLVM IRにリフトアップし、その上で最適化パイプライン(mem2reg/instcombine/GVN/DCE)を適用
  • Z3統合 — スライスされた式をZ3ビットベクタ式に変換し、取り得る具体的な値を列挙、または一意な値を求解
  • シンボリック実行 — レジスタとメモリを具体的またはシンボリックにシードして、IGNILブロックをZ3ビットベクタ上で実行:チェックを通過させる入力を求解し、難読化された式が実際に何を計算するかを証明し、計算されたジャンプ(ジャンプテーブル、VMディスパッチ)を到達可能な具体的アドレスに解決
  • SwitchDetector — スライスされたジャンプターゲットからジャンプテーブル間接分岐パターンを認識し、その具体的なケースターゲットを読み取り
  • FLIRT互換のシグネチャマッチング — .patシグネチャデータベースから既知の関数を識別
  • トレースリフティング — 任意の線形命令列(例:キャプチャされた実行トレース)をCFG/関数/ブロック妥当性解析を完全にバイパスして直接IGNILにリフトアップ
  • バイナリローダ — ELFまたはPE/COFFファイル(またはインメモリのバイト列)を直接LoadedImageにパース:セクションおよびELFのPT_LOADセグメントを仮想アドレス上にR/W/Xパーミッション付きで配置し、エントリポイント、イメージベース、インポート/エクスポートフラグ付きのシンボル、そしてヘッダから自動検出されたアーキテクチャ(指定不要)を提供。loader::disassembleImageはファイルから1回の呼び出しで構築済みのGraphを生成。LLVMのllvm::object上に構築されているため、追加の依存関係は不要
  • disassembler CLI — ELFまたはPEバイナリをロードして逆アセンブル結果をダンプするコマンドラインツール。迅速な検査やスクリプト作成に有用
  • Cシム(dragon_c.h)およびPython API(cffi)が上記の機能セットの大部分をカバー(パターンマッチングDSLテンプレート、アーキテクチャ固有の命令分類ヘルパーなど、一部のC++専用の領域はdocs/cpp_api.mdにその旨が記載されています)

要件

  • LLVM 21(システムにインストールされている必要があります)
  • CMake 3.20以降
  • C++20コンパイラ
  • Python 3とcffi(オプション、Python API用)

対応アーキテクチャ

  • x86(32ビットおよび64ビット)
  • ARM(32ビットおよび64ビット)
  • RISC-V(32ビットおよび64ビット)

ビルド済みリリース

タグ付きリリースでは、プラットフォームごとに自己完結型のSDKアーカイブ (dragon-<version>-{linux-x64,macos-arm64,windows-x64}.{tar.gz,zip})がGitHubの Releasesページで配布されています。LLVMはライブラリに静的リンク されているため、使用にシステムへのLLVMインストールは不要です。Z3も同梱 されています。各アーカイブには以下が含まれます:

lib/      libdragon + libdragon_c (shared) and the bundled Z3 runtime
bin/      the `disassembler` CLI (plus the DLLs on Windows)
include/  the C++ headers (dragon/...) and the C-shim header (dragon/dragon_c.h)
share/dragon/python/dragon.py   the Python API

Python API をバンドルされたライブラリに向けるには、DRAGON_C_LIB=/path/to/lib/libdragon_c.so(適宜 .dylib/.dll)を指定します。

代わりにソースからビルドするには:

ビルド

mkdir build && cd build
cmake ..
cmake --build .

テストを実行するには:

ctest --output-on-failure

x86のセマンティックなラウンドトリップテストのうち、いくつかは高コストです。これらはリフトされたIRをJITコンパイルし、Unicorn上で生のバイト列を大規模なエッジケース入力のクロス積(それぞれ数千回のラウンドトリップ)にわたってエミュレートします。これらには[.][expensive]タグが付いており、デフォルトのctest実行からは除外されるため、実行は高速に保たれます。これらを明示的に実行するには(通常はより強力なマシン上またはCIで)、次のようにします:

./build/bin/dragon_tests "[expensive]"

Windows でのビルド (Visual Studio + vcpkg)

Windows では、CMakeLists.txt 内の依存関係検出にいくつかのヒントが必要です。 これは Linux のパッケージレイアウト向けに書かれているためです。Z3 は LLVM に 同梱された FindZ3.cmake モジュールを通じて検出され、Unicorn は pkg-config を通じて検出されます。どちらの仕組みも vcpkg がどこにインストールするかを 認識しておらず、LLVM はシステムパスではなく LLVM_DIR を介して検出されます。 3 つのヒントを指定すれば、すべて解決します。

前提条件

  • Visual Studio 2022 (またはその Build Tools) と C++ によるデスクトップ開発 ワークロード
  • CMake 3.20+
  • LLVM 21 をどこかに展開済みであること (例: C:\llvm-21。ビルド済みの clang+llvm-*-x86_64-pc-windows-msvc リリースで動作します)
  • vcpkg

1. vcpkg でライブラリをインストールする (x64-windows トリプレット。pkgconf が Unicorn の検出に必要な pkg-config 実行ファイルを提供します):

vcpkg install z3:x64-windows unicorn:x64-windows pkgconf:x64-windows

2. CMakeが必要とする3つのヒント

ヒント目的値の例
LLVM_DIRLLVM 21を特定するC:/llvm-21/lib/cmake/llvm
CMAKE_PREFIX_PATHFindZ3がvcpkgツリーを参照できるようにするC:/vcpkg/installed/x64-windows
PKG_CONFIG_EXECUTABLE + PKG_CONFIG_PATHpkg-config経由でUnicornを検出できるようにする.../tools/pkgconf/pkgconf.exe および .../installed/x64-windows/lib/pkgconfig

3a. 構成とビルド(1コマンド)

$env:PKG_CONFIG_PATH = "C:/vcpkg/installed/x64-windows/lib/pkgconfig"
cmake -S . -B build `
  -DLLVM_DIR=C:/llvm-21/lib/cmake/llvm `
  -DCMAKE_PREFIX_PATH=C:/vcpkg/installed/x64-windows `
  -DPKG_CONFIG_EXECUTABLE=C:/vcpkg/installed/x64-windows/tools/pkgconf/pkgconf.exe `
  -DDRAGON_USE_Z3=ON -DDRAGON_USE_UNICORN=ON
cmake --build build --config Release

A successful configure prints:

-- Found LLVM 21.1.8 at C:/llvm-21/lib/cmake/llvm
-- Found Z3 5.0.0 at C:/vcpkg/installed/x64-windows/lib/libz3.lib
-- Found Unicorn 2.1.4

3b. プリセットを使用する(推奨)

設定を CMakeLists.txt の隣にある CMakeUserPresets.json に一度保存し、 単一のフラグで構成します。このファイルにはマシン固有のパスが含まれるため、 バージョン管理の対象外にしてください(git の無視対象になっています)。

{
  "version": 3,
  "configurePresets": [
    {
      "name": "win-vcpkg",
      "generator": "Visual Studio 17 2022",
      "architecture": "x64",
      "binaryDir": "${sourceDir}/build",
      "cacheVariables": {
        "LLVM_DIR": "C:/llvm-21/lib/cmake/llvm",
        "CMAKE_PREFIX_PATH": "C:/vcpkg/installed/x64-windows",
        "PKG_CONFIG_EXECUTABLE": "C:/vcpkg/installed/x64-windows/tools/pkgconf/pkgconf.exe",
        "DRAGON_USE_Z3": "ON",
        "DRAGON_USE_UNICORN": "ON"
      },
      "environment": {
        "PKG_CONFIG_PATH": "C:/vcpkg/installed/x64-windows/lib/pkgconfig"
      }
    }
  ],
  "buildPresets": [
    { "name": "win-vcpkg", "configurePreset": "win-vcpkg", "configuration": "Release" }
  ]
}
cmake --preset win-vcpkg
cmake --build build --config Release

注意事項

  • パスはお使いのマシンに合わせて調整してください。vcpkg が別の場所にある場合は、それに応じて %VCPKG_ROOT% を設定してください。LLVM を別の場所に展開した場合は、そのツリーの lib/cmake/llvm を指すように LLVM_DIR を設定してください。

  • ここでは vcpkg のツールチェーンファイル(-DCMAKE_TOOLCHAIN_FILE=.../vcpkg.cmake)を渡さないでください。これはパッケージ検索を制限し、vcpkg の外部にある LLVM を CMake が見つけられなくしてしまいます。これはこのプロジェクトにおける通常のセットアップです。

  • Unicorn はオプションです。動作する pkg-config がない場合は単に無効化され、tests/semantic/ のラウンドトリップテストのみがスキップされます。一方、Z3 は DRAGON_USE_Z3=ON の場合は常に必須です。

  • 常に Release 構成でビルドしてください。 ビルド済みの clang+llvm-*-windows-msvc パッケージには Release ライブラリのみが含まれており、これらは動的リリース CRT(/MD)を使用します。Visual Studio ジェネレーターは --config が指定されない場合にデフォルトで Debug(/MDd)になり、Debug のプロジェクトコードを Release の LLVM に対してリンクすると、数百もの LNK2038 ランタイムライブラリ / _ITERATOR_DEBUG_LEVEL の不一致が発生し、最終的に LNK1319 で終わります。すべての cmake --build で --config Release を渡してください(または /MD でもある RelWithDebInfo を使用してください):

    cmake --build build --config Release -j
    

構造

include/        C++ public headers (dragon/)
lib/            C++ implementation
c_shim/         C API (dragon_c.h + libdragon_c.so)
python/         Python API (cffi, wraps the C shim)
tool/           CLI tools (disassembler, opcode_audit)
tests/          Catch2 test suite
docs/           API documentation, examples, and the manual

公開ヘッダーは include/dragon/ 配下にあり、領域ごとにグループ化されています (disassembler/、lifters/、analysis/、loader/、sigs/)。完全なサーフェスについては 以下のAPI ドキュメントを参照してください。

ドキュメント

すべての API レイヤーの完全な例は docs/ にあります:

  • docs/cpp_api.md — C++ API
  • docs/c_api.md — C シム API
  • docs/python_api.md — Python API
  • IGNIL.md — IGNIL の設計と実装ガイド

クラス別ではなくタスク別に整理された実践的なウォークスルーは docs/manual/ にあります — 生のバイト列から IGNIL と LLVM IR を経てシンボリック実行まで。

クイックスタート

C++

#include <dragon/disassembler/Disassembler.hpp>

dragon::Configuration config;
dragon::Disassembler dis(dragon::Architecture::X86_64, config);

auto instructions = dis.disassemble(bytes, base_address);
for (const auto& insn : instructions)
    std::cout << std::hex << insn.address() << "  " << insn.disassembly() << "\n";

Python

import sys
sys.path.insert(0, 'python')
import dragon
ツールをダウンロード