检测内存入侵
Posted
技术标签:
【中文标题】检测内存入侵【英文标题】:Detect memory intrusion 【发布时间】:2009-12-21 21:48:50 【问题描述】:有一些软件应用程序,例如ArtMoney,可以编辑其他应用程序的内存。
有没有办法检测其他应用程序何时正在编辑我的应用程序的内存?
【问题讨论】:
【参考方案1】:防止基本内存修改的基本思想是加密您关心的内存部分,并进行冗余检查以确保不被修改。
这些都无法阻止坚定的黑客,但足以让脚本小子远离您的地址空间。
【讨论】:
【参考方案2】:许多病毒检查程序使用的一种方法是对可执行文件或内存执行校验和并保存。运行时,偶尔计算一个新的校验和并与原来的比较。大多数程序不会有意修改其可执行文件。
【讨论】:
适用于不可变内存。但大部分内存都不是一成不变的【参考方案3】:简短的回答是否定的,在一般情况下这是不可能的。即使您实施了一些已给出的建议,也没有什么能阻止某人修补执行检查的代码。
我不知道 ArtMonkey 的具体工作原理,但如果它用作调试器,您可以尝试定期检查是否 DebugHook 0,如果是,则做出适当的反应。 (只要确保将该代码放在 $IFNDEF DEBUG 块中,这样就不会给你带来麻烦!)
不过,您可能想问问自己,为什么要阻止人们修补您的记忆。除非存在真正的安全问题,否则您可能甚至不应该尝试。请记住,您的程序将在其上运行的用户计算机是他们的财产,而不是您的财产,如果您过多地干涉用户选择如何处理他们的财产,那么您的程序在道德上与恶意软件没有区别。
【讨论】:
【参考方案4】:我不知道它是如何工作的,我认为可以通过 3 种方式完成:
ReadProcessMemory 和 WriteProcessMemory Windows API 使用调试器(检查 debughook,但这太容易了,所以不会使用它) 注入一个 dll 以便它可以访问所有内存(因为它在同一个进程中)最后一个更容易(检查注入的 dll 或类似的东西)。第一个比较棘手,但我找到了一些关于它的文章:
内存断点:http://www.codeproject.com/KB/security/AntiReverseEngineering.aspx?fid=1529949&fr=51&df=90&mpp=25&noise=3&sort=Position&view=Quick#BpMem 挂钩“WriteProcessMemory”api:http://www.codeproject.com/KB/system/hooksys.aspx【讨论】:
不,DebugHook
对检查进程是否正在调试完全没用,它仅供 IDE 调试器使用。 Windows API 中有IsDebuggerPresent()
(或直接访问PEB),但它非常容易上当,见teamfurry.com/wordpress/2007/02/25/avoiding-debugger-detection。【参考方案5】:
我问了一个类似的问题,结论基本上是你不能阻止这个。 How can I increase memory security in Delphi
【讨论】:
以上是关于检测内存入侵的主要内容,如果未能解决你的问题,请参考以下文章