Как добавить новый сегмент в прогамму (сложно)

Тема в разделе "WASM.ASSEMBLER", создана пользователем alex-rudenkiy, 4 авг 2017.

  1. alex-rudenkiy

    alex-rudenkiy New Member

    Публикаций:
    0
    Регистрация:
    26 май 2017
    Сообщения:
    16
    Здравствуйте, скажите пожалуйста, кто нибудь знает УНИВЕРСАЛЬНЫЙ алгоритм для добавления "executeble code" сегмента (естественно с каким нибудь байт-кодом) в произвольную программу вручную, без всяких Супер-Пупер-Мега-Крэкерских-программ? Уже два дня сижу пыхчу, чуть начинаю делать, ВСЁ...вся структура и адресация внутри программы летит..., пипец кароче начинается :suicide:, так вот подскажите пж, очень просто интересно :this:
     
  2. SadKo

    SadKo Владимир Садовников

    Публикаций:
    8
    Регистрация:
    4 июн 2007
    Сообщения:
    1.610
    Адрес:
    г. Санкт-Петербург
    Базонезависимый код? Не, не слышали.
     
  3. alex-rudenkiy

    alex-rudenkiy New Member

    Публикаций:
    0
    Регистрация:
    26 май 2017
    Сообщения:
    16
    Возможно, я где то читал статью на красивом сайте, но там всё на Инглише и ни фига не понятно так как всё в куче там написано, но там мельком можно было разобрать, только то что они как-то добавили сегмент вручную, но как не понятно, щяс буду искать эту статью.
     
  4. alex-rudenkiy

    alex-rudenkiy New Member

    Публикаций:
    0
    Регистрация:
    26 май 2017
    Сообщения:
    16
  5. Indy_

    Indy_ Well-Known Member

    Публикаций:
    4
    Регистрация:
    29 апр 2011
    Сообщения:
    4.775
    alex-rudenkiy,

    > кто нибудь знает УНИВЕРСАЛЬНЫЙ алгоритм для добавления "executeble code"

    PE-loader. То решение, которое вы используете к задаче называется инфектом.

    зы: тс задал вопрос на клабе, причём хотел что бы за него константы посмотрели в хидерах, так что всё ясно сним.

    > только я сегмент с секцией перепутал :blush2::sarcastic_hand:
     
  6. alex-rudenkiy

    alex-rudenkiy New Member

    Публикаций:
    0
    Регистрация:
    26 май 2017
    Сообщения:
    16
    Ну короче я вот смотрите что смог сделать, добавил описание секции "lol", увеличил кол-во секций на 1 и добавил байт-код (для примера), но к сожалению ollydbg не собирается его открывать, помогите пожалуйста, что ещё нужно сделать?
     

    Вложения:

  7. rmn

    rmn Well-Known Member

    Публикаций:
    0
    Регистрация:
    23 ноя 2004
    Сообщения:
    2.329
    alex-rudenkiy,
    Еще нужно внимательно следить за тем, какие адреса для секций задаешь. Секции не могут пересекаться друг с другом в памяти (о чем, кстати, и написано в логе).
     
  8. comrade

    comrade Константин Ёпрст

    Публикаций:
    0
    Регистрация:
    16 сен 2002
    Сообщения:
    232
    Адрес:
    Russian Federation
    Долго не открывал эту тему, уж слишком пахла ранними 2000-ыми. "How to do DLL Injection?" "How to add a new PE section?" и прочее прочее. Очень много на эти темы написано на легендарных форумах woodmann, board.anticrack.de, exetools, asmcommunity.net, masm32.com (давно сдохли но может остались архивы на www.archive.org)

    Писал похожее сам, смотри здесь: http://comrade.ownz.com/projects/petools.html
    С удовольствием отвечу на любые вопросы по сей программе.

    Писал в наивной юносте, так что код оставляет желать лучшего. На сегоднишний день писал бы идеально на Python (с хорошей библиотекой - своей или чужо-написанной - для работой с PE файлами) или в крайности на C (для чего существует множество библиотек для работы с PE файлами, но для само-образования советовал бы написать в ручную - формат прост).
     
  9. comrade

    comrade Константин Ёпрст

    Публикаций:
    0
    Регистрация:
    16 сен 2002
    Сообщения:
    232
    Адрес:
    Russian Federation
    Re: базонезависимый код (PIC: position-independent code)

    Не делал бы из этого квази-религиии. Всё ещё остаётся множество взрослых людей которых слюнявят при словах "PE header", "position-independent code", "DLL injection", "APC queue", "cross-process injection" и прочие банальности.

    Код под x86-64 уже довольно сам по себе базонезависимый. Достаточно сравнить размер IMAGE_DIRECTORY_ENTRY_BASERELOC между x86 и x86-64 бинарниками того же самого кода.

    Сам процесс релокации довольно прост - IMAGE_BASE_RELOCATION в концептуальности кодирует скрипт (мини-виртуальная машина) которые говорит куда и как исполнить простую арифметику: "по адресу X добавить 32-битнуй разницу D", где D это арифметическая разница между желательной базой и базой при компоновки (IMAGE_OPTIONAL_HEADER.ImageBase). Поняв, можно написать на десятки минут. И это на много дешевле, и портативно чем мучатся переписывать код на 100% базонезависимость (кому это надо - хочется чтоб любой код был годен).
     
  10. yashechka

    yashechka Ростовский фанат Нарвахи

    Публикаций:
    90
    Регистрация:
    2 янв 2012
    Сообщения:
    1.449
    Адрес:
    Россия
    Читай К.К у него в книге все методы расписаны.
     
  11. Indy_

    Indy_ Well-Known Member

    Публикаций:
    4
    Регистрация:
    29 апр 2011
    Сообщения:
    4.775
    comrade,

    Релокацию отменяет RIP-адресация. Но только для указателей непосредственно в коде. Массивы релоцируются. Именно по этой причине размер релоков мал, но всё же они есть.

    Релоки жизненно необходимы для модуля, даже если они не нужны для релокаций. Модуль не содержащий релокаций потенциальная уязвимость в системе. Далее вы поймёте почему.
     
  12. Intro

    Intro Active Member

    Публикаций:
    0
    Регистрация:
    29 авг 2009
    Сообщения:
    561
    Не знаю, может кому то пригодится.
    https://yadi.sk/d/81ARuLvH3Hpfcd
    Добавляет секцию в файл дубликат. Использовал в проекте XRayExtensions сейчас использую утилиту получше, но её ещё рано в релиз вылаживать из-за не совсем корректной работы с релокациями.