检测内存访问进程
其他进程不能在你的进程中挂钩,可以修改内存但是为了挂钩这个代码必须在你的地址空间,这可以在启动时将DLL注入到你的进程中(在运行时注入dll是一个很难),你可以通过在你的程序中列出DLL并在其代码中搜索一些ReadProcessMemory
,WriteProcessMemory
,OpenProcess
,CallNextHookEx
函数调用来容易地检查这个。要做到这一点,得到的代码中的函数和搜索值的地址(GetProcAddress
)(您可以添加一些asm call
预测用于严格范围结果)。
您可以检查什么是错的,在磁盘和内存中您的PE文件,当DLL注入在启动的时候是发生在此之后,从文件复制到记忆您的PE文件应该被损坏,最后的dll库后您应该用附加的dll导入覆盖调试符号。这种修改可以在文件中完成,与内存相同。
当您使用C#语言时,最好的方法但可能不会容易的是混淆您的代码。我认为这是一个很好的方法,因为你不挂钩你不知道如何工作,因为你不知道你必须做什么钩子和在哪里。但是,为了好的混淆C#代码,你必须找到好的软件,并且可能付出的代价并不低。
@gcx:ReadProcessMemory,WriteProcessMemory也会捕获运行时注入,运行时注入是从其他进程注入函数放置的时候会用加载库代码执行(在目标内存中不像目标中的钩子)内存,但调用函数位于DLL) – Svisstack 2011-12-30 12:35:14
我看到你提到混淆。我想,你说这是因为我的“我的过程”的承诺。我通过说我的过程来提到一个特定的过程。我编辑了原文。对困惑感到抱歉。 – 2011-12-30 12:38:33
这是我所知道的最好的免费混淆器:[Eazfuscator.NET](http://www.foss.kharkov.ua/g1/projects/eazfuscator/dotnet/Default.aspx) – ken2k 2011-12-30 12:48:59
你知道有问题的应用程序吗?你知道如何检测你的应用操纵吗? – rene 2011-12-30 12:19:07
对不起,我没有得到你的问题。我不知道如何检测操纵,所以我不知道检测操纵事件。这就是我寻求帮助的原因。 – 2011-12-30 12:33:37
你想实现的目标是什么?如果您试图在自己的应用程序中避免/检测篡改,那么没有任何事情可以100%发挥作用。 – 2011-12-30 12:46:44