Сейчас на форуме: asfa, bartolomeo, hgdagon (+6 невидимых)

 eXeL@B —› Программирование —› Релокация процедуры
Посл.ответ Сообщение

Ранг: 37.4 (посетитель)
Активность: 0.010
Статус: Участник

Создано: 28 апреля 2006 09:05 · Поправил: Dian
· Личное сообщение · #1

Хочу переселить процедуру в другое место. Возникла пара вопросов:
1. Как определить, где она заканчивается. C3 может быть в операндах, да и не факт, что конец именно там.
2. Как быть с переходами? Процедура, по идее, может вызывать соседние по относительным адресам



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

Создано: 28 апреля 2006 09:22
· Личное сообщение · #2

Определение полного размера функции
http://www.exelab.ru/f/action=vthread&forum=6&topic=4637



Ранг: 37.4 (посетитель)
Активность: 0.010
Статус: Участник

Создано: 28 апреля 2006 17:27
· Личное сообщение · #3

tundra37
Спасибо!

До конца ещё не осилил. Пока что все-таки наиболее просто решение - брать всё до следующей точки входа, вроде и второй вопрос решает. (Насколько это хороший вариант?)



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

Создано: 02 мая 2006 10:58
· Личное сообщение · #4

Dian пишет:
брать всё до следующей точки входа

К сожалению попадаются нестандартные точки входа. Я вообще не заморачиваюсь такими вопросами.
Ищу свободное место, делаю туда jump и в конце jump обратно - дешево и сердито. Т.к. секцию расширить тоже не проблема, то не понимаю желания двигать именно целую процедуру - передвинь кусок до первого/второго RET и поменяй пару jump-ов. Выделение полной процедуры важно при анализе структуры программы, а для хака - это излишество.




Ранг: 108.4 (ветеран)
Активность: 0.060
Статус: Участник

Создано: 25 мая 2006 23:28
· Личное сообщение · #5

tundra37 пишет:
Т.к. секцию расширить тоже не проблема, то не понимаю желания двигать именно целую процедуру - передвинь кусок до первого/второго RET и поменяй пару jump-ов. Выделение полной процедуры важно при анализе структуры программы, а для хака - это излишество.


Да именно для анализа.
А если хочется прередвинуть процедуру для анализа? Так как она создается в памяти. Как мне внутри функции поменять всю абсолютную адресацию, включая разные таблицы с адресами ( в этой же процедуре).
Мне что придется вычислять все команды, работающие с абсолютной адресацией? Если да то какие варианты?

-----
Есть вопросы ко мне? В личку!




Ранг: 162.2 (ветеран)
Активность: 0.090
Статус: Участник

Создано: 26 мая 2006 06:07
· Личное сообщение · #6

Если есть релоки, то всё просто, если их нет, то дизасм тебе в руки.
YoriCH пишет:
включая разные таблицы с адресами

Не совсем понял, это типа этого?
vov ecx,some_index
lea esi,addres_table
mov eax,[esi+ecx*4]
jmp eax
имхо, никак.




Ранг: 108.4 (ветеран)
Активность: 0.060
Статус: Участник

Создано: 26 мая 2006 08:44
· Личное сообщение · #7

asd
Да фактически так. Это значит непереносимо?

-----
Есть вопросы ко мне? В личку!




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

Создано: 26 мая 2006 09:18
· Личное сообщение · #8

YoriCH пишет:
А если хочется прередвинуть процедуру для анализа?

Зачем передвигать. Это же не ДОС - у тебя почти 2 Гб виртуальной памяти для работы.
YoriCH пишет:
Мне что придется вычислять все команды, работающие с абсолютной адресацией?

В конце концов воспользуйся TMG Ripper Studio - она многое делает автоматом.
Кстати раз программа создается в памяти, то она должна быть переносимой по идее.
Попробуй Image Base поменять, со стеком поиграться и проверить работоспособность.



Ранг: 162.2 (ветеран)
Активность: 0.090
Статус: Участник

Создано: 26 мая 2006 11:31
· Личное сообщение · #9

YoriCH пишет:
Это значит непереносимо?

Только если ручками таблицу поправить, а автоматически не получится.


 eXeL@B —› Программирование —› Релокация процедуры
:: Ваш ответ
Жирный  Курсив  Подчеркнутый  Перечеркнутый  {mpf5}  Код  Вставить ссылку 
:s1: :s2: :s3: :s4: :s5: :s6: :s7: :s8: :s9: :s10: :s11: :s12: :s13: :s14: :s15: :s16:


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