驱动学习
haodawei123
这个作者很懒,什么都没留下…
展开
-
Nt下隐藏文件和目录(转)
目前NT下有很多种隐藏文件和目录的方法,其中最简单的一种是给文件和文件夹加上系统属性和隐藏属性,操作系统就会不在显示了,而且查找也找不到了,但是这种方法一点都不彻底,没有可用性!下面我们来介绍用NT驱动程序来拦截NTAPI来实现彻底隐藏文件和目录的目的。NT下有一个文件NTDLL.DLL,大部分NTAPI都是在这个库中封装的。其中实现查找文件和目录的API接口是ZwQueryDirectoryFi...转载 2019-01-21 16:03:05 · 247 阅读 · 0 评论 -
ida符号文件路径设置
用ida进行内核调试时,需要设置一下ida的符号文件路径通过修改pdb.cfg文件的PDBSYM_SYMPATH这个来实现,修改之后打开ida,ida会先加载符号路径原创 2019-02-10 19:20:10 · 4856 阅读 · 0 评论 -
Win7 驱动测试debugview不能打印调试信息处理
使用DebugView打印内核调试信息是开发驱动的非常重要的手段,但DebugView在VISTA/WINDOWS 7下却无法获取内核的调试日志,修改方法是:HKLM/SYSTEM/CurrentControlSet/Control/Session Manager,打开或者创建子项Debug Print Filter,然后新建一个DWORD值DEFAULT,将其设置成0xF,重启即可。如果写成可...原创 2019-02-11 20:41:42 · 1643 阅读 · 0 评论 -
Cr0内核打开关闭写保护
////////////////////////////////////////////下面是32位编程实现/////////////////////////////////////////////////////////////////////// 关闭写保护#pragma PAGEDCODEvoid OpenGate(){__asm{cli;//将处理器标志寄存器的中断标志位清0...原创 2019-02-12 16:03:18 · 3559 阅读 · 3 评论 -
2--编译64位驱动,设置驱动测试签名
平台和配置属性平台选择x64,配置属性选择Win7 Debug,这是因为我会在虚拟机上运行我们的驱动,而我的虚拟机是Win7 64位。在测试我们的驱动程序时我们最好使用虚拟机进行操作,因为驱动程序很容易照成蓝屏。64位的OS只能加载64位的驱动程序,32位的OS只能加载32位的驱动程序。2. 设置测试签名64位的Windows系统在加载驱动时要求驱动必须被签名,我们可以在工程属性中设置一...转载 2019-02-13 17:06:40 · 704 阅读 · 0 评论 -
32位驱动模式写保护开关
**cr0寄存器的第17位就是内存写保护开关,当为0就关闭写保护,为0开启写保护**__asm{ cli;//将处理器标志寄存器的中断标志位清0,不允许中断 mov eax, cr0 and eax, ~0x10000//这里就是第17为设置为0,其他位不变 mov cr0, eax}////////////////////这里写修改内存的代码/////////////...原创 2019-01-31 20:43:02 · 365 阅读 · 0 评论 -
IoAllocateMdl,MmProbeAndLockPages的用法
第一,MDL的一个用法是提供驱动程序访问用户模式数据缓冲区的一种方式:直接I/O。也就是说通过MDL告诉驱动程序如何访问用户模式的数据缓冲区,这很好理解;第二,第二个用法是这样的,一些驱动程序在执行直接 I/O 来满足设备 I/O 控制请求时也使用 MDL,常用的方式如下:1,分配一个buf,可能是分页或者非分页的;2,调用IoAllocateMdl,指向这个buf;3,对于分页内存来说,...转载 2019-02-01 07:57:44 · 835 阅读 · 0 评论 -
MmMapLockedPagesSpecifyCache
MmMapLockedPagesSpecifyCache 函数介绍: 这个函数是专门为2000之后的windows版本设计的,在2000或者98甚至更早版本中,用的是函数:MmMapLockedPages; 函数原型: NTKERNELAPI PVOID MmMapLockedPagesSpecifyCache( IN PMDL MemoryDescripto...转载 2019-02-01 08:19:04 · 1834 阅读 · 0 评论 -
MDL,IoAllocateMdl,MmProbeAndLockPages,MmMapLockedPagesSpecifyCache函数使用说明
MDL只能在内核态使用,但它指定的虚拟内存即可以是内核态地址也可以是用户态地址。如果是用户态的地址你必须要自行弄清地址所在的进程上下文,因为不同的进程拥有不同的地址空间,即使地址的值一模一样它们包含的数据也一定完全不同。如果是内核态的地址那么事情会变的稍微简单点,因为在内核态地址空间是共享的,同一个地址里包含的数据一定是一样的。MDL本身的结构在DDK里有写,但它属于undocument结构,也...转载 2019-02-01 08:20:15 · 2123 阅读 · 0 评论 -
MDL 详解(待深入理解)
以下的虚拟内存可以理解成逻辑内存,因为我觉得只有这样才能讲通下面所有的东西。以下的“未分页”指没有为页进行编码。以下为MDL结构体(我很郁闷,我在MSDN上没有找到这个结构体)typedef struct _MDL {struct _MDL *Next; //下一个MDLCSHORT Size; //大小CSHORT MdlFlags; //标志,保护属性等struc...转载 2019-02-01 11:42:55 · 3460 阅读 · 0 评论 -
KdEnteredDebugger变量的定位
下面是 KdEnterDebugger函数xp下面的代码:通过这个函数可以定位到KdEnteredDebugger这个变量的位置8065e871 c705c4d4548001000000 mov dword ptr [nt!KdEnteredDebugger (8054d4c4)],18065e873-8065e806=0x6d,读取KdEnterDebugger函数的6d处就能得到 KdE...原创 2019-02-01 12:09:37 · 595 阅读 · 0 评论 -
MDL修改内核内存实现
NTSTATUS DriverEntry(PDRIVER_OBJECT driver,PUNICODE_STRING reg){PMDL mdl;PVOID addrMm;ULONG addrKdEnterDebugger;ULONG addrKdEnteredDebugger;UNICODE_STRING func;ULONG addr = 0;RtlInitUnicodeStr...原创 2019-02-01 21:30:02 · 3046 阅读 · 1 评论 -
内核dpc定时器使用
#include <ntddk.h>#define PAGEDCODE code_seg(“PAGE”)#define LOCKEDCODE code_seg()#define INITCODE code_seg(“INIT”)#define PAGEDDATA data_seg(“PAGE”)#define LOCKEDDATA data_seg()#define INI...原创 2019-02-02 11:39:31 · 1184 阅读 · 0 评论 -
绕过DebugPort清零自建调试体系
g_DebugPort是个全局变量通过NtCreateDebugObject来创建,在进程的回调句柄里面,然后将原创 2019-03-16 23:36:01 · 3068 阅读 · 1 评论