Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2002.03.07;
Скачать: CL | DM;

Вниз

Загрузка DLL в чужой процесс   Найти похожие ветки 

 
paul_shmakov ©   (2002-01-08 12:17) [6]

статические (статические методы более сложны и требуют понимания формата pe - portable executable):

1. добавление в pe-файл program.exe нескольких инструкций:

call loadlib
db "mydll.dll", 0
loadlib:
call LoadLibraryA
jmp OriginalEntryPoint

этот код можно добавить либо в существующую секцию с кодом (обычно .text) (если там есть свободное место), либо создать свою секцию. После этого подправить несколько полей в pe-заголовке, в частности EntryPoint, чтобы он указывал на новый код.
кроме того, program.exe должен импортировать функцию LoadLibrary. если нет - то все становиться намного сложнее. можно либо попытаться самостоятельено добавить эту функцию в секцию импорта, или находить ее адрес динамически. первый вариант может не пройти, т.к. место в таблице импорта не резиновое; второй тоже достаточно трудоемок. зато это все работает для всех версий виндов :)
2. изменение таблицы импорта. идея состоит в том, чтобы заставить стандартный виндовый загрузчик подумать, что программа статически использует вашу dll. Для этого необходимо, чтобы ваша dll экспортировала хотя бы одну произвольную функцию (функция может быть абсолютно любая, т.к. никто и никогда ее на самом деле вызывать не будет). Добавляем в таблицу импорта pe-файла новую запись, имя вашей dll, количество импортируемых функций равное 1, имя или ординал импортируемой функции и поле для адреса этой функции. у этого способа есть достоинства и, к сожалению, недостатки. загружать вашу dll будет уже не какой-то loader.exe, а стандартный виндусовый загрузчик pe-файлов, что конечно очень хорошо. а недостатки, опять же, технические: в секции импорта должно быть достаточно места для вышеназванных данных, что не всегда так. если я не ошибаюсь, то на эту тему очень хорошо писал Крис Касперски.

статические методы достаточно сложны для программной реализации. связано это с тем, что различные линкеры по разному трактуют формат pe (!). для начала рекомендую потренироваться в hiew.



Страницы: 1 вся ветка

Текущий архив: 2002.03.07;
Скачать: CL | DM;

Наверх




Память: 0.47 MB
Время: 0.012 c
3-19063
AlexRush
2002-02-07 13:22
2002.03.07
ADO Connection String BuidDialog в RunTime...


4-19378
otimist
2001-12-21 16:37
2002.03.07
WinAPI


14-19301
Свой
2002-01-20 14:39
2002.03.07
Сервер для меня


1-19149
xpyctuk
2002-02-18 08:36
2002.03.07
Обои в программе (BackGround)


4-19377
iXANiA
2002-01-04 15:57
2002.03.07
Как спрятать окно чужого приложения?