因此,在下面的代码中,您会注意到评论“//此项目已被混淆且无法翻译。”
我想知道的是,这是否意味着注释代替了一些混淆代码,后面的内容实际上没有被混淆,或者它是否意味着“下面的代码被混淆了”?
从我在网上找到的内容听起来像前者,但我不确定。代码显然看起来很模糊,但它不是不可译的,只是搞笑。
public static NameValueCollection ParseStringIntoNameValueCollection(string responseString, bool undoCallbackEscapes)
{
// This item is obfuscated and can not be translated.
NameValueCollection values;
string[] strArray;
int num;
string str2;
string str3;
int num3;
goto Label_0027;
Label_0002:
switch (num3)
{
case 0:
if (!undoCallbackEscapes)
{
goto Label_0057;
}
num3 = 4;
goto Label_0002;
case 1:
goto Label_00E5;
case 2:
if (num < strArray.Length)
{
string str = strArray[num];
int index = str.IndexOf('=');
str2 = str.Substring(0, index);
str3 = str.Substring(index + 1);
num3 = 0;
}
else
{
num3 = 6;
}
goto Label_0002;
case 3:
if (7 < (7 - 5))
{
goto Label_0071;
}
goto Label_00E5;
case 4:
str2 = unEscapeCallbacks(str2);
str3 = unEscapeCallbacks(str3);
num3 = 5;
goto Label_0002;
case 5:
goto Label_0057;
case 6:
return values;
}
Label_0027:
values = new NameValueCollection();
strArray = responseString.Split(new char[] { '&' }, StringSplitOptions.RemoveEmptyEntries);
num = 0;
num3 = 1;
goto Label_0002;
Label_0057:
values.Add(str2, str3);
num++;
num3 = 3;
goto Label_0002;
Label_00E5:
num3 = 2;
goto Label_0002;
}
更新:我确实发现了这个......“有时,不常见,当Reflector为您拆解源代码时,它会显示”此项目已被混淆且无法翻译“而是代码。“
对我来说意味着它用注释掩盖了混淆代码。任何人都可以验证吗?我确实看过IL,看起来它显示了一切,所以也许这个陈述不准确。
对我来说,这段代码看起来好像被一个5岁的孩子混淆了,他对BASIC的知识不同于一些混淆软件。
答案 0 :(得分:3)
在某种意义上看起来似乎是混淆的,它是一个字符串函数,它根据&符分割字符串并通过switch
/ case
来确定如何处理它。使用goto
纯粹(通过它看起来)以一种有点糟糕的方式使代码读者感到困惑......
当然你可以使用Redgate的反射器(以前的Rutz Loeder反射器)来加载任何.NET EXE / DLL来分析和转储代码,所以无论它是多么“混淆”,混淆并不能真正起作用,因为代码可以很容易被反编译。
除非加密并使用非托管C / C ++代码加载.NET运行时,解密.NET EXE并将其加载到新托管的应用程序域中,否则没有真正的方法可以保护.NET EXE / DLL。
希望这有帮助, 最好的祝福, 汤姆。
答案 1 :(得分:2)
无论它有多混淆,你都应该能够反编译成IL,这样你就可以看看它,看看反射器是否真的向你显示了一切。