JavaScript難読化ツールで生成されたコードの解読は意外と簡単!

私はよくJavaScriptでコードを書きます。ブラウザでできるゲームなどを作っています。そんな私が愛用しているツールの1つにJavaScript Obfuscator Toolというものがあります。

JavaScript Obfuscator Tool

https://obfuscator.io/

これはJavaScriptのコードを難読化することができるツール。

サイトにアクセスしてコードを貼り付けてObfuscateボタンをクリックすると自動で難読化されたコードを生成してくれます。

私のゲームはブラウザゲームなので動作はJavaScriptがメインになっています。パクられたり解析されてチートされると困るので公開する際は難読化したコードを使用しています。

難読化するとどうなるの

文字通り人間が読みにくいコードになります。

設定次第ではこんなかんじにかなり読みにくそうなコードを生成することができます。このままではほとんど読むことが難しいのでこれを解析しようなんて人はあまりいないと思います。

JavaScript BeautifierというJavaScriptのコードを綺麗に読みやすくしてくれるツールも存在するのですが、これを使ってもObfuscatorで難読化コードは元の状態には戻らないです。(ただし初期設定だと難読化のレベルが低いのでBeautifierを使えばほぼ元に戻る)

実は意外と簡単に読める

一見難しそうですが、よくみるとどういう仕組みなのかわかってきます。とりあえず難読化されたコードを一度Beautifierで少しみやすくします。

するとこんな感じ。なんか_0x2498(‘~~~’, ‘~~~’)というやつがたくさんあるのがわかると思います。_0x2498の部分は難読化ツールが自動生成するので毎回違いますが、このような感じに同じ部分がたくさんでてくるはずです。

わかる人はすぐわかると思いますが、_0x2498は関数です。その関数に引数で値を渡しています。そして関数に値を渡すと難読化前にそこにあった値が返されることが想像できると思います。返される値がわかってしまえばその部分を解読できます。

なんとこの_0x2498という関数はコンソールで呼び出せてしまうのです。

例えば上の画像の_0x2498(‘0x15c’, ‘lQeo’)の部分を知りたいと思ったときにこのスクリプトが実行されているページでコンソールを開き、そのまま入力すると

普通に値が返ってきますw

値を知りたいなって思ったときにコピーしてスクリプトが実行されたページのコンソールに貼り付ければ一発で値がわかります。

あとは全部の_0x2498(‘~~~’, ‘~~~’)の部分をみつけて値を置換した後保存するというコードをNode.jsなどで書けば自動的にすべての部分を解読できます

他にも関数名や変数名に_0x~~~といったようなのがたくさんありますが、これは一見みずらいだけで、ただの名前なので気にする必要はありません。(なにをする関数なのか?とかを割り出すのは多少難しいかもしれないけど)

というわけで、今回は難読化ツール使ってもコード読むのは意外と簡単だよ!って話でした。やっぱり本気でやるなら独自の難読化とかしたほうがよさそうですね。

シェアする

  • このエントリーをはてなブックマークに追加

フォローする

コメント

  1. […] JavaScript難読化ツールで生成されたコードの解読は意外と簡単! […]