5

因此,在下面的代码中,您会注意到注释“// This item is obfusated and can't be translate.”

我想知道的是,这是否意味着注释代替了一些混淆的代码,而后面的内容实际上并没有被混淆,还是意味着“下面的代码被混淆了”?

从我在网上可以找到的内容来看,这听起来像前者,但我不确定。代码显然看起来很模糊,但它并非不可翻译,只是很搞笑。

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,它似乎显示了所有内容,所以该陈述可能不准确。

对我来说,这段代码看起来像是被一个了解 BASIC 的 5 岁孩子混淆了,而不是一些混淆软件。

4

2 回答 2

3

从某种意义上说,它似乎看起来很模糊,它是一个字符串函数,它根据 & 符拆分字符串并通过switch/case来确定如何处理它。的用法goto纯粹是(从外观上看)以一种有点糟糕的方式让代码阅读者感到困惑......

当然,您可以使用 Redgate 的反射器(以前称为 Rutz Loeder 的反射器)加载任何 .NET EXE/DLL 来分析和转储代码,所以无论它多么“模糊”,因为代码可以被完全反编译,所以混淆并没有真正起到作用容易地。

没有真正保护 .NET EXE/DLL 的方法,除非它被加密并使用非托管 C/C++ 代码加载 .NET 运行时,解密 .NET EXE 并将其加载到新托管的应用程序域中......

希望这会有所帮助,最好的问候,汤姆。

于 2010-02-26T23:58:44.663 回答
2

不管它多么模糊,你应该总是能够反编译成 IL,所以你可以查看它,看看反射器是否真的向你展示了一切。

于 2010-02-26T23:48:14.310 回答