Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > C/C++ программирование > Общие вопросы C/C++
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 20.03.2013, 19:06   #1
Man197
 
Регистрация: 21.02.2013
Сообщений: 5
Вопрос Kernel-mode hook

Здравствуйте! Я пишу мини-антивирус, в связи с этим занялся разработкой драйвера перехвата API-функций. Делаю драйвер. Пытаюсь перехватить NtCreateProcess посредством подмены адреса в SSDT.
Привожу код:
Код:
// driver.c

#include <ntddk.h> 

#define DEBUG

#ifdef DEBUG
#define DPRINT DbgPrint
#else
#define DPRINT
#endif

typedef PVOID* PNTPROC;
typedef DWORD (ULONG);
typedef DWORD*	PDWORD;
typedef unsigned char (BYTE);
typedef BYTE* PBYTE;

typedef struct _SYSTEM_SERVICE_TABLE
{
	PNTPROC ServiceTable; 
	PDWORD  CounterTable; 
	ULONG   ServiceLimit; 
	PBYTE   ArgumentTable; 
}
SYSTEM_SERVICE_TABLE ,
	* PSYSTEM_SERVICE_TABLE ,
	* * PPSYSTEM_SERVICE_TABLE ;

typedef struct _SERVICE_DESCRIPTOR_TABLE {
	SYSTEM_SERVICE_TABLE ntoskrnl;  //SST для ntoskrnl.exe
	SYSTEM_SERVICE_TABLE win32k;    //SST для win32k.sys
	SYSTEM_SERVICE_TABLE unused1;   //не используется
	SYSTEM_SERVICE_TABLE unused2;   //не используется
}
SERVICE_DESCRIPTOR_TABLE ,
	* PSERVICE_DESCRIPTOR_TABLE,
	* * PPSERVICE_DESCRIPTOR_TABLE ;

//импортируем указатель на SDT
extern PSERVICE_DESCRIPTOR_TABLE KeServiceDescriptorTable;

//макрос для простого доступа к SST ядра
#define NTCALL(_function) KeServiceDescriptorTable->ntoskrnl.ServiceTable[_function]

//обьявляем прототип True функции для перехватываемой функции
typedef NTSTATUS (*NtCreatePrcPointer) (OUT PHANDLE ProcessHandle,
	IN ACCESS_MASK        DesiredAccess,
	IN POBJECT_ATTRIBUTES ObjectAttributes OPTIONAL,
	IN HANDLE             ParentProcess,
	IN BOOLEAN            InheritObjectTable,
	IN HANDLE             SectionHandle OPTIONAL,
	IN HANDLE             DebugPort OPTIONAL,
	IN HANDLE             ExceptionPort OPTIONAL);

//обьявляем True функцию
NtCreatePrcPointer TrueNtCreateProcess;

NTSTATUS NewNtCreateProcess (OUT PHANDLE ProcessHandle,
	IN ACCESS_MASK        DesiredAccess,
	IN POBJECT_ATTRIBUTES ObjectAttributes OPTIONAL,
	IN HANDLE             ParentProcess,
	IN BOOLEAN            InheritObjectTable,
	IN HANDLE             SectionHandle OPTIONAL,
	IN HANDLE             DebugPort OPTIONAL,
	IN HANDLE             ExceptionPort OPTIONAL)
{
	DPRINT("NTCREATE!");
	return TrueNtCreateProcess(ProcessHandle,DesiredAccess,ObjectAttributes,ParentProcess,InheritObjectTable,SectionHandle,DebugPort,ExceptionPort);
}

VOID DriverUnload(IN PDRIVER_OBJECT DriverObject)
{
	DPRINT("MRWKT: UNLOAD");
	NTCALL(0x2F)=TrueNtCreateProcess;
	return;
}

NTSTATUS DriverEntry(IN PDRIVER_OBJECT DriverObject,
	IN PUNICODE_STRING RegistryPath)
{
	DPRINT("MRWKT: LOAD");	
	TrueNtCreateProcess = NTCALL(0x2F);
	DPRINT("MRWKT: HOOK - %X => %X",NTCALL(0x2F),NewNtCreateProcess);
	NTCALL(0x2F) = NewNtCreateProcess;
	DriverObject->DriverUnload = DriverUnload;
	return STATUS_SUCCESS;
}
Драйвер успешно грузится и меняет адрес вызываемой функции (о чём говорит DbgView), но вот при запуске любого процесса в системе не происходит переход в мою процедуру (DbgView молчит). Собственно, вопрос: что я делаю не так?
P.S.: 0x2F - индекс NtCreateProcess в SDT под WinXP
Man197 вне форума Ответить с цитированием
Старый 22.03.2013, 11:51   #2
Man197
 
Регистрация: 21.02.2013
Сообщений: 5
По умолчанию

UP! Никто не пробовал писать драйвера что-ли? Кстати, возможна ли выгрузка случайного драйвера другим драйвером?
Man197 вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Maple (kernel connection has been lost) Ophion Помощь студентам 0 21.10.2012 18:11
Kernel object lalilulelo Операционные системы общие вопросы 0 17.04.2012 15:26
Boot Kernel на чистом Асме program2001 Assembler - Ассемблер (FASM, MASM, WASM, NASM, GoASM, Gas, RosAsm, HLA) и не рекомендуем TASM 1 19.10.2011 16:21
Not Optimum MOde Recommended Mode 1280 x 1024 60 Hz Error padsyukin Компьютерное железо 4 16.12.2010 10:54