eXeL@B —› Программирование —› Загрузчик |
Посл.ответ | Сообщение |
|
Создано: 27 февраля 2012 23:47 · Личное сообщение · #1 Есть приложение для расширения функционала софта N. Для некоторых моментов приходится принудительно загружать в софт либу. Для поддержки актуальности, либа дергается с сети. В данный момент библиотека загружается на диск и инжектится стандартным способом, но как-то не кашерно делать все эти лишние манипуляции, захотел миновать стадию создания файла и просто грузить из памяти. Вот тут-то и столкнулся с множеством нюансов. В идеале хотелось бы воспользоваться системным загрузчиком, однако, ясен пень, он не принимает указатель на память. Покопал в сторону LdrLoadDll, но если вызывать NtCreateSection() без SEC_IMAGE, естественно получается фэйл. Смотрел в сторону ручной загрузки, релоки, копирование, все бы ничего, но с импортом засада. В общем, надеюсь что я что-то упустил. Если что, прятать ничего ни от кого цели нет, да и реакция антивирусов не принципиальна. |
|
Создано: 28 февраля 2012 00:23 · Личное сообщение · #2 |
|
Создано: 28 февраля 2012 00:30 · Личное сообщение · #3 OnLyOnE пишет: Конкретнее, почему? Узнать адреса функций модулей, которые уже подгружены самим процессом не проблема, а как патчить IAT для модулей которые будут подгружены моей библиотекой, я хз. Плюс, при ручной загрузке, не будут работать такие апишки, как GetModuleHandle() и хоть можно соорудить для них костыли, есть еще масса нюансов, поэтому я и смотрел в первую очередь на возможность "правильной" загрузки средствами ОС. Насколько решаема задача и насколько оно вообще "того стоит", вот и зашел спросить. |
|
Создано: 28 февраля 2012 00:35 · Поправил: zeppe1in · Личное сообщение · #4 |
|
Создано: 28 февраля 2012 00:42 · Личное сообщение · #5 |
|
Создано: 28 февраля 2012 01:33 · Поправил: OnLyOnE · Личное сообщение · #6 Я ранее тоже задавался данной проблемой, т.е. ухитриться использовать для загрузки нтлодырь.. Начал капать LdrLoadDll... и потом забросил, написав свой загрузчик.. которому до оригинального ооочень далеко.. Но для моих нужд его достаточно было. Думаю надо рыть LdrLoadDll глубже.. VOLKOFF пишет: а как патчить IAT для модулей которые будут подгружены моей библиотекой, я хз. Хм.. а из твоей библы которую ты загружал бы своим загрузчиком нельзя вызывать тотже LoadLibrary? Или эти модули тоже в виде образов в памяти, а не файлы? Или я что-то не так понял? ----- aLL rIGHTS rEVERSED! |
|
Создано: 28 февраля 2012 02:11 · Личное сообщение · #7 |
|
Создано: 28 февраля 2012 13:34 · Личное сообщение · #8 VOLKOFF а не проще подгрузить модули, которые нужны либе так же, как инжектишь либу с диска? а потом уже импорт в своей в памяти и тп... ----- От многой мудрости много скорби, и умножающий знание умножает печаль | Сообщение посчитали полезным: VOLKOFF |
|
Создано: 28 февраля 2012 14:52 · Личное сообщение · #9 ajax пишет: а не проще подгрузить модули, которые нужны либе так же, как инжектишь либу с диска? Вот, простое рабочее решение, настолько очевидное, что до сих пор не пойму, как не пришло в голову самому Грузить штаткой, я так понимаю, не получится, если Инди таки не расскажет как обходится проверка валидности образа |
|
Создано: 28 февраля 2012 21:55 · Личное сообщение · #10 |
|
Создано: 02 марта 2012 13:13 · Личное сообщение · #11 |
eXeL@B —› Программирование —› Загрузчик |