Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "WinAPI";
Текущий архив: 2002.03.07;
Скачать: [xml.tar.bz2];

Вниз

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

 
paul_shmakov   (2002-01-08 12:16) [5]

динамические:

1. см. выше Wizard (06.01.02 14:52). недостатки метода - mydll.dll грузиться во все неконсольные процессы.
2. с помощью хуков. создается библиотека (inject.dll), из которой экспортируется функция (InjectMyDll), которая устанавливает глобальную ловушку на посылку любого сообщения. В этой же dll находиться функция-обработчик хука. Далее, процесс-загрузчик (loader.exe) подгружает inject.dll, вызывает InjectMyDll, та, в свою очередь, сразу же посылает главному окну
program.exe сообщение SendMessage(hWnd, WM_NULL, 0, 0) для того, чтобы program.exe первым подгрузил inject.dll. после того, как inject.dll загрузилась, вызывается код функции-обработчика хука. Эта функция и должна вызвать LoadLibrary("mydll.dll"). После того ловушку сразу снимаем, чтобы inject.dll не грузилась во все работающие процессы.
почему нельзя сразу было грузить mydll.dll вместо inject.dll? Потому что inject.dll выгрузиться виндами после снятия ловушки. Это самый простой способ.
этот способ не работает на консольных приложениях.
3. загрузка с помощью удаленного потока. в адресном пространстве процесса program.exe выделяем память (pMem = VirtualAllocEx), копируем в нее название нашей dll, т.е. строку "mydll.dll". Далее вызываем функцию CreateRemoteThread(..,..,.., @LoadLibraryA, pMem, .., ..). Т.е. создаем поток в чужом процессе, передавая в качестве функции потока адрес LoadLibrary, а в качксве параметра - адрес строки "mydll.dll". поток запускается, вызывается LoadLibrary и подгружается наша dll. очень удобный и простой метод. единственный недостаток - не работает под win9x.
4. более сложный метод. можно загрузить program.exe для отладки (флаг DEBUG_ONLY_THIS_PROCESS в CreateProcess). Тогда вашему процессу будет выдаваться куча уведомлений о том, что происходит в отлаживаемом процессе. Одно из таких уведомлений приходит, когда загрузчик windows загрузил процесс и все импортируемые им библиотеки, и процесс готов выполнить свою первую команду. вот в этот-то момент и можно вручную (программно) выделить в этом процессе себе память, записать туда название вашей dll, машинные инструкции для загрузки вашей dll и переход на оригинальную точку входа, после этого подправить структуру CONTEXT (исправить в ней регистр eip для того, чтобы он указывал на начало вашего "патча"), установить этот новый контекст (SetThreadContext) и запустить program.exe на дальнейшее выполнение. метод сложный, но универсальный. работает для любых приложений на всех операционках.



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

Форум: "WinAPI";
Текущий архив: 2002.03.07;
Скачать: [xml.tar.bz2];

Наверх





Память: 0.45 MB
Время: 0.004 c
14-19315
DarT
2002-01-21 17:01
2002.03.07
Помогите


14-19305
Свой
2002-01-17 23:40
2002.03.07
Действия эксплорера


1-19224
hair_fly
2002-02-19 12:54
2002.03.07
Как записать полную информацию о форме в stream ?


4-19382
Slyer
2002-01-05 05:47
2002.03.07
Задержка при вводе...


1-19212
kserg@ukr.net
2002-02-19 11:28
2002.03.07
Как установить новый компонент?





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский