元々32ビットのExeネイティブコードラッパーによって保護されていたメモリにロードされた純粋なC#アセンブリ実行可能ファイルのダンプを防ぐ方法はありますか?
4 に答える
@Hasanは、メモリダンプを防ぐ方法はないと言っているのは正しいです。しかし、ここにはもっと深い問題があると思います。「元々は32ビットのExeネイティブコードラッパーによって保護されている」(私の強調) C#アセンブリについて書くとき、誰かがC#アセンブリ自体の内容を調べないようにしたいようです。
誰かがそのアセンブリを手に入れるとすぐに、彼らはそれを割って開いて、あなたが期待するよりもそれについてもっと学ぶことができます。たとえば、dotPeekまたはILSpyを使用してC#ソースコードに逆コンパイルできます。難読化ツールを使用して、これらのツールを使用している人の生活をより困難にすることができますが、難読化でさえこれまでのところしか進んでいません。
つまり、他の人が利用できるようにすると、手に負えなくなります。 他の誰かがあなたのコードを逆コンパイルし、トレントサイトにコピーを投稿することを 期待してください(とにかく無料でない限り)。誰かがコードを逆コンパイルしてプレーンテキストでパスワードを読み取る可能性があるため、極秘データベースのパスワードをコードに入れないでください。このコードをサーバーで実行している場合でも、ここで別のSOの回答で説明している理由から、コードにパスワードを入れないでください。
注意:ソフトウェアの配布を開始すると、実行中の実行可能ファイルにデバッガーを接続することを防ぐ方法もありません。したがって、実行可能ファイル自体の検査に関する問題がなければ、ランタイム情報を検査するために誰かがメモリダンプを必要としません。 。
メモリダンプを防ぐための絶対確実な方法はありません。安全な文字列に値を入れることができます。したがって、誰かがメモリダンプを取得した場合、これは暗号化されます。彼らはそれを理解することができなくなります。
保護されたプロセスとして実行されるWindowsドライバーを作成します。このドライバを介してのみプログラムを起動し、保護されたプロセスとしても起動します。
これを行うと、アンチウイルスプログラムでさえプログラムのメモリをスキャンできなくなります。これは、保護されたプロセスのopenprocessまたはreadprocessmemoryを呼び出そうとすると、アクセスが拒否された場合と同じです。
ここでの主な問題は、ドライバーはWindows認定のドライバーである必要があり、これを実現するには時間がかかることです。
また、プログラムが保護されたプロセスドライバーによって呼び出されたことを確認し、プログラムを開くのに失敗しなかった場合は、メソッドを実装する必要があります。この種のチェックは簡単に削除できます。
誰かがあなたの.net実行可能ファイルをダンプするのを防ぐ完全な方法はありませんが、これをはるかに難しくする方法があります。
.net / c#のアンチデバッグおよびアンチダンピング技術については、私のリポジトリを見てください。
https://github.com/Mecanik/Anti-DebugNET
特定の質問に答えるために、「MegaDumper」が実行可能ファイルをダンプしないようにする方法があります。
これがお役に立てば幸いです。