gpt4 book ai didi

c# - DotPeek 无法正确反序列化 dll

转载 作者:行者123 更新时间:2023-12-02 00:15:52 25 4
gpt4 key购买 nike

我已经用dotPeek 1.4反编译了DLL,看看里面发生了什么,但是有一些stage c#代码(请看附件)。有

  • 没有变量名称的变量声明
  • 我认为有些变量是数字,它们没有名称

为什么生成该代码?是否可以保护 dll 免遭反编译或将 dll 作为 release 发布?

enter image description here

我用Reflector试用版反编译时也出现同样的问题

enter image description here

最佳答案

首先,您试图对他们的代码进行逆向工程,从而违反了许可协议(protocol)。

f. Disassembly. You may not reverse engineer, decompile, disassemble or in any other way try to gain access to information regarding the construction of THE PRODUCT.

这是因为 .NET 允许在变量名称中使用比 a-z 多得多的名称。您可以在 MSDN 部分的 Identifiers (C#) 上阅读相关内容。 。 Visual Studio 不会喜欢这些变量,并且会提示,但它们在 IL 中完全有效(而在 C# 中无效)。

使用其他工具查看或转储到十六进制,您可以看到变量已被遮挡,并且类似于 ,实际上是 ACK 字符 ^F 后跟“文本开始”字符看起来像空格字符,但不是空格字符。使用的其他字符包括退格字符。

上述代码的 IL 类似于

.field private static initonly string '\u0001'
.field private static initonly string '\u0002'
.field private static initonly string '\u0003'
.field private static initonly string '\u0004'
.field private static initonly string '\u0005'
.field private static initonly string '\b'
.field private static initonly string '\u0002\u2000'
.field private static initonly string '\u0003\u2000'
.field private static initonly string '\u0005\u2000'
.field private static initonly string '\b\u2000'

你明白了。

我想真正知道他们具体用什么来混淆这段代码(因为看起来很有趣!)。该代码显然是用类似 http://reflexil.net/ 生成的这允许编译后的 dll 保留有关变量名称的提示(但将其更改为无意义),这就是反编译器显示所有奇怪名称的原因(反编译器认为通过保留 dll 中提到的变量名称来进行切割)。

关于c# - DotPeek 无法正确反序列化 dll,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29967990/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com