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