Web Search
日記 スケートボード 技術文書 過去の日替わり画像 アンテナ

TOP > linux >

javascriptを整形する

javascriptはクライアント側で実行するため、そのコードがブラウザから読み込み可能でなければいけない。その上、script言語なので、書いたコードはソースコードそのもの。そのまま読むことができる。ソースコードが読みとり可能という事は、ソースコードの勝手な流用が発生したり、コード中の脆弱性を容易に発見されるといった問題がおきる。そのため、多くのサイトはこの問題を避けるためcode obfuscatorというものを使って、コードを読みにくくしている。obfuscateととは「不明瞭にする,わかりにくくする」という意味。何をやっているかというと、関数名、クラス名、変数名などをアルファベットの羅列に置換したり、改行や無駄なスペースを覗いたりしてコードの可読性を低くしている。
しかし、サイト内でjavascriptを使っておもしろいことをしているとコード解析したいところ。そこで、obfuscateされたコードをある程度読みやすくするperlスクリプトを書いてみた。もちろん、元の変数名や関数名は分からないので、それらは元に戻せないが、せめてフォーマットを改行なりスペースを入れて、人間が読みやすくするという試み。世にはこういったソフトは既にあるみたいなのだけど、シェアウェアだったりするので。
とりあえず、かなり単純なjavascript構文にしか対応していない。というより、自分が解読したかったjavascriptのファイルをこれでうまく整形できたので十分という説もある。もし、今後もっと複雑なファイルをゲットして、フォーマットする必要があったら、本プログラムの精度をあげるとしよう。
スクリプトはこれ。eucコーディングなので、ブラウザで開くと、エンコードを指定しなおす必要があるかも。perlで書いてあるので、実行権限を与えてあげれば問題なく動作するでしょう。試しにわかりにくいjsをフォーマットしてみよう。これも一応フォーマットできるみたいだから。元のjsファイルはこれ。ね、何が何だかさっぱりわからないでしょ?1行だし…これを変換するには、以下のようなコマンドを実行すればいい。
$ format_javascript.pl mmenudom.js > mmenudom.js.new
そして、フォーマットされた結果がこれ。調子いいでしょ?
まぁ、for(がfor (になってたら動かなかったり、}elseなども同様な問題をかかえている。これは、パースする前に、一度リテラル以外の不要なスペースを取り除いてあげれば解決しそうだ。ま、次回必要になればfixするってことで。
$Log: index.html,v $
Revision 1.2  2005/04/01 13:05:35  k-ozaki
fixed unclosed div

Revision 1.1  2005/04/01 13:02:25  k-ozaki
added to cvs