Что делать если нет свободного места в EntryPoint? Если надо в самом начале подгрузить dll с кодом но в EntryPoint нет места, что делать?
Animelubitel, я не экстрасенс, но попробую предположить... Можно скопировать часть энтрипойнт в другую секцию, или прилепить к концу файла и встроить шелл, который выполнит некую задачу, скопирует кусок на место и передаст управление на точку входа. P.S. поработайте над описанием вопроса.
drem1lin, "Animelubitel, я не экстрасенс, но попробую предположить... Можно скопировать часть энтрипойнт в другую секцию, или прилепить к концу файла и встроить шелл, который выполнит некую задачу, скопирует кусок на место и передаст управление на точку входа." это интересно объясните поподробнее пожалуйста
https://0x00sec.org/t/pe-file-infection/401 http://www.adlice.com/chronicles-pe-infector/ https://github.com/JonDoNym/peinjector https://www.defcon.org/images/defcon-16/dc16-presentations/lclee/defcon-16-lclee_vx-wp.pdf
Animelubitel, Давайте проанализируем. EP это некий код, заранее не известный. Задача - получить управление при его исполнении. Для этого нужно записать ветвление в этот код. Тогда возникает проблема размера - ветвление должно уместиться в код EP, не переписав при этом выше лежащий код/данные, который не является текущей ветвью(CFG). Если размера не достаточно(5B), то должны быть выбрана следующая инструкция, но с учётом условных ветвлений - изменены две ветви после условного ветвления, иначе управление будет утеряно. Для этого код должен быть описан графом, найдена ближайшая инструкция размером >=5 и при этом не должно быть Jcc. На место этой инструкции записано длинное ветвление на буфер, в котором расположена оригинальная инструкция и ветвление на стаб(или наоборот). Так как никакой код выполнен не может быть, пока не выполнилась EP, то можно записать ветвление на EP, перекрыв выше лежащий код и из стаба восстановить EP.
Перемещение кода в буфер должно выполняться в любом случае мотором(конструктор). Так как есть относительная адресация.
Animelubitel, еще одно и я закрываю топик. IMHO другие пользователи уже ответили на ваш вопрос Ваших шагов по решению проблемы так никто и не увидел...
"прилепить к концу файла и встроить шелл, который выполнит некую задачу, скопирует кусок на место и передаст управление на точку входа." мне не ответили, а мне это очень надо, пожалуйста ответе подробно перед закрытием темы
Пишется базонезависимый код, который решает некоторую задачу, Берется какой то exe файл, утилитой для просмотра PE ищется смещение точки входа, и потом HEX редактором вырезается оригинальный кусочек с этого места и размером с шеллкод и на его место вставляется шеллкод. Сам шелкод определяет размер файла и с конца берет этот кусочек и вставляет на оригинальную позицию и передает управление обратно на точку входа. Тогда exe даже не заметит что с ним что-то происходило. Очень важно сохранять состоянее регистров получая управление от системы и передавая его на оригинальную точку входа.