вот код dll'ки
| Код | #include <wdm.h> #include "stdafx.h" #include "detours.h" #include "serii.h" #pragma comment(lib,"ntdll.lib");
//-----------------------------------описания используемых структур---------------------------
typedef DWORD ACCESS_MASK; typedef void *PVoid; typedef DWORD NTSTATUS;
typedef struct _IO_STATUS_BLOCK { union { DWORD Status; PVOID Pointer; }; ULONG_PTR Information; } IO_STATUS_BLOCK, *PIO_STATUS_BLOCK;
typedef struct _UNICODE_STRING { USHORT Length; USHORT MaximumLength; LPWSTR Buffer; } UNICODE_STRING, *PUNICODE_STRING;
typedef struct _OBJECT_ATTRIBUTES { ULONG Length; HANDLE RootDirectory; PUNICODE_STRING ObjectName; ULONG Attributes; PVOID SecurityDescriptor; PVOID SecurityQualityOfService; } OBJECT_ATTRIBUTES, *POBJECT_ATTRIBUTES;
//--------------------------------------объявление используемых функций-------------------------- //функция перехватчик NTSTATUS __stdcall ZwCreateFileDetour(OUT PHANDLE FileHandle, IN ACCESS_MASK DesiredAccess, IN POBJECT_ATTRIBUTES ObjectAttributes, OUT PIO_STATUS_BLOCK IoStatusBlock, IN PLARGE_INTEGER AllocationSize OPTIONAL, IN ULONG FileAttributes, IN ULONG ShareAccess, IN ULONG CreateDisposition, IN ULONG CreateOptions, IN PVOID EaBuffer OPTIONAL, IN ULONG EaLength);
typedef NTSTATUS (ZwCreateFileMy) (OUT PHANDLE , IN ACCESS_MASK, IN POBJECT_ATTRIBUTES, OUT PIO_STATUS_BLOCK, IN PLARGE_INTEGER, IN ULONG, IN ULONG, IN ULONG, IN ULONG, IN PVOID, IN ULONG); HINSTANCE hModule=::LoadLibrary("ntdll.dll"); ZwCreateFileMy *ZwCreateFile=(ZwCreateFileMy*)::GetProcAddress((HMODULE)hModule,"ZwCreateFile"); //-----------------------------------------------------------------------------------------------
DETOUR_TRAMPOLINE (NTSTATUS __stdcall ZwCreateFileTrampoline (PHANDLE,ACCESS_MASK, POBJECT_ATTRIBUTES, PIO_STATUS_BLOCK,PLARGE_INTEGER, ULONG, ULONG,ULONG , ULONG, PVOID, ULONG),CreateFile);
//-------------------------------------запустим бодягу-------------------------------
DllExport void RunStop (bool flag) { MessageBox(NULL,"Библа загружена","alert",MB_OK); if (flag) DetourFunctionWithTrampoline((PBYTE)ZwCreateFileTrampoline, (PBYTE)ZwCreateFileDetour); else DetourRemove ( (PBYTE)ZwCreateFileTrampoline, (PBYTE)ZwCreateFileDetour); }
//------------------------------------------------------------------------------------------------
//-----------------------------------перехватчик------------------------------------------------- NTSTATUS CALLBACK ZwCreateFileDetour(OUT PHANDLE FileHandle, IN ACCESS_MASK DesiredAccess, IN POBJECT_ATTRIBUTES ObjectAttributes, OUT PIO_STATUS_BLOCK IoStatusBlock, IN PLARGE_INTEGER AllocationSize OPTIONAL, IN ULONG FileAttributes, IN ULONG ShareAccess, IN ULONG CreateDisposition, IN ULONG CreateOptions, IN PVOID EaBuffer OPTIONAL, IN ULONG EaLength) { MessageBox(NULL,"А ты уверен, что тебе надо открывать этот файл","Hello, master",MB_YESNO); return ZwCreateFileTrampoline(FileHandle, DesiredAccess, ObjectAttributes,IoStatusBlock, AllocationSize OPTIONAL, FileAttributes, ShareAccess, CreateDisposition, CreateOptions, EaBuffer OPTIONAL, EaLength); }
BOOL APIENTRY DllMain( HANDLE hModule, DWORD ul_reason_for_call, LPVOID lpReserved) { return TRUE; } //-----------------------------------------------------------------------------------------------
/*******************************************The End*********************************************/
|
Библиотека загружаеться. Но функция не перехватываеться. Или я неправильно что-то делаю? ZwCreateFile ведь происходит когда создаеться или открываеться файл? |