有没有什么办法可以防止加载到内存中的纯C#程序集可执行文件的转储,该内存最初受32位本地代码包装器的保护。防止Packed .Net可执行文件的内存转储?
回答
@Hasan说得没有办法阻止内存转储。不过,我认为这里有一个更深层次的问题。当你写一个C#程序集“原本是受保护的由32 Bit Exe Native Code Wrapper”(强调我的)时,似乎你想阻止某人检查C#程序集本身的内容。
只要有人亲手参加那个集会,他们就可以打开它,并对它进行更多的了解,超出预期。例如,他们可以使用dotPeek或ILSpy将其反编译为C#源代码。对于使用这些工具的人来说,你可以使用混淆器来让你的生活变得更加困难,但即使是混淆现象也是如此。
底线是:一旦你把它提供给其他人,它已经失去了你的手。 预计其他人会反编译你的代码并在torrent站点上发布副本(除非它是免费的)。 请勿将将您的超级密码数据库密码放入您的代码中,因为有人可以反编译代码并以纯文本形式读取密码。即使您在服务器上运行此代码,也不要将密码放在代码中,原因是我在另一个SO回答here中描述的原因。
N.B.一旦开始分发软件,也无法阻止某人将调试器附加到正在运行的可执行文件,因此,为了检查运行时信息,禁止检查可执行文件本身的问题,某人甚至不需要内存转储。
有没有防止内存转储的傻瓜证明方式。您可以将值设置为secure strings。因此,如果有人需要内存转储,哪些是加密的;他们将无法从中理解。
编写一个作为受保护进程运行的Windows驱动程序。只有通过这个驱动程序启动你的程序,并启动它作为一个受保护的过程。
如果你这样做,即使反病毒程序也不能扫描你程序的内存。这就好像您尝试调用受保护进程的openprocess或readprocessmemory一样,您将收到拒绝访问。
这里的主要问题是驱动程序必须是一个Windows认证的驱动程序,这是耗时的实现。
此外,你将不得不实施一种方法来检查程序已被保护的进程驱动程序调用,如果它不是无法打开程序。这种检查可以很容易地删除。
我有同样的问题,你有没有找到解决办法? – 2014-11-11 12:01:58