[JavaScript] WASMはデコンパイルして解読できてしまうので注意

[JavaScript] WASMはデコンパイルして解読できてしまうので注意

Emscriptenなどを使ってC/C++のコードをJavaScriptに変換するとWebAssembly(wasm)ファイルが生成されますよね。

WASMはバイナリ形式なので、エディタなどで開いても人間が解読することは困難です。

バイナリ形式ならコードを解読されることはないだろうと安心する方がいるかもしれませんが、実はWASMファイルをそのまま置いていると解読されてしまう可能性が高いです。

WASMの注意点

バイナリ形式のWASMですが、WebAssemblyをCに逆コンパイルするツールが存在するので、それを使用して簡単にコードを解読されてしまうかもしれません。

WebAssemblyデコンパイラ

実際に「wasmdec」というWebAssemblyをCのコードに変換するツールがGithub上で公開されています。

Diep.ioという有名なioゲームがあります。このゲームはWebAssemblyを使って動作していますが、wasmファイルをダウンロードしてこのツールに通すとデコンパイルできてしまいます。

バイナリとはいえWASMをそのままアップロードしておくのは良いとは言えません。

解決策

Emscriptenでコードを出力する場合、wasmファイルを出力せずにJavaScriptに組み込んでしまえば解読がとても難しくなります。

変換時に -s WASM=0 というオプションを付ければwasmは出力されずにJavaScriptに組み込まれます。

emcc -s WASM=0 [path]

バイナリではなくなりますが、コードは解読がとても難しい状態になります。

JavaScript難読化にも使えるEmscripten
C/C++をJavaScriptに変換できるコンパイラ「Emscripten」というものがあります。 最近使ってみて思った。「これ難読化したいときにも使えるやん」 flashゲームの時代が終わり、最近はブラウザゲームといったらJa...
JavaScript難読化にも使えるEmscripten favicon tialight.com
JavaScript難読化にも使えるEmscripten

さらに難読化ツールなどでより読みづらくすれば、解読を諦める人がほとんどになるでしょうね。