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

本文关键字:可执行文件 内存 转储 Net | 更新日期: 2023-09-27 18:32:26

有没有办法防止将纯 C# 程序集可执行文件转储加载到最初受 32 位 Exe 本机代码包装器保护的内存中。

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

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

一旦有人拿到了该组件,他们就可以打开它并了解比您预期的更多。 例如,他们可以使用dotPeek或ILSpy将其反编译为C#源代码。 您可以使用混淆器来使使用这些工具的人的生活更加困难,但即使是混淆也只能到此为止。

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

:注:一旦你开始分发你的软件,也没有办法阻止某人将调试器附加到你正在运行的可执行文件,所以除了检查可执行文件本身的问题,有人甚至不需要内存转储来检查运行时信息。

没有万

无一失的方法来防止内存转储。您可以将值放在安全字符串中。因此,如果有人进行内存转储,则对其进行加密;他们将无法从中理解。

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

如果这样做,即使是防病毒程序也无法扫描程序的内存。这就像您尝试调用受保护进程的 openprocess 或读取进程内存一样,您将收到拒绝访问。

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

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

虽然没有完全证明的方法可以防止某人转储您的 .net 可执行文件,但有一些方法可以使这变得更加困难。

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

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

为了回答您的具体问题,有一种方法可以防止"MegaDumper"转储您的可执行文件。

我希望这有所帮助。