NGEN 处理 .NET 应用程序是否有助于保护其免遭逆向工程?如果没有我什么时候使用它?

问题描述 投票:0回答:3

如果 Ngen 不保护我的应用程序,我何时会合理预期在我的职业生涯中使用此应用程序?

c# .net vb.net ngen
3个回答
2
投票

Jeffrey Richter 在他的书中写了一篇很棒的文章,我不知道第三版是否有它,但这是他在 2002 年关于 Ngen'ing 的一篇很棒的文章,它仍然具有相关性。

亮点:

同时,还有一些潜在的 NGen 文件的问题:

  • 没有知识产权保护。很多人相信 或许可以发送 NGend 文件而不传送文件 包含原始IL代码 从而保持他们的智力 财产是秘密。不幸的是,这 是不可能的。在运行时,CLR 需要访问程序集 元数据和 NGend 文件不 包含元数据。

  • NGend 文件可能会不同步。当 CLR 加载一个 NGen 的文件比较了一些 的属性关于 先前编译的代码和 当前的执行环境。如果有的话 的属性不匹配,则 NGen 的文件无法使用,并且 使用正常的 JIT 编译过程 相反。

  • 管理不善。 NGen 的文件不会自动删除 程序集被反向卸载 轻松影响 .NET Frameworks 管理和 XCOPY 部署 故事。

  • 较差的加载时间性能(变基)。当 Windows 加载 NGend 文件,它检查是否 文件在其首选基地加载 地址。如果文件无法加载 首选基地址,然后是 Windows 重新定位文件,修复所有 内存地址引用。这是 非常耗时,因为 Windows 必须将整个文件加载到 内存并修改其中的各个字节 文件。欲了解更多信息 变基请参阅我的书: 为 Microsoft 编写应用程序 Windows,第四版(微软 按)。

执行时间性能较差。

在编译代码时,NGen 无法像 JIT 编译器那样对执行环境做出尽可能多的假设。这会导致 NGen.exe 生成具有许多内存引用间接的代码,而这些对于 JIT 编译的代码来说是不必要的


1
投票

NGen 仅用于编译 IL 以提高性能。 您可能需要研究代码混淆以保护应用程序免受逆向工程的影响。


0
投票

加载速度才是它真正有用的地方。也就是说,它可以实现高达 2000%(是的,这是正确的)的改进。

编辑:

请注意,JIT 化的代码通常比 NGEN 化的代码更快。

© www.soinside.com 2019 - 2024. All rights reserved.