Реферат: Перехват API-функций в Windows NT2000XP
Чтобы опробовать все вышесказанное в деле, сначала подыщите на своем компьютере какое-либо приложение, имеющее в своем составе окна сообщений типа MessageBox. Подопытное приложение написано нами самими, оно называется MESS.EXE и выводит друг за другом три окна сообщений, коллаж из которых показан на рисунке:
Рисунок 2
Затем, откомпилируйте примеры внедряемых DLL, описанных выше. Результат компиляции мы назвали у себя METOD1.DLL и METOD2.DLL.
Откомпилируйте пример процедуры внедрения этих DLL в код внешнего процесса. Для работоспособности этой процедуры к ней нужно добавить код главного модуля программы, нечто вроде:
int main(int argc, char* argv[]) { if(argc<3) { printf("Parameters: PID , Dllname"); getch(); return 0; } InjectDll(atol(argv[1]), argv[2]); return 0; } |
При запуске этой программы (назовем ее ATTACH .EXE) в качестве параметров надо будет указать идентификатор процесса, в который мы внедряем свой код, и имя DLL, которую следует прицепить к внешнему процессу.
Скопируйте все три полученных модуля METOD1.DLL, METOD2.DLL, ATTACH .EXE в один каталог (например, C:\TEST\). Теперь можно приступать к тестированию.
Запустите программу-жертву (в нашем случае это MESS.EXE). Откройте Диспетчер задач, найдите в нем запущенный процесс (mess.exe):
Рисунок 3
и определите его PID (в нашем случае PID mess.exe равен 1076).
Теперь из командной строки запустите программу внедрения кода первой DLL:
АТТАСН.EXE 1076 C:\TEST\ METOD1.DLL |
В результате при попытке вызвать окно MessageBox в программе MESS.EXE вы будете получать одно и то же изображение:
Рисунок 4
Перехват функции API произошел!
Заключение
“Не так страшен черт, как программы MicroSoft…” Тем не менее, если читатель вдумчиво пропустил через себя изложенный материал, то увидел, что, как обычно, все гениальное – просто. И даже такая вещь, как перехват API в Windows NT, не требует сверхсложного программного кода и может быть реализована по первому желанию.