ILSpy反编译器的这行代码是否有效?

时间:2016-05-17 19:49:48

标签: c# ilspy

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

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

错误是:

  

预处理程序指令必须显示为行上的第一个非空白字符

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

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

问题:使用#的含义是什么?如何更正这些错误?

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

1 个答案:

答案 0 :(得分:8)

不,它不是有效的C#。有可能是反编译的代码,一开始就被混淆了,所以使用在IL中有效但在C#中没有的标识符。

通常情况下,如果您正在反编译混淆代码,那么您正在做一些违反代码原始作者意愿的事情 - 所以我建议不要这样做。如果您认为您有正当理由获取某些内容的源代码,请询问作者。

可以将其转换为有效的C#吗?当然 - 只需取每个# - 前缀标识符,并将其(一致地)映射到其他内容,例如

using hashj;
...

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

...最终你将遇到一个名为#db的类,然后你将其重命名为hashdb等。但混淆的重点是使这个过程变得痛苦。< / p>