Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > IT форум > Помощь студентам
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 19.10.2012, 14:23   #1
Sparky
Участник клуба
 
Аватар для Sparky
 
Регистрация: 15.05.2009
Сообщений: 1,222
По умолчанию Работа с PE-файлом

Доброе время суток, необходимо внедрить код в PE-файл методом размазывания в секцию. Прочитала Касперски, но не получается даже банальная вещь (в качестве "жерты взят notepad win7"):

Меняю заголовок PE-файла, а именно поле "точка входа" она равна 36 89. Если запустить в отладчике именно по этому смещению относительно начала располагается точка входа. Заменить нужно на смещение где есть пустоты в данной секции. Нахожу пустоту (файл просматриваю с помощью winhex) например 00028450 и записываю это смещение в поле "точка входа"

В а по этому смещению необходимо прописать jmp на старую точку входа: находила формулы но не могу получить нужного результата то есть по этому смещению должна быть команда jmp адрес если в байт коде E9 адрес, какой адрес необходимо указать чтобы попасть на старую точку входа?
Единственное, что ограничивает полет мысли программиста-компилятор
Sparky вне форума Ответить с цитированием
Старый 19.10.2012, 15:29   #2
waleri
Старожил
 
Регистрация: 13.07.2012
Сообщений: 6,330
По умолчанию

Боже, опять вирусы...
Ну хоть почитайте формат инструкции E9 - там же написано, что адрес ОТНОСИТЕЛЬНЬЙ... ЕIP + новый адрес
waleri вне форума Ответить с цитированием
Старый 19.10.2012, 17:37   #3
Son Of Pain
Участник клуба
 
Регистрация: 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.
Son Of Pain вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 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