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

 eXeL@B —› Вопросы новичков —› Возможно ли подменить модуль в памяти(через приложение)
Посл.ответ Сообщение

Ранг: 4.2 (гость)
Активность: 0.020
Статус: Участник

Создано: 28 марта 2016 02:54
· Личное сообщение · #1

Можно ли через приложение, с встроенным внутрь модулем(.DLL), подменить - другой модуль .dll, который грузиться в память для совсем другого приложения, своего рода перехват/inject !
Объясню немного как я это вижу

My.exe -> Run -> Check if(Target.dll) is loaded? -> Handle Target = GetModuleHandle(Target.dll); Target = MyHandle;
с начало запускается мое приложение(С GUI), которое инициализирует проверку(загружен ли модуль в память, по указанному через GUI Пути), если загружен меняем оригинальный Target.dll на мой MyHandle.dll, ? Отсюда вопрос - сработает ли такой способ, если нет то как следует сделать ?

Само перехватываемое приложение, запускает - модуль давольно просто
Target.exe -> Run -> Target.dll

Но есть 1 момент, с начало загружаются некоторые модули(примерно 3), и только после этого грузиться тот что мне нужен. внедряться в сам Target.exe Не вариант.

Возможно ли реализовать такое ?



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

Создано: 28 марта 2016 05:07 · Поправил: dosprog
· Личное сообщение · #2

bolvai пишет:
My.exe -> Run -> Check if(Target.dll) is loaded?


А где искать при этом те адреса импортов из этой DLL, которые уже были настроены для загрузившего(ших) её приложений(библиотек)?



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

Создано: 28 марта 2016 07:56 · Поправил: VodoleY
· Личное сообщение · #3

dosprog да все возможно.. вопрос лиш во времени и усидчивости
ЗЫ было дело я писал врапер.. фиктивная длл создавалась автоматом. так что нет ничего не возможного

-----
Наша работа во тьме, Мы делаем, что умеем. Мы отдаем, что имеем, Наша работа во тьме....




Ранг: 21.0 (новичок), 19thx
Активность: 0.010.03
Статус: Участник

Создано: 28 марта 2016 09:51 · Поправил: soft
· Личное сообщение · #4

непонятные телодвижения. переименуйте MyHandle.dll в Target.dll, пусть приложение сразу грузит ее или делайте wrapper для Target.dll с вашим кодом, если экспортируемые функции присутствую.



Ранг: 4.2 (гость)
Активность: 0.020
Статус: Участник

Создано: 28 марта 2016 12:37
· Личное сообщение · #5

VodoleY пишет:
ЗЫ было дело я писал врапер.. фиктивная длл создавалась автоматом. так что нет ничего не возможного

soft пишет:
пусть приложение сразу грузит ее или делайте wrapper для Target.dll с вашим кодом

MyHandle.dll имеет те же функции что и Target.dll, но естественно там добавлен еще функционал, тут вся загвоздка в том - можно ли подменять сам Handle от Target.dll, моим в памяти процесса, без того чтобы копировать на диск MyHandle.dll - вместо Target.dll(естественно с тем же именем).
Если это не совсем возможно без внедрения в Target.exe, то как будет проще в коде, реализовать вставку .dll в My.exe, и последующее копирование с заменой Target.dll, но при этом с предварительным копированием Target.dll в TEMP, и возвращением обратно - после завершения процесса, конечно еслиб можно было внедрить через .exe мой модуль поверх Target.dll - без физического его изменения, было бы куда более лучше - возможно ли увидеть код подобных процедур ?




Ранг: 337.6 (мудрец), 224thx
Активность: 0.210.1
Статус: Участник
born to be evil

Создано: 28 марта 2016 14:48 · Поправил: ajax
· Личное сообщение · #6

bolvai пишет:
еслиб можно было внедрить через .exe мой модуль поверх Target.dll - без физического его изменения, было бы куда более лучше

"Мы стали больше лучше одеваться"
возможно. примерный алго:
компиляция своей длл с адресами секций, как у оригинала. хз, как система поведет себя на проецирование непосекционное, не игрался.
копирование своей dll поверх загруженной, настройка релоков и импорта (своего и в таргет exe, если адреса функции им уже получены). вызов DllMain. остальное - детали типа DLL_THREAD/PROCESS_DETACH и т.п.
гугль в помощь. за день/сутки, в теории, можно управиться

-----
От многой мудрости много скорби, и умножающий знание умножает печаль




Ранг: 4.2 (гость)
Активность: 0.020
Статус: Участник

Создано: 28 марта 2016 15:54 · Поправил: bolvai
· Личное сообщение · #7

ajax пишет:
копирование своей dll поверх загруженной

Как это примерно в коде выглядит, возможно увидеть ?
По принципу Handle Действуем из моего приложения сеим образом -
Code:
  1.  Handle Target = GetModuleHandle(Target.dll);

Либо это как то по другому ? Что следует искать в гугле ?

Добавлено спустя 6 часов 22 минуты
P.S.
Я так понял
Code:
  1.                  HRSRC myResource = FindResource(hInstance, MAKEINTRESOURCE(IDR_RCDATA2), RT_RCDATA);
  2.                  HGLOBAL myResourceData = LoadResource(hInstance, myResource);


Не как не переделать в обычный Handle, чтобы далее уже иметь возможность к примеру Читать файл через ReadFile ?


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


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