JavaScript難読化にも使えるEmscripten
- 2020-01-04
C/C++をJavaScriptに変換できるコンパイラ「Emscripten」というものがあります。
最近使ってみて思った。「これ難読化したいときにも使えるやん」
flashゲームの時代が終わり、最近はブラウザゲームといったらJavaScriptメインで作られているものが多いです。ただ、JavaScriptは人が読めるので簡単にコードをとられてパクられる可能性があります。
対策としてコードを難読化するJavaScript Obfuscatorというツールもありますが、JavaScript1年くらいやってれば割と解読できたりします。(というか難読化設定ちゃんとしないとワンクリックで解読可能)
JavaScript Obfuscatorはかなり優秀な難読化ツールですが、完璧ではないですね。
これと比較すると今回話題にしている「Emscripten」は超絶解読むずいと思います。
Emscriptenは難読化にも使える
実際のコード見てもらえればわかりますがエグイです。JavaScript Obfuscatorも読みづらいですが、Emscriptenで出力されたコードはもう頭おかしくなるレベル(個人の感想)
出力されたコードの一部です。エグイですよね。
あれ?ワイの書いたコードどこいった?っていうレベルで変換後は原型とどめていませんw
超強力な難読化が可能。JavaScriptをよく知っている人でも解読するのは容易ではない。
C / C++からJavaScriptへ変換するコンパイラのため、C / C++でコードを書く必要がある。そのため、JavaScript Obfuscatorのように気軽に使用できるものではない。
もともとEmscriptenは難読化をすることが目的ではないので難読化ツールのように気軽に使えるものではありません。
ただ、難読化に使おうと思えば可能、ということです。
JavaScriptを難読化する
先ほども書いた通り、Emscriptenを使うならC / C++でコードを書く必要があります。
**じゃあどうやって既存のJavaScriptを難読化するの?**っていうことですが、さすがにC/C++にフル移植するのは無理があるので「絶対に知られたくないアルゴリズムやコードだけC/C++で書く」という手段をとります。
リアルタイム対戦するようなブラウザゲームなら、サーバーから受け取るデータのデコードや送信するデータのエンコードアルゴリズムなどをC/C++で書く、とかですね。
チート対策にもなるし、スパムなど迷惑行為の防止にもなります。
まとめ
決して敷居が低くないEmscriptenですが、使えれば最強の難読化ツールではないかと思います。
なんならEmscriptenで難読化した後、そのままJavaScript Obfuscatorで難読化すればさらに強力です。