Мне просто удалось добавить раздел и некоторый код в pe-файл (в данном случае мой proxy.exe) в Windows 10. Я также изменил точку входа на начало моего нового раздела. Когда я запускаю пропатченный .exe, моя заглушка вызывается, и я слышу высокочастотный звуковой сигнал (сначала я проверил звуковой сигнал), пока все хорошо.
Но теперь я хочу вернуться в OEP. Но Как я могу рассчитать адрес, который мой OEP будет иметь в памяти?
Я думал об этой проблеме, и я придумал? Решение ?:
Подсчитайте Rsize всех разделов, кроме одного, который я недавно добавил, затем я получу адрес моей заглушки в памяти (дельта-смещение) и вычту из нее общий размер раздела. Теперь я должен быть в начале секции .text в памяти. После этого я добавляю смещение для oep и все.
Будет ли это работать или я ошибся? Есть ли другой, возможно, более простой способ? А как насчет DLL, есть ли разница для всей процедуры?
http://i.imgur.com/tpUH8x4.png <- Изображение окурка
Большое спасибо заранее! 😉
С OEP я предполагаю, что вы подразумеваете исправление IMAGE_OPTIONAL_HEADER. AddressOfEntryPoint.
Хорошо, если я правильно понял, вы возьмете IP -> вычтите смещение с ожидаемым RVA (связанным виртуальным адресом), чтобы получить загруженный адрес модуля, и добавите его в RVA OEP, чтобы получить реальный адрес точка входа.
Если вы делаете математику правильно, это должно сработать.
У меня нет привилегий комментирования, но я думаю, что это должно быть комментарием, а не ответом, поскольку я не пробовал именно это, но это предложение, которое похоже на то, что компилятор сделает для двоичного файла.
OEP — это RVA, во время инъекции у вас есть ORIG_RVA и injected_RVA, которые вы заменили. В свою логику впрыска просто добавь
смещение: нажмите на ориг.
Затем для смещения добавьте запись перемещения в таблицу перемещения PE. Загрузчик сделает все остальное.
Других решений пока нет …