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

JavaScript

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]

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

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

コメント

タイトルとURLをコピーしました