在缓存外部生成本机映像

时间:2009-02-25 12:29:57

标签: .net gac ngen

我想在创建安装程序之前使用NGEN.EXE来生成程序集的本机映像。我希望这会保留我的二进制文件Reflector - 证明。我对此是否正确?

我刚刚了解到所有本机映像现在都存储在本机映像缓存中。有没有办法获得本机二进制文件,然后我可以使用安装程序打包?另一方面,生成本机图像后是否可以摆脱原始程序集?

编辑:我正在使用一个应用程序,它在与服务器通信时使用硬编码密钥进行加密。使用.NET,人们可以轻松地将钥匙放在钥匙上。

5 个答案:

答案 0 :(得分:5)

我可以看到你试图实现的几个问题。

1)正如@Mehrdad所提到的,即使存在原生图像,元数据仍然需要装配。
2)本机映像仅在编译它的机器上有效。 JIT编译器执行通常无法完成的优化,因为它完全知道代码需要运行的硬件。
3)即使是原生图像也可以解编译。 appart一个托管的dll只是稍微容易一些。

您介意告诉我们您为什么要隐藏源代码?

编辑: 根据每个新版本的WGA被黑客入侵的速度来判断,我怀疑,如果你的软件远程有用,有人会在每个新版软件的几小时内将密钥输出到互联网(或p2p或其他),并且将成为那些非常乐意拆解原生图像的人。或者也许只是阅读机器代码:)
我个人的approch将确保您的应用程序运行良好,价格合理。诚实的人不会偷走它,不诚实的人会找到一种方式,不管你做什么。如果他们有你的应用程序运行那么你可以做任何事情来完全控制他们用它做什么,虽然你可以通过先使用混淆器使他们稍微使用反射器,但最后它就像现实生活一样真的,锁只能让诚实的人保持。

当然,如果您可以将应用程序功能的一些重要部分移出客户端并转移到Web服务中,那么您将有更多机会。您可以为客户端创建包含用户名和密码的帐户,应用程序在运行时请求此帐户并使用它对Web服务进行身份验证。如果他们对此应用程序的使用已过期,则Web服务将拒绝其请求。

答案 1 :(得分:3)

NGEN和.net框架对此并不支持,但有第三方工具可以做到这一点,google为“.net链接器”。

我建议不要这样做,MS有正当理由拒绝支持。

答案 2 :(得分:2)

您不能仅发送装配的ngen图像。运行时仍然需要实际的程序集存在,即使它具有它的本机映像。原因是程序集元数据不会转移到本机映像。

答案 3 :(得分:2)

获取此软件列表:

  • {smartassembly}
  • DeployLX CodeVeil
  • Dotfuscator .NET Obfuscator
  • Salamander .NET Obfuscator
  • 语义设计:C#源代码混淆器
  • Spices.Net
  • Thinstall
  • .NET的举止
  • .NET Reactor
  • IntelliLock
  • Eazfuscator.NET
  • SecureTeam CliSecure

这些是混淆器+连接器。

答案 4 :(得分:1)

没有理由要使用原生图像。这个工具是为了加速发展而开发的。它不是一个应用程序,它是一个图像,所以更改计算机CPU,点网络配置将使您的图像无效,所以它不是真正可用。 破解你的软件是可能的,任何软件都被破解,有些软件没有破解? 不要关心盗版,假设它存在:)