2

我有一个 DLL 文件,我无法使用 .NET Reflector 和 JetBrains dotPeek 完全反编译。

基本上所有字段都缺少它们的名称,例如:

private int ;
private string ;
private bool ;

dll被混淆了吗?或者这些名称可以在运行时生成吗?

4

1 回答 1

5

CLI 标准,即说明哪些字符是有效符号的标准,具有非常灵活的规则。必然如此,它描述了许多语言可以针对的 VM。标识符中哪些字符有效的规则是语言实现细节,因此将它们设置得太严格会使将此类语言移植到 CLR 变得困难。

工具利用了这种灵活性。C# 和 VB.NET 都这样做,它们生成带有类似字符的怪异名称,$<确保它们为迭代器和 lambda 表达式之类的东西自动生成的名称永远不会与程序员选择的标识符发生冲突。

混淆器利用了这一点。STX 和 ENQ 等字符是 ASCII 控制码,值小于 0x20 的码。优点是许多程序根本无法显示它们,因为大多数字体没有该字符代码的字形。

您几乎可以肯定违反了该程序的许可条款。“不要逆向工程”条款是大多数许可证中的样板。软件供应商永远不会遇到混淆然后不包含该条款的麻烦。

于 2013-04-13T23:49:59.327 回答