NativeAot2IL — NativeAOTバイナリ向けダンプ/解析ツール

Tool

概要

NativeAot2IL は、Native AOT(.NET の事前ネイティブコンパイル)で生成されたバイナリから、R2R ヘッダーやセクション、メタデータの基本情報を抽出するための実験的なツールです。Cpp2IL のようなダンパ/デコンパイラの手法に触発されて作られており、現状では .NET 10 の Windows x64 バイナリ向けに限定されます。完全動作は保証されず「情報公開/検証用」の段階ですが、R2R フォーマットの検出やメタデータセクションの簡易解析といった基礎を押さえており、将来的に IL 再構築やデコンパイル機能を追加するための出発点を提供します。

GitHub

リポジトリの統計情報

  • スター数: 3
  • フォーク数: 0
  • ウォッチャー数: 3
  • コミット数: 5
  • ファイル数: 6
  • メインの言語: C#

主な特徴

  • R2R(ReadyToRun)ヘッダーの検出機能
  • R2R セクションの列挙と基本的解析
  • メタデータセクションからの基本情報抽出(簡易的なメタデータ解析)
  • .NET 10 Windows x64 バイナリを想定した実験的実装(現状は限定的)

技術的なポイント

NativeAot2IL の中心的な技術課題は、Native AOT によって IL がネイティブコードへ変換されたバイナリから、ランタイムやメタデータに関する情報を復元または抽出する点にあります。Native AOT(ReadyToRun 形式を含む)では、実行コードは事前コンパイルされますが、ランタイムが利用するためのメタデータやテーブルの一部はバイナリ内に残ることがあり、それらを解析することで型・シグネチャ・メソッドの存在など IL レベルに近い情報を得られます。

具体的には、PE ヘッダーと R2R 特有のヘッダを検出し、R2R セクション(コード、コンテンツ、メタデータなど)を列挙して各セクションの RVA とサイズをファイルオフセットにマッピングします。メタデータ部分は ECMA-335 仕様に従う圧縮ストリーム(#~/#-)やテーブル・ストリーム(TypeDef, MethodDef, Blob など)を含むため、それらのオフセット解決・ブロブ解析・シグネチャデコードが基本処理になります。NativeAot2IL はこうした流れの基礎を実装しており、メソッドシグネチャや型名などを簡易に抽出できます。

ただし重要な制約があります。NativeAOT は多くのケースで IL を完全に破棄するため、ネイティブコードから IL を復元することは本質的に困難であり、NativeAot2IL の現時点の目的は「可能な限りのメタデータ情報の収集」と「解析パイプラインの実験」にあります。また対象を .NET 10 Windows の x64 バイナリに限定しているため、他バージョンやプラットフォーム、ARM などには対応していません。さらに README にある通り「デバッガをアタッチして調べる」用途を想定する部分もあり、完全自動化よりは手動調査と組み合わせる用途で価値を発揮します。

実装面では C# と .NET のバイナリ読み取り機能(BinaryReader 等)や PE 解析のロジック、ECMA-335 準拠のメタデータ解釈が中心になる見込みです。将来的な拡張としては、より完全なメタデータテーブルのパース、メソッド境界やデバッグ情報(PDB)との連携、デコンパイルエンジン(IL 再生成→ILSpy 等へ橋渡し)との統合、プラットフォームやランタイムバージョンの拡張などが考えられます。

プロジェクトの構成

主要なファイルとディレクトリ:

  • .gitignore: file
  • .idea: dir
  • LICENSE: file
  • NativeAot2IL.slnx: file
  • NativeAot2IL: dir

…他 1 ファイル

まとめ

現状は実験段階だが、NativeAOT バイナリのメタデータ抽出・解析の基盤として有望。

リポジトリ情報:

READMEの抜粋:

NativeAot2IL

Cpp2IL-style dumper/eventually-decompiler-maybe for NativeAOT binaries.

Currently might as well be nonfunctional, posted only for visibility and information purposes. Definitely will only work on .NET 10 Windows binaries, likely x64-only, and is not of any use unless you’re poking around with a debugger attached.

Features

  • Finds R2R header
  • Finds all R2R Sections
  • Parses very basic information out of the metadata section
  • More f…