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

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

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

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

ツールディレクトリ

カテゴリ

すべてのカテゴリを見る
Loading categories
Ponce — IDA 2016 プラグインコンテスト優勝!シンボリック実行はワンクリックで可能! | Kitploit
ツール/GitHubGitHub/illera88/ponce
リバースエンジニアリングデバッガマルウェア分析CTFバイナリ解析
GitHubillera88/ponce

Ponce

IDA 2016 プラグインコンテスト優勝!シンボリック実行はワンクリックで可能!

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

人気

すべて見る →

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

すべてのツールを探索

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

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

Build for Windows Build for OSX Build for Linux

Ponce

Ponce(発音は [ 'poN θe ] pon-they)は、IDA Pro のプラグインで、ユーザーがバイナリに対してテイント解析やシンボリック実行を簡単かつ直感的に行えるようにするものです。Ponce を使えば、最先端のシンボリック実行の力をワンクリックで手に入れることができます。完全に C/C++ で記述されています。

なぜ?

シンボリック実行はセキュリティコミュニティにおいて新しい概念ではありません。何年も前から存在していましたが、2015年頃になってようやく Triton や Angr のようなオープンソースプロジェクトがこのニーズに応えるために作成されました。これらのプロジェクトが利用可能であっても、エンドユーザーはしばしば特定のユースケースを自ら実装する必要があります。

私たちはこのニーズに応えるため、リバースエンジニアが最も使用する逆アセンブラ/デバッガである IDA にシンボリック実行とテイント解析を実装したプラグイン、Ponce を作成しました。

インストール

Ponce は x86 および x64 の両方のバイナリで動作し、IDA バージョン 7.0 以降に対応しています。インストールは、最新のビルド から適切なファイルを IDA インストールディレクトリの plugins\ フォルダにコピーするだけです。

互換性の問題を避けるため、お使いの IDA バージョンに合わせてコンパイルされた Ponce バイナリを使用してください。

対応OS

Ponce は Windows、Linux、OSX でネイティブに動作します。

使用例

  • エクスプロイト開発:Ponce は、エクスプロイト開発者がメモリのどの部分とどのレジスタを制御できるかを容易に確認できるようにし、ROP ガジェットとして利用できるアドレスも特定できるため、より効率的にエクスプロイトを作成するのに役立ちます。
  • マルウェア解析:Ponce の別の用途はマルウェアコードに関するものです。特定のマルウェアファミリがサポートするコマンドを解析するには、既知のコマンドをシンボル化し、コマンドがチェックされているすべての条件を否定することで容易に判断できます。
  • プロトコルリバーシング:Ponce の最も興味深い用途の一つは、制御されたユーザー入力に対する必要なマジックナンバー、ヘッダー、さらにはプロトコル全体を認識できることです。例えば、Ponce は特定のコマンドラインバイナリが受け付けるすべての引数をリストアップしたり、特定のファイルパーサーに必要なファイル形式を抽出するのに役立ちます。
  • CTF:Ponce は CTF 中にバイナリのリバースエンジニアリングを高速化します。Ponce は IDA に完全に統合されているため、セットアップのタイミングを気にする必要はありません。すぐに使用できます!

プラグインは自動的に実行され、初回実行時に初期設定を案内します。設定は設定ファイルに保存されるため、設定ウィンドウについて再度心配する必要はありません。

使用モード

  • テイントエンジン:このエンジンは、バイナリ実行の各ステップにおいて、メモリとレジスタのどの部分がユーザー入力によって制御可能かを判別するために使用されます。
  • シンボリックエンジン:このエンジンは、バイナリの実行パス上の各ステップで、レジスタとメモリの一部のシンボリック状態を維持します。

例

条件の否定と注入

次の gif では、自動テイントの使用と、条件を否定してデバッグ中にメモリに注入する方法を示しています。

  • シンボリックエンジンを選択し、argv をシンボル化するオプションを設定します。
  • クラックミーを突破するために満たす必要がある条件を特定します。
  • 入力の各バイトがキーとチェックされるたびに、否定した解を注入します。
  • 最終的にメモリに注入されたキー elite を取得し、Win コードに到達します。

クラックミーのソースコードはこちらにあります。

crackmexor_negate_and_inject

テイントエンジンを使用したユーザー制御入力の追跡

この例では、cmake でのテイントエンジンの使用を示しています。以下を行っています。

  • cmake にファイルを引数として渡し、解析させます。
  • テイントエンジンを使用することを選択します。
  • fread() がファイルから読み取るバッファをテイントします。
  • デバッガ制御下で実行を再開し、テイント入力がどこに移動するかを確認します。
  • Ponce はテイントされた関数の名前を変更します。これらは、単に実行された関数ではなく、ユーザーが何らかの影響を与える関数です。

cmake_tainting_fread

否定、注入、復元の使用

次の例では、スナップショットエンジンを使用しています。

  • ファイルを引数として渡します。
  • シンボリックエンジンを使用することを選択します。
  • fread() がファイルから読み取るバッファをテイントします。
  • ファイルから読み取ったバッファを解析する関数でスナップショットを作成します。
  • 条件が評価されるときにそれを否定し、解をメモリに注入して、その状態でスナップショットを復元します。
  • 解は "valid" となるため、既存の条件を満たします。

fread_test_negate_restore_inject サンプルソースコードはこちらにあります。

使用方法

このセクションでは、さまざまな Ponce オプションとキーボードショートカットをリストします。

  • 設定およびテイント/シンボリックウィンドウへのアクセス:Edit > Ponce > Show Config(Ctl+Shift+P および Ctl+Alt+T)

2016-09-15 11_39_08-configuracion

  • Ponce トレースの有効/無効(Ctl+Shift+E)

2016-09-15 11_31_34-

  • レジスタのシンボル化/テイント(Ctl+Shift+R)

2016-09-15 11_32_32-

  • メモリのシンボル化/テイント。IDA View または Hex View から行えます(Ctl+Shift+M)

2016-09-15 11_32_52-ida - testproject idb testproject exe c__users_default default-pc_documents_vi2016-09-15 11_33_10-taint _ symbolize memory range

2016-09-15 12_09_11-inicio

  • 式の解決(Ctl+Shift+S)

2016-09-15 11_35_11-

  • 否定と注入(Ctl+Shift+N)

2016-09-15 11_34_44-

  • 否定、注入、スナップショット復元(Ctl+Shift+I)

2016-09-15 11_47_19-

  • 実行スナップショットの作成(Ctl+Shift+C)

2016-09-15 11_37_40-

  • 実行スナップショットの復元(Ctl+Shift+S)

2016-09-15 11_38_10-

  • 実行スナップショットの削除(Ctl+Shift+D)

2016-09-15 11_38_23-

  • ネイティブ実行(Ctl+Shift+F9)

2016-09-15 12_07_10-

Triton

Ponce は Triton フレームワーク に依存して、セマンティクス、テイント解析、シンボリック実行を提供しています。Triton は Quarkslab がスポンサーとなり、主に Jonathan Salwan によってメンテナンスされている素晴らしいオープンソースプロジェクトで、豊富なライブラリを備えています。Jonathan の Triton への取り組みに感謝し、支持します。最高です!:)

ビルド

Ponce v0.3 以降、ビルドコンパイルプロセスを CMake を使用するように変更しました。これにより、Linux、Windows、OSX での設定とビルドの方法が統一されました。現在では、シンボリックまたはテイント命令に関するフィードバックを疑似コード上で提供することがサポートされています。この機能を有効にするには、hexrays.hpp を IDA SDK のインクルードフォルダに追加する必要があります。hexrays.hpp は IDA インストールパスの plugins/hexrays_sdk/ にあります。hex-rays デコンパイラを購入していない場合でも、-DBUILD_HEXRAYS_SUPPORT=OFF を使用して Ponce をビルドできます。CI 環境として Github Actions を使用しています。ビルドプロセスを理解したい場合は、アクションファイル を確認してください。

FAQ

なぜ Ponce という名前なのですか?

フアン・ポンセ・デ・レオン(1474年 - 1521年7月)は、スペインの探検家でありコンキスタドールでした。彼はアメリカ合衆国のフロリダを発見しました。この IDA プラグインは、バイナリ内のさまざまなパスを発見、探索、そして征服するのに役立ちます。

Ponce は Windows、OS X、Linux のバイナリの解析に使用できますか?

はい。Windows 用の IDA で Ponce をネイティブに使用するか、リモートで Linux または OS X のマシンにアタッチして使用できます。次のバージョンの Ponce では、Linux および OS X 用の IDA バージョンで Ponce をネイティブサポートする予定です。

Ponce は毎秒何命令を処理できますか?

私たちのテストでは、毎秒 3000 命令を処理できました。IDA が提供する PIN トレーサーを使用して速度を向上させる予定です。

何かが動作しません!

問題 を報告してください。できるだけ早く解決します ;)

あなたのプロジェクトが大好きです!協力できますか?

もちろん!プルリクエストを送って、未解決の問題に取り組んでください。ビールをおごりますので、助けてください ;)

制限事項

Concolic 実行と Ponce にはいくつかの問題があります。

  • シンボリックメモリのロード/書き込み:x = aray[symbolic_index] のようにメモリ値を読み取るインデックスがシンボリックである場合、ユーザー制御のテイント/シンボル化された入力の追跡が失われる可能性がある問題が発生します。

  • Triton は浮動小数点命令 でうまく動作しません。

  • Concolic 実行は実行された命令のみを解析します。つまり、以下のようなケースではシンボリック追跡が失われます。

    root@kitploit:~
    int check(char myinput)  // Input is symbolic/tainted
    {
    int flag = 0;
    if (myinput == 'A')  //This condition is symbolic/tainted
      flag = 1
    else
      flag =- 1;
    return flag; // flag is not symbolic/tainted!
    }
    

著者

  • Alberto Garcia Illera (@algillera) [email protected]
  • Francisco Oca (@francisco_oca) [email protected]
ツールをダウンロード