Отражатель: Означает ли комментарий в этом коде, что все это запутано? - PullRequest
5 голосов
/ 27 февраля 2010

Таким образом, в приведенном ниже коде вы заметите комментарий "// Этот элемент запутан и не может быть переведен."

Что мне интересно, это значит, что вместо некоторого запутанного кода есть комментарий, а то, что следует, на самом деле не запутано, или это означает, что «следующий код запутан»?

Из того, что я могу найти в Интернете, это звучит как первое, но я не уверен. Код явно выглядит запутанным, но он не непередаваемый, просто смешной.

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-летним со знанием БЕЙСИКА, а не каким-то программным обеспечением для запутывания.

Ответы [ 2 ]

3 голосов
/ 27 февраля 2010

Кажется, что это выглядит запутанным в том смысле, что это строковая функция, которая разбивает строку на основе амперсанда и проходит через switch / case, чтобы определить, как с ней обращаться. * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *

Использование (1003) * чисто (на первый взгляд) для читателей запутанного кода в некоторой степени плохо ... *1004*

Конечно, вы можете загрузить любой .NET EXE / DLL с помощью рефлектора Redgate (ранее Reflector Rutz Loeder) для анализа и выгрузки кода, поэтому, независимо от того, насколько он «запутан», обфускация на самом деле не служит цели, поскольку код быть легко декомпилированным

Нет реального способа защитить .NET EXE / DLL, если он не зашифрован и не использует неуправляемый код C / C ++ для загрузки среды выполнения .NET, расшифровки .NET EXE и загрузки в новый домен приложения. .

Надеюсь, это поможет, С наилучшими пожеланиями, Том.

2 голосов
/ 27 февраля 2010

Независимо от того, насколько оно запутано, вы всегда должны иметь возможность декомпилировать в IL, так что вы можете посмотреть на это и посмотреть, действительно ли отражатель показывает вам все.

...