Доброго времени суток. Вопрос в следующем: каким образом можно реализовать вставку собственного кода в произвольное место исполняемого ELF-файла? Конкретно, интересует проблема пересчета абсолютных адресов в инструкциях
эмммм... не совсем, конечно, понял к чему тут фасм. Может быть пояснишь что подразумевал?.. Поясню вопрос: имеется абсолютно незнакомый мне ELF-бинарник и над ним необходимо совершить преобразование
weird_burro, вопрос очень общий. Общий ответ - после анализа в IDA можешь отпатчить используя любую прогу - от hex редактора до hiew. Потом на unix-e отладишь. Если кода много, то компилишь его as/gcc и потом смотришь .o или asm listing.
опа) сурово извиняюсь за постановку вопроса, которая вызывала такую трактовку. Вопрос имеет отношение к созданию автопротектора, соответственно анализ файла и пересчет необходимых полей/инструкций происходит в полностью автоматическом режиме
Всё равно слабо понятно о чём ты спрашиваешь... В "произвольное место" код вствить практически невозможно. Если ты думаешь о написании протектора/упаковщика, то неплохо бы тебе вкурить в формат ELF - тебе придётся минимум добавить секцию.
s0larian вообще как мне извесно "тупого" протоктора в никсах быть не может, тк запрещена запись в секицю кода.
2 метода инжекта у меня уже есть. В них как раз входит вставка собственного сегмента и расширение существующего последнего сегмента с типом PT_LOAD. Можно инжектить еще по выравниваниям. Но меня интересует именно принципиальная возможность вставить код в произвольное место исполняемого файла (к примеру в произвольное место сегмента кода) т.е. все-таки имеется хотя бы теоретическая возможность применения такой техники?.. на ее реализации я пока что и зарылся
Ну так ты подумай немного - теоретически можно дизасемблировать и исправить все относительные и абсолютные jxx иструкции. Практически - невозможно.
жаль( Хочется добавить чего-нить новенького в качестве метода внедрения в ELF-бинарник, но пока что-то не особо выходит. Может быть знаете еще какие-нибудь техники, помимо тех, что перечислил я?