IRvana:LLVM IRの多言語処理と難読化を活用したJIT実行環境

Security

概要

IRvanaは、LLVMの中間表現(Intermediate Representation、IR)を多言語で扱い、難読化パスを適用した上でJIT実行を可能にする個人プロジェクトです。LLVM IRの深い理解を目的とし、コード難読化や逆解析、JIT実験を通じて攻撃的セキュリティ研究を行う一方で、LLVM技術の学習やツール開発にも活用できます。多言語対応と難読化によるコード保護を両立させた点が特徴で、LLVM IRの内部処理や実用的な応用例として貴重なリポジトリです。

GitHub

リポジトリの統計情報

  • スター数: 10
  • フォーク数: 0
  • ウォッチャー数: 10
  • コミット数: 3
  • ファイル数: 14
  • メインの言語: CMake

主な特徴

  • LLVM中間表現(IR)を対象とした難読化パスの実装
  • 多言語コードに対応したJIT実行環境の構築
  • セキュリティ研究やリバースエンジニアリングのための実験的フレームワーク
  • LLVMの学習やツール開発に役立つサンプルコードと設計

技術的なポイント

IRvanaは、LLVMの中間表現を深く掘り下げることを目的に設計されたプロジェクトで、その最大の特徴は多言語対応の難読化パスを用いてJIT実行を可能にしている点です。LLVM IRはコンパイラやツールチェーンの中核であり、様々なフロントエンドから生成されたコードを統一的に扱えるため、多言語処理の基盤として最適です。

本リポジトリでは、LLVM IR上でのコード難読化技術を自作し、コードの可読性を意図的に下げつつ、JITコンパイルによる動的実行を実現しています。このアプローチは、攻撃的セキュリティ研究の文脈で、逆コンパイルや解析を困難にする防御技術として有効です。また、リバースエンジニアリングの理解を深める教材としても機能します。

技術的には、CMakeをビルドシステムに採用し、LLVMのAPIを用いてIR操作を行います。パスの設計はLLVMのパスフレームワークに準拠しており、IRの最適化や変換処理とシームレスに統合可能です。さらに、複数のプログラミング言語から生成されたIRを扱うために、共通の抽象化レイヤーを設け、拡張性を確保しています。

JIT実行部分では、LLVMのMCJITやORC JITなどのランタイムコンポーネントを利用し、難読化後のIRを即座にコンパイル・実行できる仕組みを実装。これにより、実際に難読化が動的環境下でどのように機能するかを検証でき、実用的な攻撃防御技術の検討に役立ちます。

また、プロジェクトは教育的価値も重視しており、IRの生成・変換・実行に関わるコードやドキュメントが充実。LLVMの内部動作を学びたい開発者にとって貴重なリソースとなっています。全体として、IRvanaはLLVM IRの多面的な活用を探求し、セキュリティ・リバースエンジニアリング・コンパイラ研究を結びつけるユニークなプロジェクトと言えるでしょう。

プロジェクトの構成

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

  • .gitattributes: Git属性設定ファイル
  • IRVana.png: プロジェクトのビジュアルロゴ画像
  • IRgen/: LLVM IRを生成・操作する関連コード群
  • IRvana.cpp: メインのC++ソースファイル、JIT実行のエントリポイント
  • IRvana.sln: Visual Studioソリューションファイル(Windows向けビルド構成)
  • CMakeLists.txt: CMakeビルド設定ファイル
  • LICENSE: ライセンス情報
  • README.md: プロジェクト概要と使用方法の説明
  • その他ヘッダ・ソースファイル群: LLVMパスやユーティリティ関数を実装

まとめ

LLVM IRの難読化とJIT実行を融合した先進的な実験プロジェクト。

リポジトリ情報:

READMEの抜粋:

*IRvana is a personal learning and experimentation project centered around the LLVM framework and its intermediate representation (IR) formats, with a focus on code execution, reverse engineering, and JIT experimentation. While its roots are in offensive research, IRvana can be equally valuable for LLVM enthusiasts and developers looking to explore the inner workings of LLVM IR, its tooling, and its practical applications for…