Luaをバイトコードに変換してcocos2d-xで読む。
Luaをバイトコードにして、cocos2d-xで読んでみた話。
iOSやAndroidのアプリは、簡単にリソース内を覗くことが出来ます。
そうなると、通常Luaスクリプトはただのテキストなので丸見えになってしまいます。
恥ずかしい!
なので、最終的なアプリに入れる場合は、難読化・暗号化などを施します。
独自にこれらの処理を行うのが一番なのでしょうが、出来る限り手抜きでやりたい。
Luaをバイトコードへ
Lua標準のコンパイラにluacがあります。
しかし、WindowsやMac上で、コンパイルしたコードはiPhoneやAndroid上で上手く読み込めないそうです。
・Fatal problem: LUA source code encrypt.
http://www.cocos2d-x.org/boards/11/topics/22319
・iphone上でLuaのバイトコードを生成する
http://p-monster.hatenablog.com/entry/2013/02/12/205003
色々悩んだけれど、これといった解決方法は見つからず。
フォーラムを見てもluacを使って簡単に良い方法は無いようです。
ところが、cocos2d-x 2.1.3からLuajitになりました!
と、いうことはluacで作成したバイトコードは、そもそも読めなくなりました。
Luajitでバイトコードへ
Luajitでのバイトコード作成はluajit.exe -bを使用します。
・Running LuaJIT
http://luajit.org/running.html
luajit -bs [ input ] [ output ]とやれば、コメントなどのデバッグ情報を削除したバイトコードが作成されます。
関数名や文字列は丸見えですが、なかなか人の目で見るのは難しいですね。
cocos2d-xでバイトコードの読み込み
上で書いたようにluacで生成したバイトコードは、上手いように読めませんでした。
luajitで生成したコードを読んでみます。
std::string path = CCFileUtils::sharedFileUtils()->fullPathForFilename("hello.lua");
pEngine->executeScriptFile(path.c_str());
これで終了です。
何も手を加えること無く、普通に読めてしまいました!
luacで悩んでいたのが馬鹿らしいぐらいに。
Luajitコンパイル Windows7 64bit
手持ちのPCと端末 Win32, android( 2.3.5, 4.0.3 ), iPhone4( 6.0.1) では動作確認できました。
全ての環境で上手く行くか分かりませんが、簡単に難読化できました。
次は、簡単に暗号化したいと思います。