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

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

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

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

ツールディレクトリ

カテゴリ

すべてのカテゴリを見る
Loading categories
tenet — リバースエンジニアのためのトレースエクスプローラ | Kitploit
ツール/GitHubGitHub/gaasedelen/tenet
動的分析 (サンドボックス)リバースエンジニアリングデバッガバイナリ解析
GitHubgaasedelen/tenet

tenet

リバースエンジニアのためのトレースエクスプローラ

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

人気

すべて見る →

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

すべてのツールを探索

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

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

Tenet - リバースエンジニアのためのトレースエクスプローラ

Tenet トレースエクスプローラ

概要

Tenet は、実行トレースを探索するための IDA Pro プラグインです。このプラグインの目標は、特定のバイナリに対する実行トレースをナビゲートするための、より自然で人間的なコントロールを提供することです。この作業の基盤は、ソフトウェアにおける複雑な実行パターンを調査し、抽出するための新しいまたは革新的な方法を研究したいという願望に由来します。

このプロジェクトの詳細については、初回リリースに関するブログ記事をお読みください。

特に QIRA / geohot とその他の方々にインスピレーションを与えていただき感謝します。

リリース

  • v0.2 -- イメージベース検出、セル可視化、ブレークポイントのリファクタリング、バグ修正。
  • v0.1 -- 初回リリース

インストール

Tenet はクロスプラットフォーム (Windows、macOS、Linux) の Python 3 プラグインです。サードパーティ製の依存関係は一切必要なく、コードは移植性が高く、インストールも簡単です。

  1. 逆アセンブラの Python コンソールから、以下のコマンドを実行してプラグインディレクトリを確認します:

    • IDA Pro: import idaapi, os; os.path.join(idaapi.get_user_idadir(), "plugins")
  2. このリポジトリの /plugins/ フォルダの内容を、リストされたディレクトリにコピーします。

  3. 逆アセンブラを再起動します。

このプラグインは IDA 7.5 以降でのみサポートされています。

使い方

適切にインストールされると、逆アセンブラに新しいメニューエントリが追加されます。これを使用して、外部で収集した実行トレースを Tenet に読み込むことができます。

Tenet トレースを読み込む

これは初回リリースのため、Tenet はシンプルな人間可読なテキストトレースのみを受け付けます。トレースのフォーマット、制限事項、参考トレーサーの詳細については、このリポジトリのtracing readmeを参照してください。

双方向探索

Tenet を使用すると、プラグインはアクティブな実行トレース内の現在位置から前方(青)と後方(赤)への実行フローを示すトレイルを「ペイント」します。

Tenet トレイル

時間を前後に step するには、逆アセンブラの右側にあるタイムライン上にカーソルを置いて スクロール するだけです。関数呼び出しを step over するには、スクロール中に SHIFT を押したままにします。

トレースタイムライン

トレースタイムラインは逆アセンブラの右側にドッキングされます。このウィジェットは、トレースタイムラインに沿ってさまざまな種類のイベントを可視化し、上記のような基本的なナビゲーションを実行するために使用されます。

トレースタイムラインをズームイン

タイムライン上をクリック&ドラッグすることで、実行トレースの特定のセクションをズームインできます。この操作は何度でも繰り返して、必要な粒度に到達できます。

実行ブレークポイント

レジスタウィンドウで命令ポインタをダブルクリックすると、赤くハイライト表示され、トレースタイムライン全体でその命令が実行されたすべての位置が明らかになります。

現在の命令にブレークポイントを設定

実行間をジャンプするには、ハイライトされた命令ポインタにカーソルを置いて上下にスクロールします。

さらに、逆アセンブリリストで右クリックし、ナビゲーションベースのメニューエントリのいずれかを選択して、目的の命令の実行にすばやくシークすることもできます。

命令の最初の実行をシーク

IDA のネイティブの F2 ホットキーを使用して、任意の命令にブレークポイントを設定することもできます。

メモリブレークポイント

スタックビューまたはメモリビューのバイトをダブルクリックすると、そのアドレスへのすべての読み取り/書き込みがトレースタイムライン全体で可視化され、即座に表示されます。黄色はメモリの読み取り、青色はメモリの書き込みを示します。

メモリブレークポイントを使用したメモリアクセスの探索

メモリブレークポイントは、実行ブレークポイントについて説明したのと同じ手法でナビゲートできます。バイトをダブルクリックし、選択したバイトにカーソルを置いてスクロールすると、トレースを各アクセスにシークします。

目的のバイトを右クリックすると、特定のナビゲーションアクションを念頭に置いている場合、メモリ読み取り/書き込み/アクセス間をシークするオプションが表示されます。

メモリシーク

メモリビューを任意のアドレスにナビゲートするには、メモリビューをクリックして G キーを押し、アドレスまたはデータベースシンボルを入力してビューをシークします。

リージョンブレークポイント

メモリのブロックをハイライトし、それをダブルクリックしてアクセスブレークポイントを設定することで、メモリのリージョン全体にメモリブレークポイントを設定することが可能です。

メモリリージョンアクセスブレークポイント

通常のメモリブレークポイントと同様に、リージョンにカーソルを置いてスクロールすることで、選択したメモリリージョンへのアクセス間を移動できます。

レジスタシーク

リバースエンジニアリングでは、*「どの命令がこのレジスタを現在の値に設定したのか?」*と自問する状況によく遭遇します。

Tenet を使用すると、1回のクリックでその命令に後方シークできます。

前のレジスタ書き込みをシーク

後方シークは、レジスタの変更をナビゲートする方向としては圧倒的に一般的です... しかし、器用さのために、レジスタの右側にある青い矢印を使用して、次のレジスタ割り当てに前方シークすることもできます。

タイムスタンプシェル

トレース内の特定のタイムスタンプにナビゲートするためのシンプルな 'シェル' が提供されています。シェルにタイムスタンプを(カンマの有無にかかわらず)貼り付ける(または入力する...)だけで十分です。

タイムスタンプシェルを使用したトレースのシーク

感嘆符を使用すると、トレース内の指定された 'パーセンテージ' にシークすることもできます。!100 と入力するとトレースの最後の命令にシークし、!50 と入力するとトレースの約 50% の位置にシークします。!last と入力すると、逆アセンブラで表示可能な最後のナビゲート可能な命令にシークします。

テーマ

Tenet には、'ライト' テーマと 'ダーク' テーマの 2 つのデフォルトテーマが付属しています。逆アセンブラで現在使用されている色に応じて、Tenet は最も適切と思われるテーマを選択しようとします。

Tenet テーマ

テーマファイルはディスク上にシンプルな JSON として保存され、高度に設定可能です。デフォルトのテーマや色に満足できない場合は、独自のテーマを作成し、ユーザーテーマディレクトリにドロップするだけです。

Tenet は、今後読み込む際にテーマの設定を記憶します。

よくある質問 (FAQ)

Q: Tenet を使用して実行トレースを記録するにはどうすればよいですか?

  • A: Tenet はトレースリーダーであり、トレースレコーダーではありません。互換性のある実行トレースを生成するには、動的バイナリ計測フレームワーク(またはその他の関連技術)を使用する必要があります。既存のトレーサーや、独自のトレーサーを実装する方法の詳細については、tracing の readme を参照してください。

Q: Tenet はどのトレースアーキテクチャの読み込みをサポートしていますか?

  • A: x86 と AMD64 のみですが、コードベースはほぼ完全にアーキテクチャに依存しません。

Q: Tenet はどの程度の大きさのトレースファイルを読み込んだりナビゲートしたりできますか?

  • A: Tenet のトレースリーダーは純粋な Python であり、MVP として作成されました。ネイティブのバックエンドに置き換えられるまで、1000 万命令を超えるトレースが合理的にナビゲートできるという保証はありません。

Q: 実行トレースを読み込んだら、'.tt' ファイルができました。これは何ですか?

  • A: Tenet が特定のテキストトレースを読み込むと、トレースを解析、インデックス化、圧縮して、よりパフォーマンスの高いフォーマットに変換します。次回の読み込み時には、Tenet は '.tt' ファイルを読み込もうとし、元のテキストトレースを読み込むのにかかる時間のごく一部で読み込めるはずです。

Q: プラグインがクラッシュした/エラーをスローした/誤ったトレース情報を表示している場合はどうすればよいですか?

  • A: 再現可能な問題や不正確さに遭遇した場合は、このリポジトリに対してイシューを報告し、サンプルのトレースと実行可能ファイルをアップロードしてください。

Q: トレース内のメモリが変化しているのに、そのリージョンへの書き込みがありません。これはバグですか!?

  • A: ログファイルがすべてのメモリ書き込みをキャプチャしていない可能性があります。例えば、ユーザーモード DBI は通常、プロセスメモリへの外部書き込みに対するメモリコールバックを取得しません。これは、ファイルからの読み取りやソケットからの読み取りで最も一般的です — カーネルが指定されたユーザーモードバッファにメモリを書き込むため、従来の計測ではイベントが見えなくなります。
    • Microsoft TTD も一般的に同じ動作を示します。これはシステムコールをモデル化しない限り解決が難しい問題です。

Q: これは Binary Ninja / Ghidra / ... に移植されますか?

  • A: 可能性はありますが、すぐには行われません(__大きな__インセンティブがない限り)。研究指向のプロジェクトとして、主な動機はプログラム実行を整理して探索するための新しい戦略を開発することであり、それらを移植することではありません。

Q: 私の組織がこのプロジェクトを支援したいと思っています。どのように支援できますか?

  • A: 資金がなければ、このプロジェクトに費やすことができる時間は限られています。もしあなたの組織がここで示されたアイデアに興奮し、専任の研究開発をスポンサーする資金を提供できるのであれば、お問い合わせください。

将来の作業

時間と モチベーション 資金が許せば、将来の作業には以下が含まれる可能性があります:

  • トレースからのライブラリ呼び出しのフィルタリング / 凝固
  • レジスタ / スタックビューのポインタ分析(例:注釈)
  • ネイティブの TraceFile および TraceReader の実装(例:より大きく高速なトレース)
  • ナビゲーション履歴 + ブックマークビュー(2-in-1?)
  • よりリッチなトレース情報学、関連イベントのより積極的なインデックス化(例:関数呼び出し)
  • トレースカートグラフィ、トレースの地理の改善された要約と表現
  • 'CPU アーキテクチャ' の選択/検出を少しハードコードから解放
  • より多くのすぐに使えるトレーシングブリッジ、DynamoRIO、TTD、RR、QEMU、Bochs、...
  • Hex-Rays / 逆コンパイルビューへの対応(基本的なビュー同期以外)
  • トレースの自動読み込みや反復処理のための改善されたワークフロー
  • 差分分析、高レベルな 'トレース差分'
  • スレッド、クォンタムのより良いナビゲーションと分解
  • 'マルチモジュール'トレース(例:フルシステムトレース)のナビゲーションの改善
  • Binary Ninja 対応
  • ... ?

外部からのコントリビューション、イシュー、機能リクエストを歓迎します。将来のリリースで検討してほしい場合は、このリポジトリの develop ブランチにプルリクエストを送ってください。

著者

Markus Gaasedelen (@gaasedelen)

ツールをダウンロード