2

我使用 ILSPy 反编译了一个发布程序集,得到了如下代码。当我在 VS 2013 中打开反编译的项目时,每个语句都会出现错误。

using #j;//this line shows up as an error in VS2013
using System;

错误是:

预处理器指令必须作为行上的第一个非空白字符出现

我在下一行也遇到了类似的错误。

string path = #db.#ab(HttpUtility.UrlDecode(text));

问题:使用是什么意思,#如何纠正这些错误?

我还注意到一些反编译的类的名称以开头,#一些命名空间和方法名称也是如此。我从来没有使用过这样的命名约定,所以“ILSpy”是如何提出这样的代码的,这非常令人困惑。

4

1 回答 1

8

不,它不是有效的 C#。可能是反编译的代码在开始时被混淆了,因此使用在 IL 中有效但在 C# 中无效的标识符。

通常,如果您要反编译混淆的代码,那么您的行为违背了代码原作者的意愿——所以我建议您不要这样做。如果您认为自己有正当理由获取某物的源代码,请询问作者。

能把它转换成有效的C#吗?当然 - 只需获取每个#-prefixed 标识符,并将其(一致地)映射到其他东西上,例如

using hashj;
...

string path = hashdb.hashab(HttpUtility.UrlDecode(text));

...最终您将遇到一个名为的类#db,然后将其重命名为hashdbetc。但是混淆的重点是使这是一个痛苦的过程。

于 2016-05-17T19:53:36.497 回答