5

这与 SafeNet/Aladdin Sentinel HASP 密钥有关。我已经发布到他们的网站,但以防万一其他人知道答案或发现答案有用,我也在这里发布。

根据 SafeNet 在“软件保护和许可 Guid.pdf”中提供的文档,我们应该对供应商代码保密,对吗?

好吧,如果我构建“\Samples\Runtime\csharp\”中提供的示例,然后使用 Envelope 保护应用程序,然后在 JetBrains dotPeek 中反编译 Enveloped 应用程序,我可以很容易地看到 Vendor Code 字符串。Envelope 似乎不会混淆 const 字符串。或者也许它是类级别的字符串,我不知道。

这是使用供应商代码的推荐方式吗?似乎不是很隐秘。如果我将供应商代码字符串放入函数中的临时变量中,那么它就会被混淆。这是应该做的吗?如果是这样,示例代码不应该反映这一点吗?

谢谢。

4

1 回答 1

6

我们注意到了同样的事情。字符串没有被混淆的原因const可能是由于 const 变量是编译时常量,这允许编译器const在编译时用常量值本身替换对变量的引用。因此,在封装过程开始时,基本上没有const要混淆的字符串字段。(这并不完全正确 - 的定义const保留在 IL 中,但仅用于文档目的;任何代码都没有引用它。)

我们处理这个问题的方法是使用在构造static readonly函数中初始化的字符串。static这样做会将字符串值存储为运行时常量,从而允许封装进程正确访问它们以进行混淆。(正如您所提到的,这是通过反编译程序集来验证的。)

于 2014-03-30T01:20:55.893 回答