检测对进程的内存访问

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

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

你可以检查你的PE文件在磁盘和内存中出了什么问题 ,当启动时注入DLL时,你的PE文件被复制到文件中的内存应该被破坏,在最后一个dll库你应该用你的覆盖调试符号额外的DLL导入。 此修改可以在文件中与内存中相同地完成。

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