12.07.2015 Views

Август - Xakep Online

Август - Xakep Online

Август - Xakep Online

SHOW MORE
SHOW LESS
  • No tags were found...

You also want an ePaper? Increase the reach of your titles

YUMPU automatically turns print PDFs into web optimized ePapers that Google loves.

взломВот так выглядит наш декодерРезультат невыставленных на секцию кода атрибутов RWEциклов (mov ecx, 232). Разумеется, цикл декодировки будемреализовывать с помощью «loop адрес». Теперь у нас естьпрактически все данные для написания декодировщика. Вотего вид (под отладчиком OllyDbg по смещению 01007DA3h):MOV ECX,232; установка счетчикаPUSH EDX; сохранение регистра edxPUSH ECX; сохранение регистра ecxMOV EDX,[ECX+01006AE0]; помещение в edx декодируемогозначения из памятиXOR EDX,35; декодированиеMOV [ECX+01006AE0],EDX; запись декодированногокода на его местоPOP ECX; восстановление регистра ecxPOP EDX; восстановление регистра edxLOOP 01007DA8; операция циклаPUSH 70PUSH 01001888; две инструкции секции кода,которые мы затерли jmp’омJMP 01006AE7; переход к декодированному кодуТребуется сосредоточениеКак видишь, код прост и в комментариях не нуждается. Еслиты еще не ввел эти инструкции под отладчиком, то сделайэто и приготовься к выходу в астрал. Готов? Теперь следующийшаг: вставляй на точке входа операцию jmp 01007DA3,а 2 байта, которые остаются после этой операции, как я ужеговорил выше, заменяй nop’ами (скорее всего, это произойдетавтоматически). Следующим логически верным шагом будеткодирование секции кода по алгоритму xor 35 (или по тому,которым ты его заменил, а алгоритм тут может быть любым!).Но как это сделать, если у нас нет шестнадцатеричного редактора?На самом деле он нам и не нужен! Ведь мы уже встроилив файл декодировщик, а при незашифрованной секции кодаон работает как кодер, то есть в обратном направлении! Значит,можно просто запустить программу на исполнение, и онасама зашифрует секцию кода. Один тонкий момент: перед темкак нажать для запуска программы на исполнение,разреши запись в секцию кода (это делается так: нажимай, указывай нужную нам секцию (она начинается по адресу01001000h) правой кнопкой мыши и выбирай «Set access Full Access»). После этого запускай процесс ().Теперь наша программа закодировала сама себя!Возникает только одна проблема: кодер затер байты перехода,который мы вставили в начало секции. Это легко исправить,нужно снова поменять эти байты на jmp 01007DA3. Итак, всеготово! Сохраняй файл под другим именем, это делается следующимобразом: в меню правой кнопки мыши выбери «Copyto executable All modifications». Olly спросит нас, копироватьли данные в файл, на что надо ответить: «Copy all». В открывшемсяокне снова жми на правую кнопку мыши, выбирайSave file и сохраняй файл, например, под именем note1.exe.Теперь закрой Olly и попробуй запустить этот файл. Программане хочет стартовать и выдает ошибку. Это происходитпотому, что секция кода защищена от записи! Чтобыубедиться в этом, попробуй загрузить модифицированныйфайл из‐под Olly, предварительно дав атрибуты RWE длясекции кода (это мы уже делали выше). Программа тут жезаработает! Значит, надо выставить атрибут RWE намертво,зафиксировав его в нашей PE’шке. Это очень легкосделать с помощью, например, LordPE или Hiew, но какбыть, когда под рукой их нет? В справочнике находим, что вPE-заголовке 4 байта, которые в нашем файле начинаютсяс десятичного смещения 516 от самого его начала, отвечаютза выставление флагов секции .text. Я нашел эти байты,открыв экзешник прямо в блокноте, и отсчитал 31 байт отзаголовка секции (строки «.text», найденной с помощью поиска).Мы должны установить в четвертом, последнем байтеэтой последовательности (по десятичному смещению 519 отначала файла, в текстовом виде он выглядит как апостроф)старший бит в противоположное значение. Как это сделать?Из таблицы символов (а можно и при помощи debug.com)выясняем, что символу апострофа соответствует код 60h.Теперь вводим это значение в calc.exeи переключаемся в режим bin, чтобы увидеть, чему равно60h в двоичном виде (01100000). После этого применяемоперацию xor с помощью того же калькулятора. Xor позначению 10000000 даст нам установку старшего бита вединичное значение, что и требуется. В результате получаемзначение 11100000 в двоичном или E0h в шестнадцатеричномвиде.Теперь делаем следующее: выясняем десятичное значениеэтого числа (224), удаляем из‐под блокнота этот символапострофи на его место впечатываем новый символ, набирая«224» на цифровой клавиатуре с нажатой кнопкой . Всеготово! Теперь сохраняем файл и запускаем! Все работает!Зачем все это?Ты спросишь: «Зачем столько мучений, когда можновоспользоваться удобными хакерскими инструментами исделать ту же работу вдвое быстрее?» Ответ прост. Это необходимодля совершенствования умственных способностей.Тренируйся, выдумывай себе головоломки и скоро ты постигнешьискусство работы с форматом PE без инструментов. zwarningВнимание! Перед тем какправить любой файл, простонеобходимо его зарезервировать.Иначе ты рискуешьпотерять важные данные вовремя эксперимента.linkswww.wasm.ru — там ты узнаешь,как достичь дао в областикодинга.www.cracklab.ru — здесь тусуетсялучшая часть крякерскогосообщества.www.xakep.ru — тут все понятно;). Лучший IT-журнал своеговремени.xàêåð 08 / 104 / 07069

Hooray! Your file is uploaded and ready to be published.

Saved successfully!

Ooh no, something went wrong!