
Tenetは、実行トレースを探索するためのIDA Proプラグインです。このプラグインの目標は、特定のバイナリに対して実行トレースをナビゲートするための、より自然で人間のコントロールを提供することです。この作業の基礎は、ソフトウェアの複雑な実行パターンを調べて蒸留するための新しいまたは革新的な方法を調査したいという願望に由来しています。
このプロジェクトの詳細については、最初のリリースに関するBlogPostをお読みください。
Qira / Geohot et alに感謝します。インスピレーションのために。
Tenetは、クロスプラットフォーム(Windows、MacOS、Linux)Python 3プラグインです。サードパーティの依存関係はゼロで、コードはポータブルでインストールしやすくなります。
ResasemblerのPythonコンソールから、次のコマンドを実行してプラグインディレクトリを見つけます。
import idaapi, os; os.path.join(idaapi.get_user_idadir(), "plugins")このリポジトリ/plugins/フォルダーの内容をリストされたディレクトリにコピーします。
分解者を再起動します。
このプラグインは、IDA 7.5以下でのみサポートされています。
適切にインストールされると、分解者に新しいメニューエントリが利用可能になります。これを使用して、外部で収集された実行トレースをTenetにロードできます。

これは最初のリリースであるため、Tenetは単純な人間が読めるテキストトレースのみを受け入れます。トレース形式、制限、および参照トレーサーに関する追加情報については、このリポジトリのトレースREADMEを参照してください。
Tenetを使用している間、プラグインはトレイルを「ペイント」し、アクティブな実行トレースで現在の位置から実行前方(青)と後方(赤)の流れを示します。

時間を経て前または後方にstepには、分解者の右側のタイムラインの上をホバリングしながらスクロールするだけです。関数呼び出しをstep overには、スクロール中にSHIFT保持します。
トレースタイムラインは、分解者の右側にドッキングされます。このウィジェットは、トレースタイムラインに沿ってさまざまな種類のイベントを視覚化し、上記のように基本的なナビゲーションを実行するために使用されます。

タイムラインをクリックしてドラッグすることにより、実行トレースの特定のセクションにズームインすることができます。このアクションは、目的の粒度に到達するために何度も繰り返すことができます。
レジスタウィンドウで命令ポインターをダブルクリックすると、それが赤で強調表示され、トレースタイムライン全体で命令が実行されたすべての場所が明らかになります。

実行の間にジャンプするには、強調表示された命令ポインターをホバリングしながら、上または下にスクロールします。
さらに、分解リストを右クリックして、ナビゲーションベースのメニューエントリのいずれかを選択して、関心のある指示の実行をすばやく求めることができます。

IDAのネイティブF2 Hotkeyを使用して、任意の指示にブレークポイントを設定することもできます。
スタックまたはメモリビューのいずれかでバイトをダブルクリックすると、トレースタイムライン全体で視覚化されたアドレスにすべての読み取り/書き込みが即座に表示されます。黄色はメモリの読み取りを示し、青はメモリ書き込みを示します。

メモリブレークポイントは、実行ブレークポイントと同じ手法を使用してナビゲートできます。バイトをダブルクリックし、選択したバイトをホバリングしながらスクロールして、各アクセスのトレースを探します。
対象バイトを右クリックすると、念頭に置いている特定のナビゲーションアクションがある場合、メモリの読み取り /書き込み /アクセスの間を探すオプションが得られます。

メモリビューを任意のアドレスに移動するには、メモリビューをクリックしてGを押して、アドレスまたはデータベースシンボルのいずれかを入力してビューを求めます。
メモリブロックを強調表示し、それをダブルクリックしてアクセスブレークポイントを設定することにより、メモリの領域にメモリブレークポイントを設定することができます。

通常のメモリブレークポイントと同様に、領域をホバリングしてスクロールすることで、選択したメモリの領域に作成されたアクセスを横断するために使用できます。
リバースエンジニアリングでは、 「この登録簿を現在の価値に設定する命令がどのような命令を設定しますか?」と自問する状況に遭遇することはかなり一般的です。
TENETを使用して、1回のクリックでその命令を逆方向に探すことができます。

後方を探すことは、レジスタの変更を横切るための最も一般的な方向です...しかし、器用さのために、レジスタの右側にある青い矢印を使用して次のレジスタ割り当てを前進させることもできます。
単純な「シェル」が提供され、トレースの特定のタイムスタンプに移動します。コンマの有無にかかわらず、タイムスタンプをシェルに貼り付ける(または入力...)十分です。

感嘆符を使用して、指定された「パーセンテージ」をトレースに探すこともできます。入力!100 、トレースで最終的な指示を求めます。ここで!50トレースを通過する方法の約50%を求めます。 !last分解者で見ることができる最後の航行可能な命令を求めます。
TENETは、「明るい」テーマと「暗い」テーマの2つのデフォルトテーマを備えた出荷です。宗教装置が現在使用している色に応じて、Tenetは最も適切と思われるテーマを選択しようとします。

テーマファイルは、ディスク上の単純なJSONとして保存され、高度に構成可能です。デフォルトのテーマや色に満足していない場合は、独自のテーマを作成して、ユーザーテーマディレクトリにドロップするだけです。
Tenetは、将来の負荷と用途に対するテーマの好みを覚えています。
時間とモチベーション資金調達許可、将来の作業には次のものが含まれます。
外部の貢献、問題、機能のリクエストを歓迎します。将来のリリースに検討したい場合は、このリポジトリのdevelopブランチへのプルリクエストをお願いします。