Добавление новой функции в ЕР и ELF файлы

Тема в разделе "WASM.BEGINNERS", создана пользователем Denis, 1 сен 2019.

  1. Denis

    Denis New Member

    Публикаций:
    0
    Регистрация:
    1 сен 2019
    Сообщения:
    4
    Здравствуйте, начал изучать с наскока assem и знаний в этой области пока не особо много. Если буду говорить что то не так поправте пожалуйста.

    Задачи такие:
    1) Добавление нового сегмента, секции, оверлей адресов или как это правильнее назвать для РЕ файла. Либо способ расширить существующий сегмент, проще говоря расширить уже готовый файл для доп. данных.
    2) Добавление новой функции (в новый сегмент.. либо через оверлей не знаю как правильнее это делать) в РЕ
    3) Тоже самое только для ELF файла.

    Для наглядности попробую привести пример с картинками:

    Берем простую программу:

    [​IMG]

    Компилируем, а затем через hex редактор добиваемся примерно такого результата:

    [​IMG]

    Надеюсь понятно объяснил.

    В общем подскажите подалуйста в каком направлении искать, чтобы дойти до такого ?
     

    Вложения:

    • Assem1.jpg
      Assem1.jpg
      Размер файла:
      97,7 КБ
      Просмотров:
      617
    • Assem2.jpg
      Assem2.jpg
      Размер файла:
      123,5 КБ
      Просмотров:
      587
  2. f13nd

    f13nd Well-Known Member

    Публикаций:
    0
    Регистрация:
    22 июн 2009
    Сообщения:
    2.020
  3. Denis

    Denis New Member

    Публикаций:
    0
    Регистрация:
    1 сен 2019
    Сообщения:
    4
    А есть где почитать как этим пользоваться, или где почитать, чтобы лучше понимать саму тематику и сложность задачи ?
     
  4. f13nd

    f13nd Well-Known Member

    Публикаций:
    0
    Регистрация:
    22 июн 2009
    Сообщения:
    2.020
    Гуглить "внедрение кода в <PE/ELF>", читать справку по инструментам. Может быть в архивах журналов типа хакера понятно и доступно описано .
     
  5. Bedolaga

    Bedolaga Member

    Публикаций:
    0
    Регистрация:
    10 июл 2019
    Сообщения:
    131
    Реально голову по приколу морочить?...
    Взял в отладчике 2 значения заменил и гуляй....
    Вот это реально в яблочко! Я хз что надо чтобы дойти до такого...(...даже(!) я)
     
  6. Denis

    Denis New Member

    Публикаций:
    0
    Регистрация:
    1 сен 2019
    Сообщения:
    4
    Хорошая конечно штука это CFF-Explorer. Вот создал я новый сегмент, а как теперь туда правильно записать данные(функцию) и как после этого правильно к ним обратиться ? Например с помощью IDA PRO ?
     
  7. q2e74

    q2e74 Well-Known Member

    Публикаций:
    0
    Регистрация:
    18 окт 2018
    Сообщения:
    998
    Denis,
    через хекс редактор ты трогаешь байты на жестком диске. А идой ты трогаешь виртуальные адреса размещенного исполняемого файла, условно в оперативке. Их туда загрузит загрузчик, ориентируясь на байты заголовка пе или ельфа. В виртуальных адресах твоего заголовка пе или эльфа нет. Код ляжет в секцию текст и будет выполняться, если ты его не правишь, с чего вдруг он должен пойти в какую-то секцию?

    гуглить код инджекшен, хуки, и где в заголовке байты, которые скажут, что добавленной тобой секции, можно исполнять код.
     
    Denis нравится это.
  8. f13nd

    f13nd Well-Known Member

    Публикаций:
    0
    Регистрация:
    22 июн 2009
    Сообщения:
    2.020
    Очевидно надо посмотреть VA получившейся новой секции, написать на асме код, который хочешь туда включить, поместить туда и не забыть про переходы туда и обратно из оригинального. Либо сделать это в иде или олли дебаггере.
    В иде есть возможность сохранить изменения в исходном файле.
     
  9. q2e74

    q2e74 Well-Known Member

    Публикаций:
    0
    Регистрация:
    18 окт 2018
    Сообщения:
    998
    f13nd, я знаю, но это его больше запутает, чем поможет. Ведь он явно говорит про иду в контексте динамики исполнения. А правит что-то хексредактором. Мешанина у него в том, что везде видит байты, и думает, что это одно и тоже место. А не два разных, связанных идой (если он хексит-патчит, например, в иде в окне дампа. А если он патчит в основном окне, то зачем ему новая секция? не влезает?).
     
  10. f13nd

    f13nd Well-Known Member

    Публикаций:
    0
    Регистрация:
    22 июн 2009
    Сообщения:
    2.020
    Может копипастит с иды байты, находит в нехредакторе их и патчит где надо) Пусть делает как нравится. Ида в принципе не самый худший вариант для таких фокусов.
     
  11. Denis

    Denis New Member

    Публикаций:
    0
    Регистрация:
    1 сен 2019
    Сообщения:
    4
    Спасибо за подсказку для поиска. Не сильно знаком с терминологией.

    Я конечно не могу сказать на сколько я запущенный случай, но такие вещи как IDA->PathProgram->ApplyPatchesToInputFile + KeyPatch могу использовать. Проблема сейчас в том, что не могу понять как правильно добавить в новый сегмент любую функцию(новую или копию уже имеющейся в программе). Желательно конечно если всё это делать в IDA, так даже лучше будет. Hex редакторы скорее как вспомогательный элемент используются. Может есть у кого простой пример до и после инъекции кода.
    --- Сообщение объединено, 1 сен 2019 ---
    Не уверен что это важно, но хотелось бы ещё добавить. Функция добавляющаяся в программу должна дополнять функционал изначальной программы, а не перехватывать управление на себя, для разового использования. В общем суть в том, что хочется понять как улучшить чужую программу новыми функциями и ничего при этом не сломать.
     
  12. f13nd

    f13nd Well-Known Member

    Публикаций:
    0
    Регистрация:
    22 июн 2009
    Сообщения:
    2.020
    Либо риппинг, либо декопиляция-компиляция, либо заплатка, перехватывающая управление. Ничего другого не существует и из всего этого заплатка самое простое.
     
  13. q2e74

    q2e74 Well-Known Member

    Публикаций:
    0
    Регистрация:
    18 окт 2018
    Сообщения:
    998
    https://habr.com/ru/post/266831/
    https://habr.com/ru/post/106107/