*** ВСЕ НАПИСАННОЕ ИСПОЛЬЗОВАТЬ ТОЛЬКО В ОБРАЗОВАТЕЛЬНЫХ ЦЕЛЯХ! ***
-Инструментарий-
OLLYDBG
Приложение, в которое будем вставлять свой код.
Это будет NOTEPAD.EXE.
Желательно сделать копию файла.
Это все ;)
-Начало-
Наша цель - вклеить свой код в Notepad.EXE .
Мы вклеим простой MessageBox на запуск Блокнота.
Запустим Блокнот, и убедимся, что он запускается нормально.
Если ты уверен, что это оригинальный Notepad.exe, открой его в Olly.
Появится следующее окошко:
Для того, чтобы вставлять свой код, нам нужно место для этого в коде программы.
В ехе-файлах бывает много CodeCaves. Это байты (DB 00).
Тебе нужно просто прокрутить код программы немного ниже начала, и ты узришь CodeCave:
Красным прямоугольником выделен кусок с CodeCave'ами? ;)
Сюда ты можешь вставить любой код, и твоя программа не будет вылелать.
Если ты знаешь API-функцию для вызова MessageBox просто пропусти эти строчки.
Это все, что нужно знать о MessageBox.
Давайте же сделаем что-нибудь с помощью CodeCaves.
Для того, чтобы использовать MessageBox, нам нужно создать текст, который мы будем выводить в
MessageBox. На следующей картинке я выделил пару строк с CodeCaves и
показал меню BinaryEdit для тебя (оно нам пригодится).
Если ты нажал Binary=>Edit или (CTRL+E) ты увидишь следующее окно.
Просто заполни верхнее поле так же, как и я.
Нажми OK, и ты увидишь модифицированный код (выделен красным):
Нажми теперь CTRL+A, чтобы переанализировать код.
OK! Теперь, если ты хочешь сделать заголовок сообщения другим, продублируй эту строчку
(это как второй параметр вызова процедуры).
-Немного ассемблера-
Пришло время и для ASMа ;)
Вот хороший пример!
Эти строчки, введенные в Олли будут выглядеть так:
Видишь стрелку?! ЭТО ОЧЕНЬ ВАЖНО!
Ведь если мы просто запустим программу, то ничего не произойдет. Почему?
Потому что наша маленькая процедура еще нигде не вызывается!
Нужно выписать адрес ее начала, т.е. адрес "PUSH 0", т.к. нам нужно сделать прыжок
на нашу процедуру и вернуться назад ;)
Отлично. Теперь вернись на начало программы (кнопка С на панели инструментов Олли, либо как на рисунке).
Теперь мы на самой первой строчке, которая будет выполняться.
Вы же еще помните, что наша цель - вставка своего кода?
Тогда мы продолжим!
Выделите пару строк с начала и скопируйте их в буфер обмена.
Вставьте их в любой текстовый реактор - они нам еще пригодятся.
Снова вернись на начало программы.
(На картинке выше это PUSH 70).
Двойной щелчок по этой строке отобразит нам следующее окно.
В него нужно ввести "JMP <адрес PUSH 0, который мы записывали ранее>"
Нажми кнопку Assemble и код программы снова изменится, т.е. изменения выделятся красным.
Посмотри на красный прямоугольник! На этот адрес нам нужно перепрыгнуть по завершении нашего кода.
Но если мы перепрыгнем сюда после инъекции, программа выполнится будто бы без нее
Поэтому есть еще одна штука, которую нужно сделать!
Сравни новое начало программы со старым, что мы копировали в текстовый редактор.
Ты увидишь, что две строчки переписались! Но нам нужны они для нормальной работы
программы без ошибок. Найди строки, которые перезаписались.
В моем случае это был следующий код:
Щелкни по первой строчке кода (наш JMP) и нажми ENTER.
Ты попадешь на вставленный код вызова MessageBox!
После CALL MessageBoxA нам нужно будет вставить эти две строчки И прыгнуть назад!
ВОТ ВСЕ!
(Проверить, правильно ли работает прыжок легко - Нажать на нем ENTER!)
Чтобы сохранить наш "модифицированный" Блокнот, выполни действия как на картинке:
Затем нажми Copy All. В появившемся окне нужно нажать правой кнопкой мыши,
выбрать пункт меню Save File и сохранить под новым именем. Запустите файл:
По нажатию ОК запустится Блокнот ;)
-Напоследок-
НЕ НАПРЯГАЙТЕ дебаггер вставкой шеллов, и прочего зловредного кода!