.NETやXamarinで難読化を行うことは重要です。
ブログ記事シリーズ「はじめてのPreEmptive Protection」第3回目では、.NET/Xamarin環境で開発されたアプリが逆コンパイルによって難なく解析されているという現状と、不正な解析への対策で難読化ツールを活用することの効果に迫っていきたいと思います。
ブログ記事シリーズ「はじめてのPreEmptive Protection」とは・・・。
『ソースコードの難読化は本当に必要なの?』
『難読化でよく使われているツールはどれ?』
『有料版と無料版のツールには違いがあるの?』
<はじめてのPreEmptive Protectionシリーズの記事一覧>
1)「難読化を正しく行うために必要なことは?」編
2)「JavaScriptと難読化ツール、有料版と無料版の違い」編
3)「.NETやXamarinで難読化を行うことは重要です。」編(→当ページ)
4)「Android/Javaアプリを難読化して強力に保護するには」編
※ 弊社のサイトを初めてご覧になった方は、会社紹介のブログ記事からお読みください。
*目次*
Visual Studioは難読化ツールをバンドルしている
.NETやXamarinで開発を行うエンジニアにとって欠かせない統合開発環境(IDE)のひとつ、Microsoft社のVisual Studioには「Dotfuscator Community」というツールが標準で付属されているのですが、それをご存知でしょうか?
(参考)Dotfuscator Community – Visual Studio (Windows)
▼ https://learn.microsoft.com/ja-jp/visualstudio/ide/dotfuscator/
2003年からVisual Studioにバンドルされるようになった当ツールは、無料で使用できる難読化ツールです。難読化の基本機能である名称の変更を行うことが可能であり、改ざんやデバッグ防止のための保護機能とビルド統合機能の一部を使用することもできます。
同ツールの製品版(Professionalエディション)との違い
このツールに対して、全ての機能を使用できるのが、難読化ツールのパッケージ製品「PreEmptive Protection」の中で、.NETやXamarinなどに対応した「Dotfuscator」のProfessionalエディション、つまり製品版です。どちらのエディションを使用しても、アセンブリに対して難読化を実行できますが、下記の機能比較表を見れば、製品版と無料版に大きな差があることは一目瞭然です。
(参考)「Professional(製品版)」と「Community(無料版)」の機能比較
▼ https://www.agtech.co.jp/preemptive/dotfuscator/compare-editions/
.NET/Xamarinアプリのプログラム解析は難しい?
.NET/Xamarinの開発環境でビルドした際に作成されるアセンブリ(EXEまたはDLLファイル)は、人間が読み書きできるソースコードとコンピューターが直に実行できるネイティブコードの両方の特性をもつ中間言語(=ILもしくは中間コード)と、アセンブリやソースコードに関する情報が格納されたメタデータなどで構成されています。
中間言語やメタデータ上の重要な情報は、逆コンパイラを使えば(=それがたとえILSpyやdotPeekのような無料版であっても)簡単に取得できるため、悪意のあり/なしに関係なく、コードの読み書きができる人にとって、 .NET/Xamariアプリのプログラムを解析することはそれほど難しくないというのが現状です。
難読化ツール「Dotfuscator」を使った逆コンパイル対策
下記のブログ記事で紹介しているアセンブリの逆コンパイルと難読化の実例では、『実際に逆コンパイルを行うとどのような結果になるのか?』、『難読化を行うことでどのような対策が可能になるのか?』といったことが分かります。また、上記で述べたような「現状」やその対策を行った場合の「効果」も確認できます。
・「.NETアプリの逆コンパイル対策、その具体的な方法とは?(難読化の実例付)」
▼ https://www.agtech.co.jp/blog/2021/05/reasons-to-protect-dotnet-application/
名称を変更するだけでは十分とは言えない理由
上記で紹介したブログ記事の他に、当ブログ記事シリーズの「難読化を正しく行うために必要なことは?」編でも触れていますが、プログラム内の変数名やメソッド名を意味のない文字列に変換したとしても、ソースコードに直接記述されていたリテラル(文字列)や、逆コンパイラのデバッグ機能で参照できる変数に格納された値は、どちらも変換されないまま残っているため、十分な難読化を行っているとは言えません。
クラッカーが悪意をもって実行するリバースエンジニアリング(逆コンパイル)によって、.NET/Xamarinアプリのプログラムが解析、改ざんされてしまわないように、名称の変更以外のセキュリティ対策を施せるツールが必要になってくるでしょう。
プログラム解析を困難にするために必要な機能とは?
「Dotfuscator」は、名称を変更するだけはなく、「文字列の暗号化」や「制御フローの難読化」を行うことも可能であり、他にも「改ざんのチェック」や「不要コードの除去」といった、難読化だけに限らないプログラム解析を困難にするための機能を搭載しています。下記URLからリンクされている製品紹介ページでは、 各機能の概要についてはもちろん、実際に当ツールをご利用いただいているユーザーからの熱い声や製品活用事例を紹介していますので、ぜひご参照ください。
・当ツールの詳細を知るにはこちらから
▼ https://www.agtech.co.jp/preemptive/dotfuscator/product/
(ページ左端の「Dotfuscator メニュー」からは、評価版の申し込みなど他のページにアクセスできます。)
– 製品パンフレットをダウンロードして価格表をチェック!
▼ https://www.agtech.co.jp/preemptive/docs-download-form-introduction_second/