防止打包的.Net可执行文件的内存转储?

时间:2012-04-28 05:31:59

标签: c# .net protection

有没有办法阻止将纯C#程序集可执行文件转储到最初受32位Exe Native Code Wrapper保护的内存中。

4 个答案:

答案 0 :(得分:3)

@Hasan说的是没有办法阻止内存转储。但是,我认为这里存在更深层次的问题。当你写一个C#程序集被“32位Exe本机代码包装器”(最重要的是受保护的)(强调我的)时,你似乎想要阻止某人检查C#程序集本身的内容。

只要有人亲自操作该组件,他们就可以将其打开并了解更多信息。例如,他们可以使用dotPeekILSpy将其反编译为C#源代码。你可以使用混淆器让使用这些工具的人的生活变得更加困难,但即使混淆也只是到目前为止。

最重要的是:一旦你将其提供给其他人,它就会失控。 期待其他人会反编译您的代码并在torrent网站上发布副本(除非它是免费的)。 不要将超级秘密数据库密码放在代码中,因为有人可以反编译代码并以纯文本形式读取密码。即使您在服务器上运行此代码,也不要将密码放在代码中,原因我在另一个SO回答here中描述。

N.B。一旦开始分发软件,也无法阻止某人将调试器附加到正在运行的可执行文件中,因此除了检查可执行文件本身的问题之外,有人甚至不需要内存转储来检查运行时信息。

答案 1 :(得分:2)

没有防止内存转储的万无一失的方法。您可以将值放在secure strings中。如果有人进行内存转储,则加密;他们无法理解它。

答案 2 :(得分:0)

编写一个作为受保护进程运行的Windows驱动程序。只能通过此驱动程序启动程序,并将其作为受保护的进程启动。

如果你这样做,反病毒程序甚至都不能扫描程序的内存。这就好像您尝试调用受保护进程的openprocess或readprocessmemory,您将收到拒绝访问。

这里的主要问题是驱动程序必须是经过Windows认证的驱动程序才能实现。

此外,您还必须实现一种方法来检查受保护进程驱动程序是否已调用该程序,以及是否无法打开该程序。这种检查可以很容易地删除。

答案 3 :(得分:0)

虽然没有完全可靠的方法可以防止某人转储您的.net可执行文件,但有很多方法可以使此操作更加困难。

看看我的.net / c#反调试和反倾销技术存储库:

https://github.com/Mecanik/Anti-DebugNET

要回答您的特定问题,有一种方法可以防止“ MegaDumper”转储您的可执行文件。

我希望这会有所帮助。