C# 检测对进程的内存访问

C# 检测对进程的内存访问,c#,process,C#,Process,我试图检查应用程序是否试图操纵一个特定的进程(例如,钩子本身)。我找不到一个合适的方法来实现这一点。在运行过程中计算校验和是否可行?如果不是,我如何检测这种情况?其他进程无法在进程中创建钩子,可以修改内存,但要创建钩子,此代码必须在地址空间中,这可以在启动时将DLL注入进程(在运行时,注入DLL是很难的),您可以通过列出进程中的DLL并在其代码中搜索一些函数调用来轻松检查这一点,这些函数调用包括ReadProcessMemory、WriteProcessMemory、OpenProcess、Ca

我试图检查应用程序是否试图操纵一个特定的进程(例如,钩子本身)。我找不到一个合适的方法来实现这一点。在运行过程中计算校验和是否可行?如果不是,我如何检测这种情况?

其他进程无法在进程中创建钩子,可以修改内存,但要创建钩子,此代码必须在地址空间中,这可以在启动时将DLL注入进程(在运行时,注入DLL是很难的),您可以通过列出进程中的DLL并在其代码中搜索一些函数调用来轻松检查这一点,这些函数调用包括
ReadProcessMemory
WriteProcessMemory
OpenProcess
CallNextHookEx
。为此,获取函数的地址()和代码中的搜索值(您可以添加一些asm
call
predicts以获得精确范围的结果)

您可以检查磁盘和内存中的PE文件有什么问题,当启动时发生DLL注入时,从文件复制到内存中的PE文件应该损坏,在最后一个DLL库之后,您应该用额外的DLL导入覆盖调试符号。此修改可以在与内存中相同的文件上完成


当您使用C语言时,最好的方法(但可能不容易)是模糊代码。我认为这是一个很好的方法,因为你不知道如何钩住你不知道如何钩住的东西,因为你不知道你必须做什么,在哪里钩住。但要想获得好的模糊C代码,你必须找到好的软件,而且可能要付出不低的代价。

你知道有问题的应用程序吗?你知道如何在你的应用程序中检测到发生了Manipulation吗?很抱歉,我没有听到你的问题。我不知道如何检测操纵,所以我不知道如何检测操纵事件。这就是我寻求帮助的原因。你想要达到的实际目标是什么?如果你试图在自己的应用程序中避免/检测篡改,没有什么能100%起作用。@Damien_The_unsiever我正试图保护游戏应用程序免受黑客工具的攻击。试图检测对它的操纵。@gcx:你不应该相信任何人都可以侵入服务器代码的客户端,当你没有服务器时,为什么要保护客户端,这是一个单人游戏?(很抱歉脱离主题,这是一个反问)@gcx:ReadProcessMemory,WriteProcessMemory也会捕获运行时注入,运行时注入是从其他进程注入函数到加载库代码执行时的位置(在目标内存中不像目标内存中的挂钩,而是调用位于dll中的函数)我知道你提到了混淆。我想,你这么说是因为我提到了“我的过程”。我提到一个特定的过程时说我的过程。我编辑了原稿。很抱歉造成混淆。这是我所知道的最好的免费混淆器:@ken2k谢谢,但主题并不是关于混淆。@gcx是的,我知道这有点离题,但Svisstack提到了一个事实,即好的混淆器价格不低,所以我提到了Eazfusctoar,它是免费的,实际上非常好。