実際には、アプリケーションがスヌーププログラムによって「スヌープ」されているかどうかを検出する方法があります。私が提供する解決策は特効薬ではありません。誰かが本当にアプリケーションをスヌープしたい場合は、スヌープソースコードを変更する必要があります(これはオープンソースプロジェクトです)。
snoopが実際に行うことは、アセンブリをアプリケーションに挿入し、挿入されたアセンブリは、ルートから始まるアプリケーションのビジュアルツリーを再帰的に検査することです。つまり、snoopは実際にはアプリケーション内で実行されます。そうは言っても、解決策は、スヌープアセンブリがアプリケーションに挿入されたときにイベントを発生させることです。
まず、アプリケーションのどこかでアセンブリがロードされたイベントをサブスクライブする必要があります(できれば物乞い)。
AppDomain.CurrentDomain.AssemblyLoad += new AssemblyLoadEventHandler(CurrentDomain_AssemblyLoad);
次に、次のようにハンドラーを実装します。
void CurrentDomain_AssemblyLoad(object sender, AssemblyLoadEventArgs args)
{
if (args.LoadedAssembly.FullName.StartsWith("ManagedInjector"))
MessageBox.Show("hey you, stop snooping");//and shut down your application.
}
おそらく、実際の銀の弾丸ソリューションのためにこのソリューションを強化する必要がありますが、少なくともこのソリューションは、現在の最新バージョンのsnoopが(コードを変更せずに)そのまま実行されるのを確実に停止します。より良い解決策は、外部アセンブリがアプリケーションに注入されていないことを確認することです。
ただし、セキュリティはUIレベルで実装されるべきではないため、Snoopのようなユーティリティがセキュリティの脆弱性を引き起こしてはならないという事実は依然として正しいです。しかし、少なくともこれは、人々がアプリケーションを「スヌーピング」するのを防ぐ方法を示しています。