ConfuserEx:在Mono上出现System.TypeInitializationException

13
我无法在mono上运行我的混淆应用程序。未混淆的应用程序可以在mono上运行。当我在win7上使用.net框架时,两个版本都没有问题。以下是我收到的异常信息:“未处理的异常:System.TypeInitializationException:“<Module>”的类型初始化程序引发了一个异常。---> System.NullReferenceException:对象引用未设置为对象实例。在此过程中,它需要从外部库加载其他代码,这个库也经过了混淆。如何调试和修复这个问题?更新:似乎在Windows Mono上也会发生这种情况。更新2:这里还有一个关于错误的Github问题条目,其中包含更多细节:https://github.com/yck1509/ConfuserEx/issues/535

我没有使用ConfuserEx或mono - 也许它们使用的是Linux不支持的东西 - 我猜这是构造函数抛出异常的地方,但你拍摄的代码中没有显示任何可能引发NullReferenceException的内容。我认为你没有简单的调试方法,因为这基本上是混淆的重点,所以你可能需要深入挖掘并理解代码。也许粘贴整个构造函数的代码,我可以尝试帮助你。 - gilmishal
谢谢您的回复,我已经添加了一个Pastebin链接来展示整个源代码。还有一件事情我可以尝试,就是禁用单个保护措施并查看哪一个导致了问题。 - Tyron
看起来这是一个经典的Trace.WriteLine调试的情况。在静态初始化程序的每个语句后打印调试信息,以缩小问题发生的位置(并将任何静态字段的初始化移动到静态初始化程序中)。 - Dirk Vollmar
1
我记得在我的WPF应用程序中使用了ConfuserEx。我也遇到了一些问题,但只有在Windows上(没有Mono)才会出现。正如你所猜测的那样,我禁用了所有保护措施,然后逐个启用它们。这很有帮助。你可以尝试同样的方法。 - Gabrielius
好的,谢谢你的建议,我会在几天内测试它们。 - Tyron
显示剩余2条评论
2个回答

8

我曾对一个不被使用但是作为外部库的C#类使用了最高级别的混淆,这似乎就是问题所在。

当我将混淆级别降低到“强制”时,它可以工作。虽然不是理想的解决方案,但目前可以使用。


0

我也设置了“反调试”和“反篡改”保护措施的移除。这对我很有效。

<protection id="anti debug" action="remove"/>
<protection id="anti tamper" action="remove"/>

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接