SSDThook
来源:互联网 发布:三角洲装备知乎 编辑:程序博客网 时间:2024/06/05 19:39
SSDT hook整个流程:
获取SSDT表,自定义函数替换表中函数地址。
通过以下的方式获取SSDT表的内容:
typedef struct ServiceDescriptorTable { PVOID ServiceTableBase; PVOID ServiceCounterTable; unsigned int NumberOfSection; PVOID ParamTableBase; }*PServiceDescriptorTable;extern "C" PServiceDescriptorTable KeServiceDescriptorTable;
自定义函数:MyNtOpenProcess
extern "C" typedef NTSTATUS _stdcall NTOPENPROCESS ( OUT PHANDLE ProcessHandle, IN ACCESS_MASK AccessMask, IN POBJECT_ATTRIBUTES ObjectAttributes, IN PCLIENT_ID ClientId );NTOPENPROCESS *Real_NtOpenProcess;extern "C" NTSTATUS _stdcall MyNtOpenProcess( OUT PHANDLE ProcessHandle, IN ACCESS_MASK DesiredAccess, IN POBJECT_ATTRIBUTES ObjectAttributes, IN PCLIENT_ID ClientId ) { NTSTATUS rc; rc = Real_NtOpenProcess(ProcessHandle,DesiredAccess,ObjectAttributes,ClientId);; int PID = (int)ClientId->UniqueProcess; if(PID == g_MyPID &&-1 != g_MyPID) { KdPrint(("阻止的PID =========%d",PID)); ProcessHandle = NULL; rc = STATUS_ACCESS_DENIED; } return rc; }
hook 函数:
NTSTATUS Hook() { //Real_NtOpenProcess int* HookAddr; _asm{ push eax; push ebx; mov ebx,KeServiceDescriptorTable; mov ebx,[ebx]; mov eax,0xBE; shl eax,2; add ebx,eax; mov HookAddr,ebx; mov ebx,[ebx]; mov Real_NtOpenProcess,ebx; pop ebx; pop eax; } KdPrint(("Real_NtOpenProcess ====%x",Real_NtOpenProcess)); _asm{ cli mov eax,cr0; and eax,0xfffeffff; mov cr0,eax; } *HookAddr = (int)MyNtOpenProcess; _asm{ mov eax,cr0; or eax,0x10000; mov cr0,eax; sti; } return STATUS_SUCCESS; }
unHook 函数:
NTSTATUS UnHook() { int *HookAddr; _asm{ pushad; mov eax,KeServiceDescriptorTable; mov eax,[eax]; mov ebx,0xBE; shl ebx,2; add eax,ebx; mov HookAddr,eax; popad; } _asm{ cli mov eax,cr0; and eax,0xfffeffff; mov cr0,eax; } KdPrint(("operator of Unhook is successe Real_NtOpenProcess = %x ",Real_NtOpenProcess)); *HookAddr = (int)Real_NtOpenProcess; _asm{ mov eax,cr0; or eax,0x10000; mov cr0,eax; } return STATUS_SUCCESS; }
0 0
- SSDTHOOK
- SSDThook
- 查看SSDTHOOK其修改
- SSDTHook的原理
- SSDTHOOK关于拦截时弹窗的问题
- 内核编程之SSDTHook(1)原理
- Win7 64位的SSDTHOOK(1)---SSDT表的寻找
- SSDTHook实例--编写稳定的Hook过滤函数
- Win7 64位的SSDTHOOK(1)---SSDT表的寻找
- x86下以ntopenprocess为例的SSDTHook
- Win7 64位的SSDTHOOK(1)---SSDT表的寻找
- Win7 64位的SSDTHOOK(1)---SSDT表的寻找
- Win7 64位的SSDTHOOK(2)---64位SSDT hook的实现
- 内核编程之SSDTHook(2)Hook NtOpenProcess实现进程保护
- 内核编程之SSDTHook(3)Hook NtCreateSection监控所有可执行模块加载
- Win7 64位的SSDTHOOK(2)---64位SSDT hook的实现
- Win7 64位的SSDTHOOK(2)---64位SSDT hook的实现
- Win7 64位的SSDTHOOK(2)---64位SSDT hook的实现
- 线程的几种状态转换
- Tomcat配置Web程序几种方式
- 31. Next Permutation
- InnoDB---深入理解事务提交--02
- op+电桥分析
- SSDThook
- 时间的朋友2016笔记
- android开发中关于微信和支付宝支付问题,请进。
- 2016的尾声--我的起点
- InnoDB---深入理解事务提交--03
- soft
- triplet loss的原理及caffe代码
- android 如何执行大批量post请求?
- 机器学习常用算法