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