检测内存访问进程

问题描述:

我想检查一个应用程序是否试图操纵一个特定的进程(例如钩子本身)。我无法找到一个合适的方法来完成这一点。计算校验和是否可以运行?如果不是我怎么能检测到这种情况?检测内存访问进程

+0

你知道有问题的应用程序吗?你知道如何检测你的应用操纵吗? – rene 2011-12-30 12:19:07

+0

对不起,我没有得到你的问题。我不知道如何检测操纵,所以我不知道检测操纵事件。这就是我寻求帮助的原因。 – 2011-12-30 12:33:37

+0

你想实现的目标是什么?如果您试图在自己的应用程序中避免/检测篡改,那么没有任何事情可以100%发挥作用。 – 2011-12-30 12:46:44

其他进程不能在你的进程中挂钩,可以修改内存但是为了挂钩这个代码必须在你的地址空间,这可以在启动时将DLL注入到你的进程中(在运行时注入dll是一个很难),你可以通过在你的程序中列出DLL并在其代码中搜索一些ReadProcessMemory,WriteProcessMemory,OpenProcess,CallNextHookEx函数调用来容易地检查这个。要做到这一点,得到的代码中的函数和搜索值的地址(GetProcAddress)(您可以添加一些asm call预测用于严格范围结果)。

您可以检查什么是错的,在磁盘和内存中您的PE文件,当DLL注入在启动的时候是发生在此之后,从文件复制到记忆您的PE文件应该被损坏,最后的dll库后您应该用附加的dll导入覆盖调试符号。这种修改可以在文件中完成,与内存相同。

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

+0

@gcx:ReadProcessMemory,WriteProcessMemory也会捕获运行时注入,运行时注入是从其他进程注入函数放置的时候会用加载库代码执行(在目标内存中不像目标中的钩子)内存,但调用函数位于DLL) – Svisstack 2011-12-30 12:35:14

+0

我看到你提到混淆。我想,你说这是因为我的“我的过程”的承诺。我通过说我的过程来提到一个特定的过程。我编辑了原文。对困惑感到抱歉。 – 2011-12-30 12:38:33

+1

这是我所知道的最好的免费混淆器:[Eazfuscator.NET](http://www.foss.kharkov.ua/g1/projects/eazfuscator/dotnet/Default.aspx) – ken2k 2011-12-30 12:48:59