.net - 反编译DLL时缺少名称

标签 .net

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

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

private int ;
private string ;
private bool ;

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

最佳答案

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

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

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

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

关于.net - 反编译DLL时缺少名称,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15992658/

相关文章:

c# - BlockingCollection 和 CancellationToken 传递

c# - 从c#中的字符串中提取最后一个匹配项

c# - 如何将多个对象序列化为现有的 XmlDocument,而无需在每个组件上设置 namespace ?

.net - 文本框验证仅输入大于零的值

c# - 在 Avalonia 中为 TreeView 节点实现拖放

c# - 如何在 datagridview 中插入新的 datagridview 行并在数据库中(自动)更新?

.net - 无法将 MySQL 日期/时间值转换为 System.DateTime

.net - C# Locks - 在循环之前还是在循环内部锁定更好?

c# - 在 .NET 中散列 SecureString

.net - GAC - 要将程序集添加到 GAC,拖放可以,但复制和粘贴不行?为什么?