Source Obfuscation (日本語)

配布されたゲームが LÖVE を使用して開発されたコードであると気づいた利用者が容易にソースコードへアクセスを阻止するための一般的な方法は三種類あります。

O.png 違法行為の阻止を求めるならば、これらいかなる全ての解決策で目的が達成されると思わないでください。  

O.png いかなる難読化技法を用いようとも、コードの解析を粘り強く行おうとする連中に対して、ピザとコーラの過剰摂取、意欲減退、睡眠不足、そして作業進行速度を遅らせるだけに過ぎません。  

1) .love ファイルを LOVE バイナリへ連結。

各プラットフォームに対する作業方法の関連情報は Game_Distribution を参照してください。

これを避けるには、zip ファイルを連結された実行可能ファイルとして扱ってください。

2) Lua ソースをバイトコードへコンパイル。

Lua コンパイラは Lua ソースコードをコンパイル済みの Lua ソースコードである機械語(コード化)へ変換できます。

標準では LÖVE 0.8.0 以降にある大半のバージョンにおいて LuaJIT でビルドされています。この場合は、この様な方法で非可逆(破壊)的にスクリプトをコンパイルできます:

luajit -b main.lua main.lua

これを避けるには、 luajit-decomp などの LuaJIT 逆コンパイラを使用できます。

注釈: このバイトコードはプラットフォームを超えて非常に良好に動作するのに対して、 LuaJIT を使用してビルドされていない LÖVE のバージョンでは動作しません。現在の LÖVE では LuaJIT 2.0 を使用していますが、将来的には、下位互換性のない LuaJIT 2.1 へ変更される場合があることに注意を払ってください。

LuaJIT を使用してビルドされていない LÖVE のバージョンの場合は、この様な方法で非可逆(破壊)的にスクリプトをコンパイルできます:

luac -o main.lua main.lua

これを避けるためには、 LuaDec などの Lua 逆コンパイラを使用することができます。

注釈: このバイトコードは使用中の動作環境 (Windows, OSX, Linux) および特定のアーキテクチャ (x86, x86_64, ARM) でのみ動作します。

LuaJIT によるコンパイル作業全体を行うために .love の作成を行う単純な Bash スクリプトがあります。

#!/bin/sh
# 使用方法: ./bytecode-love.sh <ソース・ディレクトリ>
WD=`pwd` # 作業ディレクトリの判定。
TEMP=`mktemp -d` # 一時ディレクトリの作成。
cp -Rv $1/* $TEMP # ソースコードを一時ディレクトリへ複写します。
cd $TEMP # 一時ディレクトリへ移動します。
for file in $(find . -iname "*.lua") ; do # 各 lua ファイルに対して再帰処理を行います。
 luajit -b ${file} ${file} # コードを LuaJIT でコンパイルします。
done
zip -r $WD/$1-linux-`arch`.love * # 結果として zip ファイルを出力します。
rm -rf $TEMP # 後始末を行います。

3) Lua ソースコードの難読化を行うために設計されたツールの使用。

Lua ソースの難読化のために利用できる様々なツールがあります。

http://lua-users.org/wiki/LuaTools

前述したとおり、これらのツールはコードの難読化を行いますが、それに対して熟練プログラマは解析を行い難読化される前のコードと類似するものへ復元することができます。

関連

そのほかの言語