SmallVmp — LLVMベースの教育用 VMP 実装

Security

概要

SmallVmp は LLVM を基盤にした教育的な VMP(Virtual Machine Protection)実装プロジェクトです。C++ と LLVM のパスを利用して LLVM IR を解析・改変し、選択した関数を独自仮想命令(バイトコード)に置換します。置換後のバイトコードはランタイムで実行される仮想マシンによって解釈され、従来の静的解析やデバッガに対して耐性を持たせることを目的としています。本プロジェクトは研究・学習用途に焦点を当て、実装の簡潔さと可読性を重視しています。

GitHub

リポジトリの統計情報

  • スター数: 24
  • フォーク数: 11
  • ウォッチャー数: 24
  • コミット数: 7
  • ファイル数: 36
  • メインの言語: C++

主な特徴

  • LLVM パスを使ったソースレベル(IRレベル)での関数置換とバイトコード生成
  • シンプルな仮想マシン実装によりバイトコードの解釈・実行を行う
  • 教育目的で設計:実装が読みやすく、VMP の仕組みを学べる
  • MIT ライセンスによるオープンソース提供

技術的なポイント

SmallVmp の技術的コアは LLVM を用いた IR 改変と、生成されたバイトコードを解釈するランタイム仮想マシンの組合せです。開発者は LLVM のパスインターフェースで対象関数を走査し、命令単位で独自のバイトコード命令へマッピングします。制御フロー(分岐、ループ、戻り)を保持するために、元の制御構造を仮想命令列に変換し、命令ポインタとスタック(あるいはレジスタ模倣)を用いて VM 上で再現します。また、一部のオペランドは暗号化や符号化して格納し、ランタイムで復号して使用することで静的解析の難易度を上げます。ビルドは C++ と LLVM ライブラリの連携が必要で、カスタムのビルドスクリプトや CMake 設定を通じて LLVM バージョンに合わせて構成します。設計上は教育的な単純化(例:限られた命令セット、簡易ディスパッチループ)を行い、実運用での堅牢性よりも可読性と拡張性を優先しています。拡張ポイントとしては、命令セットの拡張、JIT コンパイルによる VM 性能改善、より強力な暗号化・アンチ解析技術の追加などが想定されます。

プロジェクトの構成

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

  • .DS_Store: file
  • .arcconfig: file
  • .arclint: file
  • .clang-format: file
  • .clang-tidy: file

…他 31 ファイル

※ 実際のリポジトリには LLVM パス実装、VM ランタイム、ビルド設定、サンプルコード、README などが含まれます。ビルドには対応する LLVM 開発環境が必要です。

まとめ

学習向けに整理された LLVM ベースの VMP サンプルで、仕組みを理解するのに有用です(約50字)。

リポジトリ情報:

READMEの抜粋:

SmallVMP: 一个基于 LLVM 的教学性 VMP 实现

“不造轮子,何以知轮之精髓?” — To truly understand the wheel, you must build one.

License: MIT


目录

关于项目

SmallVMP 是一个从零开始构建的、用于学习和研究的虚拟机保护(Virtual Machine Protection)项目。它并非一个生产级的安全解决方案,而是我个人在探索 VMP 技术原理过程中的产物。

项目的核心目标是: