1

这是将用于反射的代码示例:

var i = typeof(Program).Assembly.CreateInstance("test.Program");

软件被混淆后,代码显然会停止工作。

我试图通过搜索一个类的属性来找到一种解决方法,这些属性在混淆后不会改变。我已经用 type.GUID 尝试过,但是当我运行调试版本时,我得到一个 GUID,并且在混淆完成后的版本中,guid 发生了变化。

我正在使用 Eazfuscator.NET 进行混淆。

如果可能,我想避免使用属性来标记类/方法。

关于什么会起作用的任何想法?

4

3 回答 3

2

我确信有一些方法可以遍历所有类型并找到您正在寻找的类型,但是想到的东西都会产生有史以来最难维护的代码。

一些混淆器(我们使用 DeepSea,我不知道 Eazfuscator)允许防止对特定类进行混淆,从而允许对这些类进行反射。在 DeepSea 的情况下,这由属性指示,但那些不会/不应该(我从未检查过:o)进入最终组装。

如果您将反射视为“查看您的程序集的外部进程”并混淆“防止外部进程查看您的程序集”,那么您实际上是在阻止自己做您想做的事情。

于 2011-11-01T21:44:54.603 回答
1

不希望混淆器击败攻击者。只是让理解代码的工作变得更加困难。我希望这是高级盗版保护的一部分

混淆后;压缩、加密并用你的程序集做任何你想做的事情。然后创建另一个包装器项目并将您的程序集作为资源添加到该项目中。附加到AppDomain.CurrentDomain.AssemblyResolve事件(在您的新项目中),每当发生未解决的程序集事件时,读取您的资源(解密、解压缩等)并返回实际程序集。

您也可以尝试混淆您的最终包装应用程序。

有多安全?至少,您可以让攻击者的生活更加艰难。

于 2011-11-01T22:14:42.787 回答
0

我没有确切的答案,但ILSpy的来源可能会对您有所帮助。

于 2011-11-01T21:31:28.893 回答