Zartha-Obfuscator — Lua 5.1 向けオブフスケータ
概要
Zartha-Obfuscator は Lua 5.1 向けに作られた難読化ツールです。処理は大まかに三段階で構成されます。まず luac を使って入力の Lua ソースをバイトコードにコンパイルし、次にそのバイトコードをパーサで読み取って内部表現に変換します。パーサの出力を元に独自の仮想マシン(VM)を組み立て、元の処理をその VM 上で動かす形に変換することで解析を困難にします。最後に luasrcdiet によるミニファイ(不要な空白・コメント除去)を行い、最終的な出力はコンパクトかつ難読化された Lua コードとなります。本プロジェクトは学習目的で公開されており、運用環境での使用は推奨されていません。
リポジトリの統計情報
- スター数: 5
- フォーク数: 0
- ウォッチャー数: 5
- コミット数: 13
- ファイル数: 10
- メインの言語: Lua
主な特徴
- Lua 5.1 バイトコードを利用した難読化ワークフロー(luac → パーサ → VM)
- パーサ出力から仮想マシンを生成して処理を仮想化(バイトコードの再表現による防御)
- luasrcdiet によるミニファイでコードサイズ縮小と可読性の低下を両立
- 学習目的・実験的プロジェクトで、設計と実装の理解に適する
技術的なポイント
Zartha の技術的核は「バイトコード解析」と「仮想化」にあります。Lua ソースを luac でコンパイルする段階で、ソースの構造はバイトコード(プロトタイプ、定数表、命令列、アップバリュー情報など)として固定化されます。Zartha はこのバイトコードをパースして内部表現(AST とは別の命令列やプロトタイプ表)を再構築し、その情報を基に「独自の VM」を生成します。生成される VM はオリジナルの処理をエミュレートするよう設計され、元の命令列を直接実行するのではなく VM の命令列経由で実行することで、静的解析や逆コンパイルの難易度を上げます。
このアプローチの利点は、単純な名前の置換だけでなく実行モデル自体を差し替える点にあります。典型的には定数の暗号化、レジスタやアップバリューのマッピング変更、不要命令の混入、制御フローの再編成などを組み合わせ、元のロジックを保ちながら解析者の疲労を誘導します。最終段階で luasrcdiet を適用するのは、コメントや空白を除去してさらに可読性を下げるためです。
注意点として、本ツールは Lua 5.1 固有のバイトコード仕様(命令セット、バイトオーダー、ヘッダ構造など)に依存しているため、Lua の他のバージョンには対応していません。また、バイトコード依存の変換はデバッグしづらく、生成物のパフォーマンスや互換性の検証が重要です。本リポジトリは学習目的が主であり、生成コードを安全に運用するための堅牢なテスト・保守機構は組み込まれていない点に留意してください。
プロジェクトの構成
主要なファイルとディレクトリ:
- Bytecode: dir
- Input: dir
- LICENSE: file
- Main.lua: file
- Pipeline.lua: file
…他 5 ファイル
(上記はリポジトリ内の主要構成を抜粋しています。実際の解析・利用時には各ファイルの役割を確認してください。例えば Parser、VM 生成部、ユーティリティ群、README などが存在します。)
まとめ
Lua 5.1 のバイトコードを解析して VM ベースで難読化する学習向けツール。実運用より学習と実験に適する。
リポジリ情報:
- 名前: Zartha-Obfuscator
- 説明: A Lua 5.1 obfuscator made in lua
- スター数: 5
- 言語: Lua
- URL: https://github.com/TimOdemchuk/Zartha-Obfuscator
- オーナー: TimOdemchuk
- アバター: https://avatars.githubusercontent.com/u/105259379?v=4
READMEの抜粋:
Zartha-Obfuscator
Zartha is a Lua 5.1 obfuscator that can only obfuscate Lua 5.1 files. I am unlikely to ever use this for production and is just a project for others and me to learn more about. The obfuscator uses Luac to compile code to bytecode, which the parser reads. It builds a VM using the parser’s output and finally minifies the code using luasrcdiet.
Installation
git clone https://github.com/TimOdemchuk/Zartha-Obfuscator