元々32ビットExeネイティブコードラッパーによって保護されているメモリにロードされた純粋なC#アセンブリ実行ファイルのダンプを防止する方法はありますか?Packed .Net実行可能ファイルのメモリダンプを防止するには?
答えて
@ハサンは、メモリダンプを防ぐ方法がないと言うのは正しいです。しかし、私はここに深刻な問題があると思います。 「最初にが32ビットエグゼティブネイティブコードラッパーによってで保護されているC#アセンブリについて」と書くと、誰かがC#アセンブリ自体の内容を調べないようにしたいと思うようです。
誰かがそのアセンブリに手を当てれば、彼らはそれを開けて、あなたが期待するよりも多くを学ぶことができます。たとえば、dotPeekまたはILSpyを使用してC#ソースコードに逆コンパイルできます。難読化ツールを使用すると、これらのツールを使用している人にとってあなたの人生をより困難にすることができます。しかし、難読化さえもこれまでのところしかありません。
一番重要な点は、一度他の人が利用できるようにすると、それはあなたの手にないことです。 誰かがあなたのコードを逆コンパイルしてトレントサイトにコピーすることを期待しています(とにかく無料でない限り)。 コードにスーパーシークレットデータベースのパスワードを入れないでください。誰かがコードを逆コンパイルして、プレーンテキストでパスワードを読むことができるからです。サーバー上でこのコードを実行している場合でも、コードにパスワードを入れないでください。別のSO答えがhereであるためです。
N.B.ソフトウェアの配布を開始すると、誰かが実行可能な実行可能ファイルにデバッガを接続できないようにする方法もないため、実行可能ファイル自体を検査する際に問題が発生しないように、実行時の情報を調べるためにメモリダンプは必要ありません。
メモリダンプを防止する愚かな方法はありません。値はsecure stringsに入れることができます。誰かがメモリダンプを取ると暗号化されます。彼らはそれを理解できないでしょう。
保護されたプロセスとして実行されるWindowsドライバを作成します。このドライバでプログラムを起動し、保護されたプロセスとして起動してください。
これを行うとアンチウイルスプログラムでもプログラムのメモリをスキャンできません。これは、保護されたプロセスのopenprocessまたはreadprocessmemoryを呼び出そうとした場合と同様に、アクセスが拒否されます。
ここでの主な問題は、ドライバがWindows認定ドライバでなければならず、時間がかかります。
また、プログラムが保護されたプロセスドライバによって呼び出されたことを確認するメソッドを実装する必要があります。また、プログラムを開くことができない場合もあります。このようなチェックは簡単に削除できます。
私は同じ問題を抱えていますが、解決策は見つかりましたか? –