ドイツの VB.NET フォーラムを調べたところ、頭が痛くなる興味深いものがありました。
ReflexIL またはその他の IL エディターを使用して .NET Framework アセンブリを編集することは実際には可能です。バイパスする必要があるのは、アセンブリの厳密な名前の署名だけです。sn.exe -Vr [assemblyname]
アセンブリ IL を変更した後、厳密な名前の検証をスキップするために実行する必要があります。その後、キャッシュされたネイティブ イメージをクリアする必要があります。C:\Windows\assembly
ディレクトリを調べて、アセンブリに関連するすべての画像を削除するだけです。その後、再起動します。ログインしたら、実行しますngen install [assemblyname]
。これで、新しいネイティブ イメージが生成されます。
これは機能します。仮想環境 (Windows XP x86) でこの手順を確認しました。今、私が最も心配しているのは、.NETVerifyHash
または.NETVerifyData
のメソッドを簡単にバイパスできることですRSACryptoServiceProvider
。これも実際に機能します。私の友人とテストした私は、この問題を確認できました (スクリーンショットを参照してください)。それはかなり簡単でした。
たとえば、.NET Framework 暗号化クラスに基づいて構築されたライセンス システムを作成すると、フレームワークを使用するシステム上のすべての .NET アプリケーションでシステム全体がバイパスされる可能性があります。また、メソッドにフックするだけで、私が呼び出した関数の入力を誰でもログに記録して変更できます。
ここで私の質問は次のとおりです。これは大きな問題になる可能性があるため、どうすればそれについて何かできるでしょうか? もちろん、悪意のあるユーザーが私のアプリケーションを編集することはできますが、システム全体でこれを行うことほど悪くはありません。フレームワークのチェックサムの検証を考えていましたが、.NET Framework にはさまざまな更新プログラムがあるため、これは不可能のようです。
解決策や提案はありますか?マイクロソフトはこの問題に何らかの方法で対応していますか?