MSRHook与SSDTHook
//方式1:MSR Hook #include <ntifs.h> UINT32 oldaddr = ;
UINT32 pidtoprotect = ;
PCLIENT_ID pid = ;
PUINT32 accessmask = ;
UINT32 ssdtindex = ; VOID MyKiFastCallEntry();
//#pragma alloc_text(NONE_PAGE,MyKiFastCallEntry) VOID OnHook()
{ __asm
{
pushad
pushfd mov ecx, 0x176
rdmsr
mov oldaddr, eax mov ecx, 0x176
xor edx, edx
mov eax, MyKiFastCallEntry
wrmsr popfd
popad
} } VOID OffHook()
{
__asm
{
pushad
pushfd mov ecx,0x176
xor edx,edx
mov eax,oldaddr
wrmsr popfd
popad
}
} VOID UnloadMe(PDRIVER_OBJECT pdo)
{
OffHook();
} __declspec(naked) VOID MyKiFastCallEntry() //原来裸函数内不能使用auto或register变量的
{
__asm
{
mov ssdtindex, eax;
} if (ssdtindex == 0xbe)
{
_asm
{
push dword ptr[edx + * ];
pop pid;
push edx;
add dword ptr[esp], ;
pop accessmask; //这里得注意,这种方式,得到的是accessmask的地址..太阴险了
pushad;
}
if ((pid->UniqueProcess == pidtoprotect) && (*accessmask&0x0001))
{
KdPrint(("I'm Here2!\n"));
*accessmask &= ~0x0001;
}
_asm popad;
}
__asm
{ jmp oldaddr;
}
} NTSTATUS DriverEntry(PDRIVER_OBJECT pdo, PUNICODE_STRING ppath)
{
OnHook(); pdo->DriverUnload = UnloadMe;
return STATUS_SUCCESS;
} //不知为何,虽然保护成功了,但是在任务管理器多次结束任务,那么那个进程还是被结束了..
//方式2:SSDT Hook #include <ntifs.h> #pragma pack(1)
typedef struct _ServiceDescriptorEntry
{
ULONG *ServiceTableBase;
ULONG *ServiceCounterTableBase;
ULONG NumberOfServices;
UCHAR *ParamTableBase;
}SSDTEntry, *PSSDTEntry;
#pragma pack() NTSYSAPI SSDTEntry KeServiceDescriptorTable;
VOID OnHook();
VOID OffHook(); VOID OffMemProtect()
{
__asm
{
push eax;
mov eax, CR0;
and eax, ~0x10000;
mov CR0, eax;
pop eax;
}
} VOID OnMemProtect()
{
__asm
{
push eax;
mov eax, CR0;
or eax, 0x10000;
mov CR0, eax;
pop eax;
}
} VOID UnloadMe(PDRIVER_OBJECT pdo)
{
OffHook();
} ULONG pidtoprotect = ; typedef NTSTATUS(NTAPI *NTOPENPROCESS)(__out PHANDLE ProcessHandle,
__in ACCESS_MASK DesiredAccess,
__in POBJECT_ATTRIBUTES ObjectAttributes,
__in_opt PCLIENT_ID ClientId
);
NTOPENPROCESS oldaddr; NTSTATUS MyZwOpenProcess(
_Out_ PHANDLE ProcessHandle,
_In_ ACCESS_MASK DesiredAccess,
_In_ POBJECT_ATTRIBUTES ObjectAttributes,
_In_opt_ PCLIENT_ID ClientId
); NTSTATUS MyZwOpenProcess(
_Out_ PHANDLE ProcessHandle,
_In_ ACCESS_MASK DesiredAccess,
_In_ POBJECT_ATTRIBUTES ObjectAttributes,
_In_opt_ PCLIENT_ID ClientId
)
{
if ((ClientId->UniqueProcess == pidtoprotect) && (DesiredAccess & 0x0001))
{
KdPrint(("IM in"));
return STATUS_ACCESS_DENIED;
}
else
return oldaddr(ProcessHandle, DesiredAccess, ObjectAttributes, ClientId);
} VOID OnHook()
{
DbgBreakPoint();
OffMemProtect(); PULONG pssdtbase = KeServiceDescriptorTable.ServiceTableBase; ULONG uIndex = 0xbe; oldaddr = pssdtbase[uIndex];
pssdtbase[uIndex] = MyZwOpenProcess;
OnMemProtect(); } VOID OffHook()
{
OffMemProtect();
PULONG pssdtbase = KeServiceDescriptorTable.ServiceTableBase;
ULONG uIndex = 0xbe;
pssdtbase[uIndex] = oldaddr;
OnMemProtect();
} NTSTATUS DriverEntry(PDRIVER_OBJECT pdo, PUNICODE_STRING ppath)
{
OnHook(); pdo->DriverUnload = UnloadMe;
return STATUS_SUCCESS;
}
MSRHook与SSDTHook的更多相关文章
- SSDTHook实例--编写稳定的Hook过滤函数
解说怎样写Hook过滤函数,比方NewZwOpenProcess.打开进程. 非常多游戏保护都会对这个函数进行Hook. 因为我们没有游戏保护的代码,无法得知游戏公司是怎样编写这个过滤函数. 我看到非 ...
- Hook集合----SSDTHook(x86 Win7)
最近在学习Ring0层Hook的一些知识点,很久就写完SSDTHook的代码了,但是一直没有整理成笔记,最近有时间也就整理整理. 介绍: SSDTHook 实质是利用Ntoskrnl.exe 中全局导 ...
- ring0 关于SSDTHook使用的绕过页面写保护的原理与实现
原博:http://www.cnblogs.com/hongfei/archive/2013/06/18/3142162.html 为了安全起见,Windows XP及其以后的系统将一些重要的内存页设 ...
- ring0 恢复SSDTHook
原理: 用ZwQuerySystemInformation 功能号为11(SystemModuleInformation) 得到所有系统模块的地址 遍历搜索得到ntos模块的基地址 读Ntos模块到 ...
- ring0 SSDTHook 实现x64/x86
#include "HookSSDT.h" #include <ntimage.h> #define SEC_IMAGE 0x001000000 ULONG32 __N ...
- ring0 SSDTHook
SSDT 的全称是 System Services Descriptor Table,系统服务描述符表.这个表就是一个把 Ring3 的 Win32 API 和 Ring0 的内核 API 联系起来. ...
- 进程隐藏与进程保护(SSDT Hook 实现)(二)
文章目录: 1. 引子 – Demo 实现效果: 2. 进程隐藏与进程保护概念: 3. SSDT Hook 框架搭建: 4. Ring0 实现进程隐藏: 5. Ri ...
- 调用Nt函数内核模式切换问题
很久不写博客了,笔记大多记在电脑上在,以后整理好了再搬运上来吧. 今天记一下“进程内存管理器”这个小程序上遇到的一个问题——内核模式调用Nt*函数. 使用的是内核中的NtQueryVirtualMem ...
- ce+od无法同时附加进程的问题
CE+OD无法附加游戏进程的破解方法 来吧 别在为这烦恼了 其实看过 windows 核心编程那本书的人都知道 计算机编程领域 那些所谓的游戏保护 真的只是为难菜鸟而已,对于大鸟基本不起作用. 游戏无 ...
随机推荐
- 我的web前端整理和学习
知识点收藏:(边看.边记录.边写) 开直播学习:虎牙 待办事理>> 练习自我表达(把文章做成视频).技术学习总结(博客与公众号).跳出舒适圈. 前端知识体系:https://www.cnb ...
- Oracle的问题的解决
关于数据库的数据的导入导出 1.建数据库 修改密码的有效天数为无限期. 2.建表空间 3.建用户 导数据之前要建用户 要登进去试试 如themis_yw themi ...
- 读Vue源码二 (响应式对象)
vue在init的时候会执行observer方法,如果value是对象就直接返回,如果对象上没有定义过_ob_这个属性,就 new Observer实例 export function observe ...
- eclipse改jsp文件编码格式 统一设置
- SPOJ COT Count on a tree(树上主席树 + LCA 求点第k小)题解
题意:n个点的树,每个点有权值,问你u~v路径第k小的点的权值是? 思路: 树上主席树就是每个点建一棵权值线段树,具体看JQ博客,LCA用倍增logn求出,具体原理看这里 树上主席树我每个点的存的是点 ...
- Vue-admin工作整理(七):路由的切换动效
思路就是通过 transition-group 这个组件来对多组件进行控制,效果是通过样式来写,transition-group要有指定的key值,样式中通过name来命名类的名字 <templ ...
- [转载] 修改linux终端用户名的颜色
此文章为转载,来源:https://blog.csdn.net/vactivx/article/details/62219349,目的是怕以后他博客打不开,文章就没了.存个档. 这个基本都需要手动修改 ...
- react native 0.55.4 rctsrwebsocket会崩溃的问题解决 直接原文覆盖
//// Copyright 2012 Square Inc.//// Licensed under the Apache License, Version 2.0 (the "Licens ...
- aop(权限控制)
创建sysContext (管理请求) package com.tp.soft.common.util; import javax.servlet.http.HttpServletRequest; i ...
- python打包分发工具setuptools使用记录
关于python setup.py文件的编写技巧 环境:最新版setuptools,初步认识setuptools可以参考这篇文章 1. 自定义命令 from setuptools import set ...