我正在尝试检查应用程序是否试图操纵特定进程(例如,将自身 Hook 到它)。我找不到合适的方法来完成这个。是否可以计算正在运行的进程的校验和?如果不是,我如何检测到这种情况?
最佳答案
其他进程不能在你的进程中创建钩子(Hook),可以修改内存但是要创建钩子(Hook)这段代码必须在你的地址空间中,这可以在启动时将 DLL 注入(inject)你的进程(在运行时注入(inject) dll 是一个困难的),您可以通过在您的进程中列出 DLL 并搜索一些 ReadProcessMemory
、WriteProcessMemory
、OpenProcess
、CallNextHookEx< 来轻松检查这一点
在他们的代码中调用函数。为此,获取函数的地址 ( GetProcAddress
) 和代码中的搜索值(您可以添加一些 asm call
预测以获得小范围结果)。
您可以检查磁盘和内存中的 PE 文件有什么问题,当启动时发生 DLL 注入(inject)时,您的 PE 文件从文件复制到内存后应该已损坏,之后最后一个 dll 库,你应该用额外的 dll 导入覆盖调试符号。这种修改可以在文件上完成,就像在内存中一样。
当您使用 C# 语言时,最好但对您来说可能并不容易的方法是混淆您的代码。我认为这是一个很好的方法,因为你不会 Hook 一些你不知道如何工作的东西,因为你不知道你必须做什么以及在哪里 Hook 。但是对于良好的混淆 C# 代码,您必须为此找到好的软件,并且可能支付不低的价格。
关于c# - 检测进程的内存访问,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8679280/