Реферат: Методы перехвата API-вызовов в Win32

#define DRIVE_REMOTE 4

#define DRIVE_CDROM 5

#define DRIVE_RAMDISK 6

Перехват этой функции позволяет «обманывать» программы Windows, переопределяя значение, возвращаемое этой функцией, для любого диска.

Программа DriveType2 состоит из двух модулей: DriveType2.exe и DT2lib.dll.

DriveType2.exe реализует интерфейс, а вся работа выполняется в DT2lib.dll.

Проект DT2lib состоит из трёх основных файлов:

APIHook.cpp – этот файл написан Джеффри Рихтером (за исключением некоторых исправлений, сделанных мной. О них я расскажу ниже). В этом файле описан класс CAPIHook, реализующий перехват заданной API-функции во всех модулях текущего процесса. Здесь же автоматически перехватываются функции LoadLibraryA, LoadLibraryW, LoadLibraryExA, LoadLibraryExW и GetProcAddress.

Toolhelp.h – этот файл также написан Джеффри Рихтером. В нём описан класс CToolhelp, реализующий обращение к системным toolhelp-функциям. В данном случае он используется классом CAPIHook для перечисления всех модулей, подключенных к процессу.

DT2Lib.cpp – в этом файле я реализовал перехват функции GetDriveTypeA с использованием класса CAPIHook, а также установку ловушки типа WH_GETMESSAGE, обеспечивающей подключение данного модуля (DT2lib.dll) ко всем потокам в системе.

Как же происходит перехват?

Сразу же после запуска DriveType2.exe вызывается функция DT2_HookAllApps из DT2lib.dll, которая устанавливает ловушку.

BOOL WINAPI DT2_HookAllApps(BOOL fInstall, DWORD dwThreadId)

{

BOOL fOk;

if (fInstall)

{

chASSERT(g_hhook == NULL); // 2 разаперехватыватьникчему

g_hhook = SetWindowsHookEx(WH_GETMESSAGE, GetMsgProc,

ModuleFromAddress(DT2_HookAllApps), dwThreadId); // Установимловушку

fOk = (g_hhook != NULL);

}

else

{

chASSERT(g_hhook != NULL); // Снимать-то нечего

fOk = UnhookWindowsHookEx(g_hhook); // Снимем ловушку

g_hhook = NULL;

}

return(fOk);

К-во Просмотров: 357
Бесплатно скачать Реферат: Методы перехвата API-вызовов в Win32