我正在尝试在我的应用程序中实现一些基本的反调试功能。我特别想关注的一个方面是试图阻止人们轻松地从我的应用程序中获取可用的内存转储。我在下面阅读了这篇文章: http://www.codeproject.com/KB/security/AntiReverseEngineering.aspx
这给了我很多关于如何检测调试器是否存在的提示,以及有关如何防止内存转储的一些信息。但作者指出,应该注意使用这些技术,例如删除内存中的可执行标头。他提到操作系统或其他程序有时可能想要使用这些信息,但我看不出是出于什么目的。
有没有人得到一些关于如何阻止逆向工程师抛弃我的程序的其他提示?
我在Windows上。
亲切的问候,
Philip Bennefall
答案 0 :(得分:4)
没有合理的方法可以防止有人捕获进程的内存转储。例如,我可以将内核调试器附加到系统,中断所有执行,并从调试器中提取进程的转储。因此,我会专注于使分析更加困难。
以下是一些想法:
对可执行代码进行模糊处理和加密。仅在内存中解密,并且不要将解密的代码保留的时间超过您的需要。
请勿将敏感信息存储在内存中超过必要的时间。使用RtlZeroMemory
或类似的API清除您不再使用的缓冲区。这也适用于堆栈(局部变量和参数)。