我使用ILSPy反编译了一个发布程序集,我得到了如下代码。当我在VS 2013中打开反编译项目时,我会在每个语句中收到错误。
using #j;//this line shows up as an error in VS2013
using System;
错误是:
预处理程序指令必须显示为行上的第一个非空白字符
我也在下一行遇到了类似的错误。
string path = #db.#ab(HttpUtility.UrlDecode(text));
问题:使用#
的含义是什么?如何更正这些错误?
我还注意到一些反编译的类的名称以#
开头,因此一些名称空间和方法名称也是如此。我从来没有使用过这样的命名约定,所以'ILSpy'想出这样的代码是非常令人困惑的。
答案 0 :(得分:8)
不,它不是有效的C#。有可能是反编译的代码,一开始就被混淆了,所以使用在IL中有效但在C#中没有的标识符。
通常情况下,如果您正在反编译混淆代码,那么您正在做一些违反代码原始作者意愿的事情 - 所以我建议不要这样做。如果您认为您有正当理由获取某些内容的源代码,请询问作者。
可以将其转换为有效的C#吗?当然 - 只需取每个#
- 前缀标识符,并将其(一致地)映射到其他内容,例如
using hashj;
...
string path = hashdb.hashab(HttpUtility.UrlDecode(text));
...最终你将遇到一个名为#db
的类,然后你将其重命名为hashdb
等。但混淆的重点是使这个过程变得痛苦。< / p>