Создание эффективных WIN32-приложений с учетом специфики 64-разрядной версии Windows


Внедрение DLL с помощью удаленных потоков - часть 5


На этом этапе DLL внедрена в удаленный процесс, а ее функция DllMam получила уведомление DLL_PROCESS_ATTACH и может приступить к выполнению нужного кода Когда DllMain вернет управление, удаленный поток выйдет из LoadLibrary и вернется в функцию BaseThreadStart (см. главу 6), которая в свою очередь вызовет ExitThread и завершит этот поток

Теперь в удаленном процессе имеется блок памяти, выделенный в п. 1, и DLL, все еще «сидящая» в его адресном пространстве. Для очистки после завершения удаленного потока потребуется несколько дополнительных операций.

  1. Вызовом VirtualFreeEx освободите блок памяти, выделенный в п. 1.
  2. С помощью GetProcAddress определите истинный адрес функции FreeLibrary внутри Kernel32.dll.
  3. Используя CreateRemoteThtead, создайте в удаленном процессе поток, который вызовет FreeLibrary с передачей HINSTANCE внедренной DLL.

Вот, собственно, и все. Единственный недостаток этого метода внедрения DLL (самого универсального из уже рассмотренных) — многие нужные функции в Windows 98 не поддерживаются. Так что данный метод применим только в Windows 2000.




Начало  Назад  Вперед



Книжный магазин