Сейчас на форуме: subword, rtsgreg1989, zds (+9 невидимых)

 eXeL@B —› Основной форум —› Проблема с патчем DLL. Чем отредактировать Relocation Table ?
Посл.ответ Сообщение


Ранг: 450.3 (мудрец), 13thx
Активность: 0.20
Статус: Участник

Создано: 29 марта 2008 14:32
· Личное сообщение · #1

Мне необходимо пропатчить DLL но с этим есть проблема:

На картинке видно что и как я хочу сделать (это пример, что xor eax,eax будет короче - я знаю), hiew выделил место которое будет пропатчено так как на него есть ссылка в Relocation Table. Соответственно загрузив нижний пример в отладчик мы увидим совсем не ту картину. Я посмотрел разные инструменты, Relox, плагин для PE Tools по работе с релоками, PE Explorer, но так и не понял как сделать так, что бы эта область не патчилась. Собственно вопрос в том, как и чем найти в relocation table ссылку на это место в программе и удалить эту запись. Так же хотелось бы знать, чем можно создать новую запись на необходимое мне место, но это уже второй вопрос... В общем интересует инструмент по редактированию relocation table или статьи на эту тему.



Ранг: 210.5 (наставник), 2thx
Активность: 0.140
Статус: Участник

Создано: 29 марта 2008 14:39
· Личное сообщение · #2

Explorer Suite -> CFF Explorer

там есть редактор релоков




Ранг: 450.3 (мудрец), 13thx
Активность: 0.20
Статус: Участник

Создано: 29 марта 2008 15:02
· Личное сообщение · #3

arnix пишет:
Explorer Suite -> CFF Explorer


Нашел в табличке нужное место. Удалить запись нельзя. Можно только редактировать поле Item. CFF от 2008 года.



Ранг: 495.3 (мудрец)
Активность: 0.30
Статус: Участник

Создано: 29 марта 2008 15:52 · Поправил: Bitfry
· Личное сообщение · #4

Держи мою поделку.
Писал для личного пользования, для отладки своей либы (кстати, библиотека работы с релоками почти готова к первому релизу).
Полный редактор (ГУИ и функционал) теперь пишет Jupiter.
Ну а пока так:
rapidshare.com/files/103510126/RelocEdit.rar.html
(исправил пару багов, добавил удалялку всех релоков секции)

-----
Всем привет, я вернулся




Ранг: 495.3 (мудрец)
Активность: 0.30
Статус: Участник

Создано: 29 марта 2008 16:06
· Личное сообщение · #5

Инструкция:
левый едит - добавлялка релока. Туда надо вписать RVA цели и нажать ентер =)
правый едит - правка релока. Можно изменить значение имеющегося релока. 0 - обнуляет релок (то есть больше он не учитывается виндой).
Del - удаляет блок (если в релок мышкой не тыкнул) или релок (если в него уже тыкнул мышкой... Фокус, не фокус, а теперь удаляет только релок =)).
Сохранять изменения можно только нажатием Yes при закрытии редактора!
Открывать за один запуск можно только один файл.
Глюки интерфейса не обсуждаются! Ибо цель утилиты - отладка RL-API.

-----
Всем привет, я вернулся




Ранг: 115.1 (ветеран), 3thx
Активность: 0.070
Статус: Участник

Создано: 29 марта 2008 16:24
· Личное сообщение · #6

а учесть в коде патча текущую базу загрузки не судьба, т.е. сначала вычислить базу и пропатчить в рантайме?




Ранг: 450.3 (мудрец), 13thx
Активность: 0.20
Статус: Участник

Создано: 29 марта 2008 17:06
· Личное сообщение · #7

Bitfry пишет:
Держи мою поделку.


Огромное спасибо ! Это как раз то, что я искал !
Рад, что будет релиз и тулза получит развитие. Как я понял то что мне нужно было сделать довольно проблемно ? Иначе подобные возможности были бы в любом PE редакторе.

__ пишет:
а учесть в коде патча текущую базу загрузки не судьба, т.е. сначала вычислить базу и пропатчить в рантайме?


Сложно для меня это, нужно многое прочитать и выучить, а на сегодня нужно бысто получить результат, по этому и искал инструмент который это делает...



Ранг: 495.3 (мудрец)
Активность: 0.30
Статус: Участник

Создано: 29 марта 2008 17:08 · Поправил: Bitfry
· Личное сообщение · #8

__ пишет:
а учесть в коде патча текущую базу загрузки не судьба, т.е. сначала вычислить базу и пропатчить в рантайме?

Извращаться можно по всякому:
1) поставить атрибут записи на секции,
2) через Call $,pop eax получить фактическую базу
3) вычесть из неё ImageBase и текущее смещение
4) прибавить это дело к своим указателям в патче
...
=)
ИМХО уж лучше писать базонезависимый код патча и обходить уже имеющиеся релоки.
А уж если есть редактор, то всё становится совсем просто.
Согласись?

ToBad пишет:
Как я понял то что мне нужно было сделать довольно проблемно ? Иначе подобные возможности были бы в любом PE редакторе.

Не сказал бы, что сложно. PE-формат давно разобран. Документация имеется. Просто тема непопулярная. Но мы это исправим.

arnix пишет:
Explorer Suite -> CFF Explorer
там есть редактор релоков

Да, в CFF Explorer "есть" возможность исправлять имеющиеся релоки... Пользоваться этим неудобно. Надо сначала изучать доку по релокам, потом понять, что CFF Explorer глючит, а уже потом соображать, что да как исправлять.

-----
Всем привет, я вернулся




Ранг: 9.3 (гость)
Активность: 0.010
Статус: Участник
KpTeaM

Создано: 31 марта 2008 23:26
· Личное сообщение · #9

ToBad
Чтоб не редактировать релоки можно извернуться, вместо 68 XX XX XX XX (push с релоками) вполне можно там вставить B8 XX XX XX XX (mov с релоками) , потом поставить что нужно (mov/xor eax + ret). Но эт если место позволяет. И никаких заморочек.



Ранг: 77.1 (постоянный)
Активность: 0.040
Статус: Участник

Создано: 01 апреля 2008 02:14
· Личное сообщение · #10

Нужный инструмент. Я как-то вручную обнулял релоки.


 eXeL@B —› Основной форум —› Проблема с патчем DLL. Чем отредактировать Relocation Table ?
:: Ваш ответ
Жирный  Курсив  Подчеркнутый  Перечеркнутый  {mpf5}  Код  Вставить ссылку 
:s1: :s2: :s3: :s4: :s5: :s6: :s7: :s8: :s9: :s10: :s11: :s12: :s13: :s14: :s15: :s16:


Максимальный размер аттача: 500KB.
Ваш логин: german1505 » Выход » ЛС
   Для печати Для печати