有什么方法可以防止将纯 C# 程序集可执行文件加载到最初受 32 位 Exe 本机代码包装器保护的内存中。
4 回答
@Hasan 说没有办法防止内存转储是正确的。但是,我认为这里有一个更深层次的问题。当您撰写有关“最初受32 位 Exe 本机代码包装器保护”的 C# 程序集(强调我的)时,您似乎想阻止某人检查 C# 程序集本身的内容。
一旦有人接触到该组件,他们就可以打开它并了解比您预期的更多的信息。例如,他们可以使用dotPeek或ILSpy将其反编译为 C# 源代码。您可以使用混淆器让使用这些工具的人的生活变得更加困难,但即使是混淆也只能到此为止。
底线是:一旦您将其提供给其他人,它就无法控制。 预计其他人会反编译您的代码并在 torrent 网站上发布副本(除非它是免费的)。 不要将您的超级机密数据库密码放在代码中,因为有人可以反编译代码并以纯文本形式读取密码。即使您在服务器上运行此代码,也不要将密码放入代码中,原因我在另一个 SO 答案中描述。
注意一旦您开始分发您的软件,也无法阻止某人将调试器附加到您正在运行的可执行文件,因此除非检查可执行文件本身存在问题,否则甚至不需要内存转储即可检查运行时信息.
没有防止内存转储的万无一失的方法。您可以将值放在安全字符串中。因此,如果有人进行内存转储,它们会被加密;他们将无法理解它。
编写作为受保护进程运行的 Windows 驱动程序。仅通过此驱动程序启动您的程序,并将其作为受保护的进程启动。
如果您这样做,甚至防病毒程序都无法扫描您的程序的内存。这就像您尝试调用受保护进程的 openprocess 或 readprocessmemory 一样,您将收到拒绝访问。
这里的主要问题是驱动程序必须是经过 Windows 认证的驱动程序,这很耗时。
此外,您还必须实施一种方法来检查程序是否已被受保护的进程驱动程序调用,并且如果它没有打开程序失败。这种检查可以很容易地删除。
虽然没有完全有效的方法可以防止有人转储您的 .net 可执行文件,但有一些方法可以让这变得更加困难。
看看我的 .net/c# 反调试和反倾销技术的存储库:
https://github.com/Mecanik/Anti-DebugNET
为了回答您的具体问题,有一种方法可以防止“MegaDumper”转储您的可执行文件。
我希望这有帮助。