Có thực sự là một cách để phát hiện xem ứng dụng của bạn đang được "snooped" bởi chương trình snoop hay không. Giải pháp mà tôi đưa ra không phải là một viên đạn bạc, và nếu ai đó thực sự muốn sử dụng ứng dụng của bạn, họ sẽ phải sửa đổi mã nguồn snoop (đó là một dự án nguồn mở).
Snoop thực sự thực hiện là nó đưa một assembly vào ứng dụng của bạn, và assembly lắp ráp đệ quy kiểm tra các cây ứng dụng trực quan của bạn bắt đầu từ gốc. Nói cách khác, snoop thực sự chạy bên trong ứng dụng của bạn. Điều đó đang được nói, giải pháp là để nâng cao một sự kiện khi lắp ráp snoop được tiêm vào ứng dụng của bạn.
Trước tiên, bạn cần phải đăng ký sự kiện lắp ráp tải ở đâu đó trong ứng dụng của bạn (tốt hơn là begginging):
AppDomain.CurrentDomain.AssemblyLoad += new AssemblyLoadEventHandler(CurrentDomain_AssemblyLoad);
Sau đó, bạn sẽ thực hiện xử lý hơi như thế này:
void CurrentDomain_AssemblyLoad(object sender, AssemblyLoadEventArgs args)
{
if (args.LoadedAssembly.FullName.StartsWith("ManagedInjector"))
MessageBox.Show("hey you, stop snooping");//and shut down your application.
}
Bạn có thể cần phải tăng cường giải pháp này cho giải pháp bạc đạn thực, nhưng ít nhất giải pháp này chắc chắn sẽ dừng phiên bản mới nhất của snoop đang chạy như (không có mã sửa đổi). Giải pháp tốt hơn là kiểm tra xem không có assembly bên ngoài nào được đưa vào ứng dụng của bạn hay không.
Tuy nhiên, Kent vẫn đúng trong thực tế là một tiện ích như Snoop không được gây ra bất kỳ lỗ hổng bảo mật nào vì bảo mật không được triển khai ở cấp UI. Nhưng ít nhất điều này cho bạn thấy làm thế nào để ngăn chặn mọi người từ "snooping" ứng dụng của bạn.
Câu hỏi hay tự hỏi bản thân mình –
Bạn có thể cung cấp thêm thông tin về chương trình "Snoop" này hay đăng liên kết tới thông tin trên đó không? –