CSharp - C# 检测或者阻止DLL注入( 例如通过 CreateRemoteThread )

  显示原文与译文双语对照的内容

我正在寻找一个 C# 方法来添加到我的winforms应用程序中,它可以:

a 。检测任何已经加载的模块/dll 。 或者

b 。( 优选优选) 完全阻止dll注入。 这篇文章有很多帮助,但没有提供真正的代码来防御 CreateRemoteThread SetWindowsHookEx Cave Cave Cave Cave 。

编辑

我正在考虑后台线程运行如下代码。 我对这个话题 am,请原谅我的naivety 。


 var trustedModules = new[] {"kernel32.dll","user32.dll","etc"};



 var intrusionDetected =


 Process.GetCurrentProcess()


. Modules.Cast<ProcessModule>()


. Any(module =>!trustedModules.Contains(module.FileName.ToLowerInvariant()));



 if (intrusionDetected)


 {


//do something


 }



时间: 原作者:

对于A 来说,没有简单的方法来做到这一点。 它是检测与obfusication技术之间的esssentially cat-and-mouse游戏。 记录它们的方式超出了答案的范围。 要开始学习,你需要研究各种技术:

  • 监视线程创建( 在具有CLR框架的托管应用程序上很难在后台创建线程) 。
  • 监视更改到 PEB
  • 扫描你的地址空间为标记为 page Execute的意外内存页。
  • 采用调试器检测技术( ,不只是调用)
  • 使用代码签名和加密来帮助防止 static 修改或者replacments到你的二进制文件。
  • 如果操作系统处于"测试模式"中( 这允许未签名的驱动程序运行),则不要运行。

然后,如果没有任何服务器组件,或者动态挑战响应系统,就可以了解所有的保护。

B的简短答案是 Windows 操作系统显式支持代码注入,因这里没有任何简单的方法可以添加到程序。

...