ÃÂÕáÛãçÃÂÙÃÂÞ CUDA ØÔÕÃÂœ? phpMyAdmin - Xakep Online
ÃÂÕáÛãçÃÂÙÃÂÞ CUDA ØÔÕÃÂœ? phpMyAdmin - Xakep Online
ÃÂÕáÛãçÃÂÙÃÂÞ CUDA ØÔÕÃÂœ? phpMyAdmin - Xakep Online
Create successful ePaper yourself
Turn your PDF publications into a flip-book with our unique Google optimized e-Paper software.
взлом<br />
SHARPDEVELOP В ДЕЙСТВИИ<br />
Выполняется куча каких-то проверок и сравнений,<br />
которым надо удовлетворить. Мое же<br />
внимание привлекла последняя инструкция<br />
this.txt.Text = Conversions.ToString(Encrypt.<br />
ParseandDecrypt("fm`{f}kpwrn"));.<br />
Ну да, при правильном раскладе в текстбокс<br />
попадает значение, представляющее собой расшифрованную<br />
строку «fm`{f}kpwrn». Собственно<br />
алгоритм расшифровывания реализуется функцией<br />
ParseandDecrypt из класса Encrypt. Дальше<br />
можно либо разбираться в алгоритме (зачем<br />
оно нам надо?), либо скопировать код функции и<br />
скомпилировать собственный проект, либо просто<br />
сделать один верный прыжок.<br />
Запускаем reflexil из меню Tools и видим IL-код.<br />
Нужно идентифицировать место последнего if и<br />
прыгнуть с него на выявленную команду. В IL нет<br />
операторов ветвления, поэтому они реализуются<br />
в виде последовательности простых команд сравнения<br />
и прыжков. Здесь все как в ассемблере.<br />
Итак, ищем последний переход перед выводом<br />
MessageBox с сообщением nope.<br />
Локализация перехода<br />
IL_00f2: ldc.i4 0x1ca<br />
IL_00f7: ceq<br />
IL_00f9: or<br />
IL_00fa: brfalse.s IL_0110<br />
058<br />
IL_00fc: ldstr "nope"<br />
IL_0101: ldc.i4.s 64<br />
IL_0103: ldstr "sorry"<br />
IL_0108: call valuetype<br />
[Microsoft.VisualBasic]Microsoft.<br />
VisualBasic.MsgBoxResult<br />
[Microsoft.VisualBasic]<br />
Microsoft.VisualBasic.<br />
Interaction::MsgBox(object,<br />
valuetype [Microsoft.VisualBasic]<br />
Microsoft.VisualBasic.MsgBoxStyle,<br />
object)<br />
Меняем brfalse на brtrue, чтобы прыжок совершить,<br />
ну а чтобы избежать проверки else if,<br />
меняем адрес IL_0110 на IL_013d.<br />
Вывод решения в текстбоксе формы<br />
IL_013d: ldarg.0<br />
IL_013e: callvirt instance class<br />
[System.Windows.Forms]System.<br />
Windows.Forms.TextBox app14.<br />
goes::get_txt()<br />
IL_0143: ldstr "fm`{f}kpwrn"<br />
IL_0148: call object app14.Encr<br />
ypt::ParseandDecrypt(string)<br />
IL_014d: call string<br />
[Microsoft.VisualBasic]Microsoft.<br />
VisualBasic.CompilerServices.<br />
Conversions::ToString(object)<br />
IL_0152: callvirt instance void<br />
[System.Windows.Forms]System.<br />
Windows.Forms.TextBox::set_<br />
Text(string)<br />
IL_0157: ret<br />
В левой панели кликаем на название бинарника,<br />
затем нажимаем кнопку Save as и сохраняем его<br />
под именем app14_patched. Запускаем, вводим<br />
любую фразу и в текстбоксе получаем кодовое<br />
слово ihatethereg!!!<br />
НАМ НЕ СТРАШЕН<br />
СЕРЫЙ ВОЛК<br />
Неужели все действительно так просто? На самом<br />
деле и да, и нет. Если мы (и еще туева хуча людей)<br />
знаем о возможности восстановления кода, об<br />
этом должны были позаботиться в Microsoft. Да и<br />
другие конторы не прочь предоставить решения<br />
по защите от анализа и реверса. В целом так и<br />
есть, только решения эти далеко не всегда обеспечивают<br />
реальную защиту.<br />
Начнем с обфускации. В поставку Visual Studio<br />
входит утила под названием Dotfuscator. Ее<br />
задача — усложнить работу реверсера за счет<br />
изменения имен классов, методов и переменных,<br />
XÀÊÅÐ 07 /127/ 09