2016-05-17 76 views
2

我使用ILSPy对发布程序集进行了反编译,并获得了如下所示的代码。当我在VS 2013中打开反编译的项目时,我得到这些语句中的每一个错误。ILSpy反编译器的这一行代码是否有效?

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

的错误是:

预处理器指令必须作为第一个非空格字符上线

我在下面的行也得到了类似的错误。

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

问题:什么是使用#的意思,我怎么能纠正这些错误?

我也注意到一些反编译类的名字以#开头,所以做了一些名字空间和方法名。我从来没有使用过这样的命名约定,所以'ILSpy'如何产生这样的代码非常混乱。

+1

看起来像一个引用的DLL被混淆。 – vendettamit

+0

好的。这就是反编译器如何对混淆代码进行反编译。对我来说是新东西。谢谢。 – Sunil

回答

8

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

通常情况下,如果您正在反编译混淆代码,那么您正在做一些违反代码原始作者的愿望 - 所以我建议不要这样做。如果您认为您有获得源代码的合法理由,请咨询作者。

可以你把它转换成有效的C#吗?当然 - 只需每个#前缀标识符,并将其(一致)映射到其他东西,例如。

using hashj; 
... 

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

...并最终你会跨越一个名为#db类,你会那么重命名为hashdb等。但模糊的点运行是使之成为一个痛苦的过程。

+0

好的。我知道了。谢谢你的出色答案。 – Sunil