cocos2d-xとLuaでゲームが出来るかな?

cocos2d-xとLuaを覚え書き

Luaをバイトコードに変換してcocos2d-xで読む。

Luaバイトコードにして、cocos2d-xで読んでみた話。

iOSやAndroidのアプリは、簡単にリソース内を覗くことが出来ます。
そうなると、通常Luaスクリプトはただのテキストなので丸見えになってしまいます。
恥ずかしい!

なので、最終的なアプリに入れる場合は、難読化・暗号化などを施します。

独自にこれらの処理を行うのが一番なのでしょうが、出来る限り手抜きでやりたい。


Luaバイトコード

Lua標準のコンパイラにluacがあります。
しかし、WindowsやMac上で、コンパイルしたコードはiPhoneAndroid上で上手く読み込めないそうです。

・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) では動作確認できました。

全ての環境で上手く行くか分かりませんが、簡単に難読化できました。


次は、簡単に暗号化したいと思います。