Отражатель: Означает ли комментарий в этом коде, что все это запутано?
Поэтому в приведенном ниже коде вы заметите комментарий "// Этот элемент запутан и не может быть переведен".
Мне интересно, означает ли это, что вместо некоторого запутанного кода есть комментарий, а то, что следует, на самом деле не запутывается, или это означает, что "следующий код запутан"?
Из того, что я могу найти в Интернете, это звучит как первое, но я не уверен. Код явно выглядит запутанным, но он не непередаваемый, просто смешной.
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, а не каким-то программным обеспечением для запутывания.
2 ответа
Независимо от того, насколько он запутан, вы всегда должны иметь возможность декомпилировать в IL, так что вы можете посмотреть на это и посмотреть, действительно ли рефлектор показывает вам все.
Кажется, это выглядит запутанным в том смысле, что это строковая функция, которая разбивает строку на основе амперсанда и проходит через switch
/case
определить, как справиться с этим. Использование goto
это чисто (на первый взгляд) запутанным читателям кода в несколько плохой манере...
Конечно, вы можете загрузить любой.NET EXE/DLL с помощью рефлектора Redgate (ранее Reflector Rutz Loeder) для анализа и выгрузки кода, поэтому независимо от того, насколько он "запутан", обфускация на самом деле не служит цели, так как код может быть декомпилирован довольно без труда.
Нет реального способа защиты.NET EXE/DLL, если он не зашифрован и не использует неуправляемый код C/C++ для загрузки среды выполнения.NET, расшифровки.NET EXE и загрузки в новый домен приложения...
Надеюсь, это поможет, С наилучшими пожеланиями, Том.