なぜ誰から自分を守るのか?
明らかに、保護の段階の1つとしての難読化は、商用ソフトウェアにのみ関連しています。
シリアル番号またはアクティベーションによる登録システムを使用する場合、プログラムを保護するには、お金が足りない場合(プログラムが高価な場合)、または芸術を愛するためにクラッカーを書く「クラッカー」が必要です。 条件分岐の場所の特定やシリアルの確認は、ILコードからの「ノード」がある場合、わかりやすいC#コードが表示される場合よりもはるかに困難です。 もちろん、これは万能薬ではありませんが、ハッキングに必要なn番目の分を追加します。 (nが十分に大きい場合、非常に頑固な個人だけが壊れようとします;)
さまざまな産業スパイから保護することも必要です。 簡単です。メタデータを削除してプログラムの残りの部分を混乱させるだけで、競合他社がプログラムを最初から作成する方が、自分のものを分解するよりも安くなります。
通常、アセンブリメタデータの表示には.NET Reflectorが使用されます。 シンプルで直感的なインターフェースと、プラグインで機能を拡張する機能を備えています。
初心者は、リフレクターのWebサイトでスクリーンショットと使用例を見つけることができます。
いくつかの商用アセンブリビューアとデコンパイラもあります。おそらくそれらを後でリストします(アセンブリの半分だけが試用版を分解し、ライセンスバージョンの「幸せな所有者」はリフレクターとそれほど大きな違いはないと報告します)。
難読化ツールとパッカー
.NETアプリケーションは、主に2つの方法で保護しようとしています。ILコードを直接難読化する (出力がほぼ有効な* .netアセンブリであり、変更されていないMS.NETまたはmonoで実行できる場合)。 パッケージング -アセンブリを変更して、出力がアンパックモジュールとパックされたILコードを含むwinapiアプリケーションになるようにします。
*-アセンブリには無効なIL命令が含まれている可能性がありますが、実行されません。 また、アセンブリは全体として「正常」に見え、サポートされている任意のランタイムで実行できます。
難読化では、すべてが明確であるように見えます。.netアセンブリをフィードし、.netアセンブリを取得します。すべて同じように機能します。 余分な「隠された」データはなく、すべてが適切な場所にあり、混乱して名前が変更されただけのものです。
パッカーの場合、いくつかの問題が待っています。
- これで、アセンブリはWindows(または適切に構成されたモノ+ワイン)でのみ実行されます
- 元のアセンブリをmscoree入力に送信するパッカーは1分で削除され、保護する意味がありません。 mscoreeの内部機能をインターセプトするパッカーは、フレームワークのバージョンに大きく依存しており、一部のウイルス対策製品で誤検知反応を引き起こします。 内部機能の傍受は、一般に繊細で感謝のない仕事です。
- パッカーはネイティブプログラムであり、アプリケーションを利用可能なx86-64コードにコンパイルすることはできません(場合によっては、これによりパフォーマンスが大幅に向上します)
- .netが正しく機能するためには、どの場合でも元のILバイトコードへのアクセスが必要です。 そして、preJITtedアセンブリでさえそれを含むべきです。 そしてそれは、このバイトコードを取得することも本物であることを意味します。
- そして最後に、引用:「実行された場合は解凍できます」
さまざまな「プロテクター」( プロテクター )は通常、両方のアプローチを組み合わせており、このレビューの両方の部分で説明します。
リバースツール
最初の最も基本的なツールはリフレクターです。 通常、誰もが自分の好みに合わせてプラグインを彼に送ります。 reflexilのみをお勧めします。これは、メソッドのバイトコード、アセンブリプロパティの変更を可能にし、便利な厳密名削除ユーティリティを含んでいます。 このプラグインを使用すると、クラックを作成するのに非常に便利です;)
アセンブリが難読化されている場合、リフレクターで表示するのはあまり便利ではないため、変更(またはコードを抜く)する前に「難読化解除」する必要があります。
また、独自の難読化解除ツールを用意しておくと便利です。難読化解除ツールは、特定のタスクのニーズにいつでも簡単に「対応」することができます。
パッカーを扱う場合、デバッガー(WinDbg、OlyDbg)、ダンパー(PEツール)、PEファイルエディター(CFF Explorerなど)などのネイティブリバースエンジニアリング用のさまざまなツールが必要になります。 .net-unpackingの特定のツールと同様に: Generic .NET Unpacker 、 .net dumper(KDD) 、.Net Assembly Rebuilder 。 レビューの後半でそれらに会います。
すべて、私の言い回しはこれで終わります。次の投稿には詳細が含まれます(写真であっても);)
継続→
以下の投稿のおおよその内容: