检测对进程的内存访问

时间:2011-12-30 12:08:03

标签: c# process

我正在尝试检查某个应用程序是否试图操纵某个特定进程(例如,将其自身挂钩)。我找不到合适的方法来实现这一目标。是否可以计算运行过程的校验和?如果不是我怎么能发现这种情况呢?

1 个答案:

答案 0 :(得分:4)

其他进程无法在你的进程中挂钩,可以修改内存但是要挂钩这个代码必须在你的地址空间中,这可以做到在启动时向你的进程注入DLL(在运行时注入dll是一个很难,你可以通过在你的过程中列出DLL并在他们的代码中搜索一些ReadProcessMemoryWriteProcessMemoryOpenProcessCallNextHookEx函数调用来轻松检查这一点。要做到这一点,请在代码中获取函数和搜索值的地址(GetProcAddress)(您可以为紧密范围的结果添加一些asm call预测。)

你可以检查你的PE文件在磁盘和内存中有什么问题,当启动时注入DLL时,你的PE文件从文件复制到内存后应该被破坏,之后最后的dll库你应该用额外的dll导入覆盖调试符号。这种修改可以在文件中完成,也可以在内存中完成。

最好的方法,但在使用C#语言时可能不容易,模糊代码。我认为这是一个很好的方法,因为你不会挂钩你不知道工作的东西,因为你不知道你必须做什么钩子以及在哪里。但是对于好的混淆C#代码,你必须找到适合它的好软件并且可能付出不低的代价。