2012-04-28 55 views
2

有没有什么办法可以防止加载到内存中的纯C#程序集可执行文件的转储,该内存最初受32位本地代码包装器的保护。防止Packed .Net可执行文件的内存转储?

+0

我有同样的问题,你有没有找到解决办法? – 2014-11-11 12:01:58

回答

3

@Hasan说得没有办法阻止内存转储。不过,我认为这里有一个更深层次的问题。当你写一个C#程序集“原本是受保护的由32 Bit Exe Native Code Wrapper”(强调我的)时,似乎你想阻止某人检查C#程序集本身的内容。

只要有人亲手参加那个集会,他们就可以打开它,并对它进行更多的了解,超出预期。例如,他们可以使用dotPeekILSpy将其反编译为C#源代码。对于使用这些工具的人来说,你可以使用混淆器来让你的生活变得更加困难,但即使是混淆现象也是如此。

底线是:一旦你把它提供给其他人,它已经失去了你的手。 预计其他人会反编译你的代码并在torrent站点上发布副本(除非它是免费的)。 请勿将将您的超级密码数据库密码放入您的代码中,因为有人可以反编译代码并以纯文本形式读取密码。即使您在服务器上运行此代码,也不要将密码放在代码中,原因是我在另一个SO回答here中描述的原因。

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

2

有没有防止内存转储的傻瓜证明方式。您可以将值设置为secure strings。因此,如果有人需要内存转储,哪些是加密的;他们将无法从中理解。

0

编写一个作为受保护进程运行的Windows驱动程序。只有通过这个驱动程序启动你的程序,并启动它作为一个受保护的过程。

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

这里的主要问题是驱动程序必须是一个Windows认证的驱动程序,这是耗时的实现。

此外,你将不得不实施一种方法来检查程序已被保护的进程驱动程序调用,如果它不是无法打开程序。这种检查可以很容易地删除。