内核钩子函数漏洞挖掘笔记

既然驱动不给你机会通讯,那么另辟蹊径,你喜欢HOOK我内核函数,我直接挖你的钩子函数漏洞
先来看看hook分类:
r3下的:Hook API ,IAT Hook , EAT Hook
r0下的:SSDT Hook ,SSSDT Hook,IDTHook,SYSENTRY Hook, Object Hook

而我们需要关注的只是在r0下的hook
用火绒剑或pchunter定位到被hook的地址
也可以自己打个驱动 定位被hook的函数地址
定位到之后写个小fuzzer跑 很简单 无线调用该函数(定位不到 直接windbg看 写死就完事了) 搞个小算法对参数变异 值得一提的是如果想记录崩溃得话 得一直操作文件 对参数内容进行保存。否则蓝屏了都不知道参数内容
iad逆向实战演示
2345安全卫士 该软件所有驱动 都要超级管理员权限
安装后查看ssdt hook在这里插入图片描述

在这里插入图片描述
NtCreateKey函数地址减去模块基地址 得出函数偏移2dc0
定位驱动文件 拷贝到真机下 放进ida 加载函数后搜索2dc0就能定位 被hook后的NtCreateKey做啥了

在这里插入图片描述
接下里就是分析 漏洞可能会出现地方 并且调用该函数去测试了
在这里插入图片描述
函数声明

#include <windows.h>
#include <stdio.h>
typedef struct _UNICODE_STRING
{
	WORD Length;
	WORD MaximumLength;
	WORD* Buffer;
} UNICODE_STRING, * PUNICODE_STRING;
typedef struct _OBJECT_ATTRIBUTES
{
	ULONG Length;
	PVOID RootDirectory;
	PUNICODE_STRING ObjectName;
	ULONG Attributes;
	PVOID SecurityDescriptor;
	PVOID SecurityQualityOfService;
} OBJECT_ATTRIBUTES, * POBJECT_ATTRIBUTES;
typedef NTSTATUS (NTAPI* NtCreateKey)(
	__out PHANDLE KeyHandle,
	__in ACCESS_MASK DesiredAccess,
	__in POBJECT_ATTRIBUTES ObjectAttributes,
	__reserved ULONG TitleIndex,
	__in_opt PUNICODE_STRING Class,
	__in ULONG CreateOptions,
	__out_opt PULONG Disposition
);
NtCreateKey skyNtCreateKey;
int main() {

	LPCWSTR nt = L"ntdll";
	HMODULE hntdll = GetModuleHandle(nt);
	skyNtCreateKey = (NtCreateKey)GetProcAddress((HMODULE)hntdll, "NtCreateKey");
	if (!skyNtCreateKey) {
		printf("[-] Fail to resolve NtCreateKey(0x%X)\n", GetLastError());
		system("pause");
	}
	return 0;
}

猜你喜欢

转载自blog.csdn.net/qq_43045569/article/details/106516299