Загрузка DLL
От: PolA  
Дата: 03.05.12 16:37
Оценка:
Хочу зашифровать DLL (неважно, зачем), так вот — как потом юзать такую DLL, т.е.
— я открываю DLL-файл
— гружу его в память
— расшифровываю и получаю в памяти исходную DLL
— с этим все ок, но(!)
Как теперь мне получить ее handle (от лежащей в памяти, не на диске), чтобы вызывать ее функции?
Т.е. без LoadLibrary?

Заранее спасибо!
Re: Загрузка DLL
От: acDev Россия  
Дата: 03.05.12 17:06
Оценка:
Здравствуйте, PolA, Вы писали:

PA>- гружу его в память

PA>- расшифровываю и получаю в памяти исходную DLL
PA>- с этим все ок, но(!)

Рас с этим всё ок, то всё остальное вы должны и так знать.
А вообще, LoadLibrary регистрирует DLL в csrss (что бы DllMain вызывался при создании новых потов и т.п.).
Для поиска функций в таблице экспорта почитайте о PE формате.
Re[2]: Загрузка DLL
От: PolA  
Дата: 03.05.12 17:17
Оценка:
D>Рас с этим всё ок, то всё остальное вы должны и так знать.
Хм, не знаю, поэтому и спрашиваю.

Я получаю в итоге в памяти 200кБ-ный массив (т.е. расшифрованную DLL),
как теперь дать системе понять, что это DLL?
Мне достаточно получить ее Handle, а дальше через GetProcAddress я вызову, что нужно,
проблема с хэндлом...
Re[3]: Загрузка DLL
От: EreTIk EreTIk's Box
Дата: 03.05.12 17:58
Оценка:
PA>Я получаю в итоге в памяти 200кБ-ный массив (т.е. расшифрованную DLL),
PA>как теперь дать системе понять, что это DLL?
Это далеко не DLL. Кто отрезовит импорты? Кто обработает релоки? Кто, в конце концов, развернет секции PE-файла по тем смещениям, по которым они должны располагаться?

Дисковый образ PE-файла не эквивалентен образу развернутого PE-файла в памяти.

Варианта 2-а:
Re[4]: Загрузка DLL
От: PolA  
Дата: 03.05.12 18:02
Оценка:
Ясно, спасибо!
Re[2]: Загрузка DLL
От: ononim  
Дата: 03.05.12 18:08
Оценка:
PA>>- гружу его в память
PA>>- расшифровываю и получаю в памяти исходную DLL
PA>>- с этим все ок, но(!)
D>Рас с этим всё ок, то всё остальное вы должны и так знать.
D>А вообще, LoadLibrary регистрирует DLL в csrss (что бы DllMain вызывался при создании новых потов и т.п.).
В CSR он ее не регистрирует и к вызову DllMain'а CSR отношение не имеет, максимум — если у длл есть манифест — через CSR он создаст activation context этого манифеста (csr/basesrv содержит в себе менеджер всех этих манифестов).

А для DllMain'а — LoadLibrary добавляет длл в PEB LDR list. Это мона и ручками сделать, если очень надо.
Как много веселых ребят, и все делают велосипед...
Re[3]: Загрузка DLL
От: PolA  
Дата: 04.05.12 01:01
Оценка:
Хорошо, а может посоветуете хороший готовый упаковщик,
который сам сожмет DLL — как 32, так и 64-битные?
Re: Загрузка DLL
От: Odi$$ey Россия http://malgarr.blogspot.com/
Дата: 04.05.12 02:43
Оценка:
Здравствуйте, PolA, Вы писали:

PA>Хочу зашифровать DLL (неважно, зачем), так вот — как потом юзать такую DLL


http://rsdn.ru/article/baseserv/peloader.xml
Автор(ы): Максим М. Гумеров
Дата: 20.03.2003
Не вдаваясь в подробности, скажу лишь, что исследование было начато ради сокрытия использования программой на Delphi некоей DLL (написанной на VC++). То есть оператор видит один только Exe-файл, запускает его, а тот каким-то образом подключает функции, содержащиеся изначально (при компиляции проекта) в некоторой DLL.
Re: Загрузка DLL
От: pugv Россия  
Дата: 04.05.12 08:30
Оценка:
Здравствуйте, PolA, Вы писали:

PA>Как теперь мне получить ее handle (от лежащей в памяти, не на диске), чтобы вызывать ее функции?


LoadLibrary from Memory
Re[2]: Загрузка DLL
От: Аноним  
Дата: 06.05.12 14:15
Оценка:
Здравствуйте, acDev, Вы писали:

D>Здравствуйте, PolA, Вы писали:


PA>>- гружу его в память

PA>>- расшифровываю и получаю в памяти исходную DLL
PA>>- с этим все ок, но(!)

D>Рас с этим всё ок, то всё остальное вы должны и так знать.

D>А вообще, LoadLibrary регистрирует DLL в csrss (что бы DllMain вызывался при создании новых потов и т.п.).
D>Для поиска функций в таблице экспорта почитайте о PE формате.

Да вы товарищ из другой реальности!1
Re[2]: Загрузка DLL
От: _Ursus_  
Дата: 08.05.12 07:46
Оценка:
Здравствуйте, acDev, Вы писали:

D>А вообще, LoadLibrary регистрирует DLL в csrss (что бы DllMain вызывался при создании новых потов и т.п.).


ORLY?
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.