Внедрение шелл-кода в исполняемый PE файл вручную.Reverse engineering для самых маленьких(часть 4).

Сегодня мы рассмотрим несколько способов внедрения шелл-кода в исполняемый файл под Windows (Portable Executable). Конечно это будет не совсем прям ручное внедрение, мы будем пользоваться редактор двоичных файлов Hiew ( простонародье Хью ). Так же нам потребуется сам шелл-код в формате bin, в данном примере этот код запускается Калькулятор в Windows. Ну и файл жертва, в нашем случае этот.

Шелл-код — это двоичный исполняемый код, который выполняет определенную задачу еще его называют Пейлоад (payloads; полезная нагрузка).

В преведущей статье мы разобрались как устроен исполняемый файл .EXE (PE). Если кратко, из заголовка и секций. Давайте разберем с вам несколько простых способов внедрить код:

  • Внедрение в свободное место секции.
  • Расширение секции.
  • Добавление новой секции.

Внедрение в свободное место.

Запуская программу операционная система создает процес и выделяет ей виртуальную оперативную память куда загружается программа. Виртуальная в том смысле что это изолированный участок оперативной памяти имеющий свое адресное пространство. Память имеет постраничную организаций, то есть блоками определенного размера ( в Windows это вроде 4 килобайта), все не занятое пространство страницы заполняется Null байтами. Так же у этит страниц есть атрибуты ( чтение , запись , исполнение). Например константы удобно хранить в странице с атрибутом только на чтение, они точно не поменяются, так о на заботиться операционная система. Собственно эти атрибуты есть у секций в исполняемом фале, какая в какую страницу будет записана.

Что бы посмотреть атрибуты нажимаем F8 затем F6 выбираем секцию и жмем F2.

И опять же из за страничной организации памяти есть выравнивание, даже если данные занимают у нас 20 байт, все равно будет выделена страница памяти( Выравнивание памяти). Так же есть выравнивание файла, данные в секции занимают 20 байт. Но физически в файл компилятор добавит Null байты до параметра выравнивания.

Вот в это свободное место мы и добавим наш шелл-код. Для этого выделяем участок в нулями скажем с адреса 2A70.

Что бы выделить участок кода нажмите Shift + * , после выделения опять же Shift + * .

Затем нужно вернуть маркер на начало выделенного участка и скопипастить из файла код комбинацией Ctrl + F2.

Теперь нужно изменить точку запуска файла на наш внедренный участок. Заходим в заголовок (F8) нажимаем F3 и редактируем поле Entry Point, не забываем сохранить изменения кнопкой F9.

Готово. Не забудьте отключить антивирус, он очень не любит такие вещи и теперь будет ругаться на ваш файл. Давайте отправим на VirusTotal )))

Добавление новой секции.

Свободное место бывает не всегда. Часто программа плотно упакована и у нас просто нету места куда можно добавить код ( особенно если он достаточно большой). самое простой вариант это добавить новую секцию.

Первым делом добавляем в конец файла 4086 байт, если вы помните это файловое смещение секции в файле (0x1000)

Для добавления нажмите Shift+F3 .

Затем заходим в заголовок (F8), секции (F6) и добавляем новый заголовок (F4). Дальше нам нужно отредактировать его название и данные о размере, атрибутах, памяти.

Но размер файла изменился , теперь нам надо указать новые данные в заголовке.

Такой вариант не понравился больше VirusTotal.

Расширение секции.

С расширение секции все немного сложней, нам придется редактировать все секции. Так как атрибуты секций изменяться. Алгоритм думаю уже понятен.

Добавляем байты в секцию равное файловому смещению, редактируем данные заголовков, меняем размер файл ,меняем точку входа программы если нужно.

Если вы нашли ошибку, пожалуйста, выделите фрагмент текста и нажмите Ctrl+Enter.

Добавить комментарий

Ваш адрес email не будет опубликован.