Здравствуйте, скажите пожалуйста, кто нибудь знает УНИВЕРСАЛЬНЫЙ алгоритм для добавления "executeble code" сегмента (естественно с каким нибудь байт-кодом) в произвольную программу вручную, без всяких Супер-Пупер-Мега-Крэкерских-программ? Уже два дня сижу пыхчу, чуть начинаю делать, ВСЁ...вся структура и адресация внутри программы летит..., пипец кароче начинается , так вот подскажите пж, очень просто интересно
Возможно, я где то читал статью на красивом сайте, но там всё на Инглише и ни фига не понятно так как всё в куче там написано, но там мельком можно было разобрать, только то что они как-то добавили сегмент вручную, но как не понятно, щяс буду искать эту статью.
Фух, славу богу нашёл, только я сегмент с секцией перепутал Прокомментируйте пожалуйста что они делают... http://resources.infosecinstitute.com/adding-a-section-to-pe-binary/#gref (НЕ РЕКЛАМА!!!)
alex-rudenkiy, > кто нибудь знает УНИВЕРСАЛЬНЫЙ алгоритм для добавления "executeble code" PE-loader. То решение, которое вы используете к задаче называется инфектом. зы: тс задал вопрос на клабе, причём хотел что бы за него константы посмотрели в хидерах, так что всё ясно сним. > только я сегмент с секцией перепутал
Ну короче я вот смотрите что смог сделать, добавил описание секции "lol", увеличил кол-во секций на 1 и добавил байт-код (для примера), но к сожалению ollydbg не собирается его открывать, помогите пожалуйста, что ещё нужно сделать?
alex-rudenkiy, Еще нужно внимательно следить за тем, какие адреса для секций задаешь. Секции не могут пересекаться друг с другом в памяти (о чем, кстати, и написано в логе).
Долго не открывал эту тему, уж слишком пахла ранними 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 файлами, но для само-образования советовал бы написать в ручную - формат прост).
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% базонезависимость (кому это надо - хочется чтоб любой код был годен).
comrade, Релокацию отменяет RIP-адресация. Но только для указателей непосредственно в коде. Массивы релоцируются. Именно по этой причине размер релоков мал, но всё же они есть. Релоки жизненно необходимы для модуля, даже если они не нужны для релокаций. Модуль не содержащий релокаций потенциальная уязвимость в системе. Далее вы поймёте почему.
Не знаю, может кому то пригодится. https://yadi.sk/d/81ARuLvH3Hpfcd Добавляет секцию в файл дубликат. Использовал в проекте XRayExtensions сейчас использую утилиту получше, но её ещё рано в релиз вылаживать из-за не совсем корректной работы с релокациями.