Babel による難読化の検出
Babel Obfuscator は、主に .NET アセンブリをリバースエンジニアリングに対してより強くできることから、.NET アセンブリの分野で広く知られるようになったツールです。Babel は単にシンボル名を難読化するだけではなく、さらに踏み込んでアセンブリのコードそのものを変更します。
この変換は、アセンブリが Babel で難読化されているかどうかを確かめたいときの重要な手がかりになります。この調査には、Mono.Cecil ライブラリが大いに役立ちます。このライブラリを使うと .NET アセンブリの検査と解析が容易になり、アセンブリのメタデータを調べて、Babel に特徴的な変更を探せます。
Babel Obfuscator は独自のリネーム方式を採用しており、多くの場合、読めない Unicode 文字や ASCII 文字列を使って難読化された名前を作成します。これらのシンボル名を調べ、Babel のリネーム方式に特徴的なパターンを見つけることで、アセンブリが難読化されているかどうかを判断できます。
さらに、Babel の暗号化による保護機能が有効な場合は、アセンブリにモジュール初期化子が追加されます。この初期化子は、Babel Obfuscator が隠したコードの準備とデータの復号を担当します。その存在は、多くの場合 Babel が使われていることを示す目印になります。
しかし、Babel が使われたことを最も直接的に示すのは、おそらく BabelObfuscationAttribute です。難読化されたアセンブリにこの属性を含めるように Babel が設定されている場合、この属性が見つかれば、Babel で難読化されたことをほぼ確実に確認できます。
実際に手を動かして確かめたい場合は、GitHub のサンプルプロジェクトでこの検出の流れを確認できます。
git clone https://github.com/babelfornet/check-obfuscation-example.gitリポジトリに移動したら、.sln ファイルを Visual Studio で開きます。準備が整ったら、プロジェクトをコンパイルして実行できます。
このサンプルプロジェクトをコンパイルすると、アセンブリが難読化されているかどうかをテストする CLI アプリケーションができます。使用方法は簡単です。
Usage: CheckObfuscation.exe <file|directory>ここで、file は確認したいアセンブリファイル、directory はアセンブリを調べたいディレクトリを表します。
これらのツールと知識があれば、どの .NET アセンブリでも、Babel による難読化の特徴的な痕跡を見つけられるようになります。