|
|
Регистрация Восстановить пароль |
Повторная активизация e-mail |
Регистрация | Задать вопрос |
Заплачу за решение |
Новые сообщения |
Сообщения за день |
Расширенный поиск |
Правила |
Всё прочитано |
|
Опции темы | Поиск в этой теме |
19.10.2012, 14:23 | #1 |
Участник клуба
Регистрация: 15.05.2009
Сообщений: 1,222
|
Работа с PE-файлом
Доброе время суток, необходимо внедрить код в PE-файл методом размазывания в секцию. Прочитала Касперски, но не получается даже банальная вещь (в качестве "жерты взят notepad win7"):
Меняю заголовок PE-файла, а именно поле "точка входа" она равна 36 89. Если запустить в отладчике именно по этому смещению относительно начала располагается точка входа. Заменить нужно на смещение где есть пустоты в данной секции. Нахожу пустоту (файл просматриваю с помощью winhex) например 00028450 и записываю это смещение в поле "точка входа" В а по этому смещению необходимо прописать jmp на старую точку входа: находила формулы но не могу получить нужного результата то есть по этому смещению должна быть команда jmp адрес если в байт коде E9 адрес, какой адрес необходимо указать чтобы попасть на старую точку входа?
Единственное, что ограничивает полет мысли программиста-компилятор
|
19.10.2012, 15:29 | #2 |
Старожил
Регистрация: 13.07.2012
Сообщений: 6,330
|
Боже, опять вирусы...
Ну хоть почитайте формат инструкции E9 - там же написано, что адрес ОТНОСИТЕЛЬНЬЙ... ЕIP + новый адрес |
19.10.2012, 17:37 | #3 |
Участник клуба
Регистрация: 23.12.2010
Сообщений: 1,129
|
Во-первых, адрес 0x28450 относится к секции ресурсов (.rsrc), у которой во флагах разрешено только чтение. При попытке выполнить код оттуда (даже единственный джамп) будет ошибка. Придется ставить ей флаг executable, например.
Во-вторых, в поле entry point pe-заголовка должен быть записан relative virtual address (rva). Relative значит, что смещение отсчитывается от image base, а не от начала файла; ну а virtual значит, что речь идет о виртуальных адресах, собственно ) Если ты хочешь записать джамп в файл по смещению 0x28450, тебе нужно посчитать, чему будет равен rva, и его уже ставить в заголовок. Этот адрес находится в секции .rsrc. Ее данные в файле начинаются с адреса 0xbc00. Считаем сначала смещение относительно начала секции: 0x28450-0xbc00=0x1c850. Прибавляем к нему виртуальный адрес секции (адрес, куда ее положит загрузчик), он равен 0xf000. В итоге получаем 0x2b850 - это и будет rva. Все (ok, Только ближние) динструкции перехода на x86 относительные. Причем смещение отсчитывается не от адреса, в котором лежит 0xe9, а от адреса следующей инструкции (т. е. +5 байт от самого джампа). В твоем случае получается -(0x2b850+5-0x3689)=-0x281cc (или 0xfffd7e34, что то же самое). Как-то так. upd: Да, помни, что не все нулевые байты одинаково бесполезны ) Ты можешь затереть что-то важное, и в результате блокнот сломается. Последний раз редактировалось Son Of Pain; 19.10.2012 в 17:42. |
Опции темы | Поиск в этой теме |
Похожие темы | ||||
Тема | Автор | Раздел | Ответов | Последнее сообщение |
Работа с файлом на С++ | Franch | Помощь студентам | 2 | 17.09.2012 03:53 |
Работа с файлом! | Kami-sama | Visual C++ | 0 | 07.05.2011 20:48 |
работа с файлом | Андрей.12 | Помощь студентам | 1 | 15.02.2010 01:35 |
Работа с файлом на Си | Darh | Помощь студентам | 2 | 15.12.2009 23:44 |
Работа с файлом ! | PPikaso | Помощь студентам | 3 | 29.10.2009 14:21 |