Сейчас на форуме: vsv1, igorcauret, Rio (+5 невидимых)

 eXeL@B —› Вопросы новичков —› Замена кода в exe из dll
Посл.ответ Сообщение

Ранг: 0.2 (гость)
Активность: 0=0
Статус: Участник

Создано: 13 ноября 2015 08:10 · Поправил: sidjey
· Личное сообщение · #1

Здравствуйте, участники форума! Проделывал эксперименты, по расширению функционала программ, описанные на хабре здесь . Оно получается, только если в exe нету relocation секции, и адрес заменяемой функции является фиксированным. А если есть reloc то адрес функции меняется. Как найти значения смещения функции при инжекте (который у меня происходит в DllMain)?



Ранг: 281.8 (наставник), 272thx
Активность: 0.250.01
Статус: Участник
Destroyer of protectors

Создано: 13 ноября 2015 08:42 · Поправил: MasterSoft
· Личное сообщение · #2

GetModuleHandle(NULL)+RVA? или ты не про это?

Added:
ты видимо про ASLR говоришь. вычти из этого адреса базу, а потом как я выше написал.

| Сообщение посчитали полезным: sidjey

Ранг: 0.2 (гость)
Активность: 0=0
Статус: Участник

Создано: 13 ноября 2015 08:47
· Личное сообщение · #3

в IDA если найти команду call и вызываемую функцию, которую надо подменить. Там у строчки есть адрес, по которому я и подменяю (memcpy) на адрес функции из dll. Если адрес той строки фиксированный, то проблем не возникает, но при наличии секции reloc, он меняется (бывает не меняется), это и в IDA тоже видно.

Добавлено спустя 55 минут
MasterSoft, т.е. нужно найти адрес этого ASLR, вычесть из него базу, и к нему прибавить смещение заменяемой функции? Вот если занулить размер reloc в exe, то у строчки всегда фиксированный адрес, и его я беру и прописываю в memcpy, и дальше как по маслу. Но наверное reloc не просто так в exe прописывают.

Добавлено спустя 1 час 37 минут
А, все разобрался. Нужно узнать предпочитаемый адрес размещения функции, вычесть из него базовый адрес, и то что получилось сложить с GetModuleHandle(NULL). Спасибо MasterSoft за подсказку!



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

Создано: 13 ноября 2015 19:31 · Поправил: dosprog
· Личное сообщение · #4

sidjey пишет:
Но наверное reloc не просто так в exe прописывают.


Но если её нету, то работает и так.

Любая сущность стремится в своём развитии к усложнению. Достигнув максимума сложности, она погибает.
Типа закон Мерфи.

И Микрософт тут не исключение. Им же надо куда-то развиваться..






В примере адрес 00493D28h должен был задаваться как (GetModuleHandle(0) + 93D28h).
Тогда будет работать по-любому. (О чём и написал MasterSoft).




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


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