Babel Obfuscatorを使ってソースコードを難読化する


先日、以下の記事で.NETツールの難読化を行った事を書きましたが、今回はその中の「Babel」というツールの使い方を解説していきます。

経緯、難読化についての詳細は上記記事にてご確認下さい。

ツールのダウンロード

まずは以下のサイトにアクセスします。

http://www.babelfor.net/

画面上部に表示されているメニューの中から、「Downloads」をクリックします。

ダウンロードページに遷移すると以下の様に、

「Babel Obfuscator x.x.x.x(x86/x64) Demo」

と書かれた2つのボタンが表示されています。こちらはPCの環境にあったものをダウンロードします。

以下のmsiファイルが保存される事を確認して下さい。

インストールについては特に説明する事は無いので省略します。

規約内容に問題が無ければ同意(I accept)してインストールを完了させて下さい。

インストール後はプログラム一覧の中に「Babel x.x」というフォルダが作成されます。

スポンサーリンク

使い方

では早速インストールしたBabelを使用してツールの難読化を行いたいと思います。

プログラム一覧の「Babel x.x」フォルダの中にある、「Babel x.x」を実行して下さい。(漢字の『三』の様なアイコンのファイル)

すると、以下の様に「Babel Obfuscator Demo」が起動します。

続いて、右側の「Input Grid」の枠内に用意したexeファイルをドラッグ&ドロップします。

纏めて難読化処理を施す事ができるので、ファイルが複数ある場合は纏めて放り込む事が可能です。

こちらがSettingsの画面です。

Renaming」項目(一番上の設定項目グループ)を見ると、「Types」、「Methods」などの記述がありますが、ここで難読化する対象を設定する事が可能です。

難読化の内容についてはここで細かく設定できる様ですが、残念ながら私も詳しい内容はほとんど分かっていないので、詳細はインストールフォルダにあるユーザーズガイドをご覧下さい。

今回は特に変更はせずデフォルト設定で難読化を行います。

画像を見て頂けると分かる通り、一部グレーアウトして操作できない項目が存在しますが、恐らくデモ版だからだと思われます。

また、よく見るとフォーム右端の部分に「Obfscation Level」縦書きされたフォームが存在するのが分かります。

こちらは難読化レベルの調節バーとなっており、このメモリを上に引き上げるだけで自動的に難読化の設定を変更してくれる仕様になっています。(上に上げる:難読化高 下に下げる:難読化低

設定画面の内容が分からなくても大丈夫という親切設計です。

Edit Rulesについては何ができるのかよく分かっていないので今回はノータッチ。
恐らく「特定のメソッドのみ難読化対象から外す」といった処理はここで出来るものと思われます。

Optimizations(最適化)はデモ版のためか、全てグレーアウトしており操作不可。

Outputでは出力先の設定を行う事ができます。

デフォルトの状態では、Inputで設定したファイルの元の場所に「BabelOut」というフォルダが生成され、その中に出力される様になっています。

この辺も特に設定する必要は無いのでそのまま。

ConsoleStatisticsは難読化処理結果の詳細レポートが表示される場所なので、難読化実行前は白紙の状態です。

一通り設定を行ったら、ツール上部にある「▷」(保存アイコンの右)を押して難読化を行います。

難読化の進捗はInput画面にある「Progress」をご確認下さい。

難読化処理結果

さて、ではどの様な感じに難読化されたのかを確認してみましょう。

まずは難読化前のコード。

シンプルなFizzBuzzコードです。

そして難読化後がこちら。

冒頭にいきなり日付データを使用した謎の判定処理が挿入されていました。(※判定処理の内容については追記の項目を参照)

そしてFizzBuzzの文字列の部分は完全に理解出来ない内容に変化(文字化け?)し、何を表示させようとしていたのか全く分からない状態になりました。

他の部分は特に変化が見られませんが、まぁ元がシンプルなコードなのでこんなもんでしょうね。規模が大きければ大きい程、解析する気も起きなくなる程複雑なものになると思われます。個人的にはこれで十分です。

しかし今回特に注目すべきは左側の部分では無いでしょうか。

Main()が記述されていた「Module1」という名前はどこかに消え、身に覚えの無い謎のモジュールが大量に作られています。しかも中身も文字化けしているのか何がなんだか分からない状態。

そもそもこのMain()を探すのに少し手間取りましたからね。

さて、問題は「ところでこのコードでちゃんと動くの?」と言う所ですよね。

この通り問題無く動作しました。

ちなみにダミー処理が挿入された影響もあり、実行ファイルのサイズは以下の様に変化しています。


左は難読化前、右が難読化後です。

という事で今回は以上となります。

気になる場合は、ぜひデモ版をダウンロードして試してみて下さい。

追記

当初気付いていなかったのですが、Babelのデモ版は難読化後「2週間」が経過すると使用できなくなる様です。(実行ファイルをクリックしても何も反応しなくなる)

この判定は初回起動時からとかではなく、『難読化処理後』からカウントが始まっている事に注意して下さい。

・・・って書いてて気付いたのですが、処理の冒頭に挿入される謎の日付判定ってもしかしてこれか!

関連記事と広告

シェアする

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

フォローする