首页
Python
Java
IOS
Andorid
NodeJS
JavaScript
HTML5
windows内核情景分析 usb
2024-09-03
[11]Windows内核情景分析---设备驱动
设备驱动 设备栈:从上层到下层的顺序依次是:过滤设备.类设备.过滤设备.小端口设备[过.类.过滤.小端口] 驱动栈:因设备堆栈原因而建立起来的一种堆栈 老式驱动:指不提供AddDevice的驱动,又叫NT式驱动 Wdm驱动:指提供了AddDevice的驱动 驱动初始化:指IO管理器加载驱动后,调用驱动的DriverEntry.AddDevice函数 设备栈中上层设备与下层设备的绑定关系不是一对一,而是一对多.一个设备可以同时绑定到N个下层设备上去,而一个下层设备,也可以同时被N个上层设备绑定,但
几个常用内核函数(《Windows内核情景分析》)
参考:<Windows内核情景分析> 0x01 ObReferenceObjectByHandle 这个函数从句柄得到对应的内核对象,并递增其引用计数. NTSTATUS ObReferenceObjectByHandle( IN HANDLE Handle, IN ACCESS_MASK DesiredAccess, IN POBJECT_TYPE ObjectType,IN KPROCESSOR_MODE AccessMode, OUT PVOID* Object, OUT POBJEC
[1]windows 内核情景分析---说明
本文说明:这一系列文章(笔记)是在看雪里面下载word文档,现转帖出来,希望更多的人能看到并分享,感谢原作者的分享精神. 说明 本文结合<Windows内核情景分析>(毛德操著).<软件调试>(张银奎著).<Windows核心编程>.<寒江独钓-Windows内核安全编程>.<Windows PE权威指南>.<C++反汇编与逆向分析揭秘>以及ReactOS操作系统 (V0.3.12)源码,以<Windows内核情景分析>为
windows内核情景分析之—— KeRaiseIrql函数与KeLowerIrql()函数
windows内核情景分析之—— KeRaiseIrql函数与KeLowerIrql()函数 1.KeRaiseIrql函数 这个 KeRaiseIrql() 只是简单地调用 hal 模块的 KfRaiseIrql() 函数,返回原来的 IRQL 写入 KeRaiseIrql() 的第 2 个参数里,将它写回 C 代码如下: VOID KeRaiseIrql(KIRQL NewIrql, PKIRQL OldIrql) { KIRQL Irql = KfRaiseIrql(NewIrql); *
[14]Windows内核情景分析 --- 文件系统
文件系统 一台机器上可以安装很多物理介质来存放资料(如磁盘.光盘.软盘.U盘等).各种物理介质千差万别,都配备有各自的驱动程序,为了统一地访问这些物理介质,windows设计了文件系统机制.应用程序要访问存储在那些物理介质上的资料时,无需直接访问,只需借助文件系统即可对其有效访问.各种物理介质的存储方式千差万别,文件系统则按照'文件'的概念,把要存储的资料以文件为单位进行存放,然后,读取的时候也以文件为单位进行读取.当应用程序要访问资料时,只需指明'文件名+文件内偏移',文件系统自然就能找到实际
[7] Windows内核情景分析---线程同步
基于同步对象的等待.唤醒机制: 一个线程可以等待一个对象或多个对象而进入等待状态(也叫睡眠状态),另一个线程可以触发那个等待对象,唤醒在那个对象上等待的所有线程. 一个线程可以等待一个对象或多个对象,而一个对象也可以同时被N个线程等待.这样,线程与等待对象之间是多对多的关系.他们之间的等待关系由一个队列和一个'等待块'来控制,等待块就是线程与等待目标对象之间的纽带. WaitForSingleObject可以等待那些"可等待对象",哪些对象是'可等待'的呢?进程.线程.作业.文件对象.
[4]Windows内核情景分析---内核对象
写过Windows应用程序的朋友都常常听说"内核对象"."句柄"等术语却无从得知他们的内核实现到底是怎样的, 本篇文章就揭开这些技术的神秘面纱. 常见的内核对象有: Job.Directory(对象目录中的目录).SymbolLink(符号链接),Section(内存映射文件).Port(LPC端口).IoCompletion(Io完成端口).File(并非专指磁盘文件).同步对象(Mutex.Event.Semaphore.Timer).Key(注册表中的键).T
[15]Windows内核情景分析 --- 权限管理
Windows系统是支持多用户的.每个文件可以设置一个访问控制表(即ACL),在ACL中规定每个用户.每个组对该文件的访问权限.不过,只有Ntfs文件系统中的文件才支持ACL. (Ntfs文件系统中,每个文件的ACL是作为文件的一个附加属性保存在文件中的). 不仅ntfs文件支持ACL机制,每个内核对象也支持ACL,不过内核对象的ACL保存在对象头部的安全属性字段中,只存在于内存,对象一销毁,ACL就跟着销毁.因此,内核对象的ACL是临时的,文件的ACL则是永久保存在磁盘上的.文件的ACL由文件
[2]windows内核情景分析--系统调用
Windows的地址空间分用户模式与内核模式,低2GB的部分叫用户模式,高2G的部分叫内核模式,位于用户空间的代码不能访问内核空间,位于内核空间的代码却可以访问用户空间 一个线程的运行状态分内核态与用户态,当指令位于用户空间时,就表示当前处于内核态,当指令位于内核空间时,就处于内核态. 一个线程由用户态进入内核态的途径有3种典型的方式: 1. 主动通过int 2e(软中断自陷方式)或sysenter指令(快速系统调用方式)调用系统服务函数,主动进入内核 2. 发生异常,被迫进入内核 3. 发生硬
[13]Windows 内核情景分析 --- 网络通信
典型的基于tcpip协议套接字方式的网络通信模块层次: 应用程序 socket api WS2_32.dll socket irp Afd.sys tdi irp Tcpip.sys 回调函数接口 各Ndis中间层过滤驱动 回调函数接口 小端口驱动 中断交互操作 网卡 应用程序调用WS2_32.dll中的socket api,socket api在内部生成socket irp发给afd.sys这个中间辅助驱动层,afd.sys将socket irp转换成tdi irp发给tcpip协议驱动,协议
[8]windows内核情景分析--窗口消息
消息与钩子 众所周知,Windows系统是消息驱动的,现在我们就来看Windows的消息机制. 早期的Windows的窗口图形机制是在用户空间实现的,后来为了提高图形处理效率,将这部分移入内核空间,在Win32k.sys模块中实现.这个模块作为一个扩展的内核模块,提高了一个扩展额系统服务表,专用于窗口图形操作,相应的,这个模块中添加了一个扩展系统调用服务表Shadow SSDT,以及一个扩展的系统调用服务表描述符表:KeServiceDescriptorTableShadow.(系统中 不仅有两
[5]windows内核情景分析---进程线程
本篇主要讲述进程的启动过程.线程的调度与切换.进程挂靠 进程的启动过程: BOOL CreateProcess ( LPCTSTR lpApplicationName, // LPTSTR lpCommandLine, // command line string LPSECURITY_ATTRIBUTES lpProcessAttributes, // SD LPSECURITY_ATTRIBUTES lpThreadA
[3]windows内核情景分析--内存管理
32位系统中有4GB的虚拟地址空间 每个进程有一个地址空间,共4GB,(具体分为低2GB的用户地址空间+高2GB的内核地址空间) 各个进程的用户地址空间不同,属于各进程专有,内核地址空间部分则几乎完全相同 虚拟地址如0x11111111, 看似这8个数字是一个整体,其实是由三部分组成的,是一个三维地址,将这个32位的值拆开,高10位表示二级页表号,中间10位表示二级页表中的页号,最后12位表示页内偏移(2^12=4kb),因此,一个虚拟地址实际上是一个三维地址,指明了本虚拟地址在哪个二级页表,
[12]Windows内核情景分析 --- MDI
Mdl意为'内存映射描述符'.'缓冲描述符',一个mdl就代表一个缓冲.(任意一块物理内存,可以同时映射到用户地址空间和系统地址空间的) 设备IO方式分为三种:缓冲方式.直接IO方式.直接方式 缓冲方式:将用户空间中的数据拷贝到内核缓冲,将内核缓冲中的数据拷贝到用户空间,效率低,适合少量数据交换 直接IO方式:将用户空间中的内存通过MDL机制映射到系统地址空间,效率高,适合大数据交换 直接方式:直接使用用户空间地址,效率最高,但不安全. 向设备写数据的操作通过下面的内核API执行,我们看: NT
[10]Windows内核情景分析---中断处理
中断处理 每个cpu有一张中断表,简称IDT. IDT的整体布局:[异常->空白->5系->硬](推荐采用7字口诀的方式重点记忆) 异常:前20个表项存放着各个异常的描述符(IDT表不仅可以放中断描述符,还放置了所有异常的异常处理描述符,0x00-0x13) 保留:0x14-0x1F,忽略这块号段 空白:接下来存放一组空闲的保留项(0x20-0x29),供系统和程序员自己分配注册使用 5系:然后是系统自己注册的5个预定义的软中断向量(软中断指手动的INT指令) (0x2A-0x2E 5
[9]Windows内核情景分析 --- DPC
DPC不同APC,DPC的全名是'延迟过程调用'. DPC最初作用是设计为中断服务程序的一部分.因为每次触发中断,都会关中断,然后执行中断服务例程.由于关中断了,所以中断服务例程必须短小精悍,不能消耗过多时间,否则会导致系统丢失大量其他中断.但是有的中断,其中断服务例程要做的事情本来就很多,那怎么办?于是,可以在中断服务例程中先执行最紧迫的那部分工作,然后把剩余的相对来说不那么重要的工作移入到DPC函数中去执行.因此,DPC又叫ISR的后半部.(比如每次时钟中断后,其isr会扫描系统中的所有定时
[6]Windows内核情景分析 --APC
APC:异步过程调用.这是一种常见的技术.前面进程启动的初始过程就是:主线程在内核构造好运行环境后,从KiThreadStartup开始运行,然后调用PspUserThreadStartup,在该线程的apc队列中插入一个APC:LdrInitializeThunk,这样,当PspUserThreadStartup返回后,正式退回用户空间的总入口BaseProcessStartThunk前,会执行中途插入的那个apc,完成进程的用户空间初始化工作(链接dll的加载等) 可见:APC的执行时机之一
windows内核情景分析之中断处理(毛德操)[转]
中断处理 每个cpu有一张中断表,简称IDT. IDT的整体布局:[异常->空白->5系->硬](推荐采用7字口诀的方式重点记忆) 异常:前20个表项存放着各个异常的描述符(IDT表不仅可以放中断描述符,还放置了所有异常的异常处理描述符,0x00-0x13) 保留:0x14-0x1F,忽略这块号段 空白:接下来存放一组空闲的保留项(0x20-0x29),供系统和程序员自己分配注册使用 5系:然后是系统自己注册的5个预定义的软中断向量(软中断指手动的INT指令) (0x2A-0x2E5个系
[16]Windows内核情景分析 --- 服务管理
随时可以看到任务管理器中有一个services.exe进程,这个就是系统的服务控制管理进程,简称SCM 这个进程专门用来管理服务(启动.停止.删除.配置等操作) 系统中所有注册的服务都登记在\HKEY_LOCAL_MACHINE\System\CurrentControlSet\Services键下,这个键专门叫做'服务键',服务键下面的每个子键代表一个服务,记录了各个服务的信息. 每个服务可以是独立的服务,也可以位于某个服务组内.用户不仅可以注册服务,还可以注册服务组,并指定服务与服务组之间的
Linux内核情景分析之异常访问,用户堆栈的扩展
情景假设: 在堆内存中申请了一块内存,然后释放掉该内存,然后再去访问这块内存.也就是所说的野指针访问. 当cpu产生页面错误时,会把失败的线性地址放在cr2寄存器.线性地址缺页异常的4种情况 1.如果cpu访问的行现地址在内核态,那么很可能访问的是非连续区,需要vmalloc_fault处理. 2.缺页异常发生在中断或者内核线程时,直接失败,因为不可修改页表 3.地址在一个区间内,那就可能是已经物理地址映射了但权限问题(错误处理)或者其物理地址没有分配(分配物理内存) 4.如果找到一个在线性地址
热门专题
Unity 编译Mono
小程序下方弹出填写表单
完美世界开启虚拟机后台地址却是英文
innosetup根据系统展示不同依赖组件
input框默认字体改位置
jenkins 如何使用sudo命令
linux svn 无法保存密码
远程获取mysql密码
Cloud Native云化
springboot项目使用docker启动
selenium8大定位方法
mac 在某个目录 进入命令行
hadoop一直卡在自检模式
mysql 修改核对和字段的核对
allure loguru无法记录
SpotlightonUnix下载
elementui 跨组件传参
win10某个文件夹的内容同步到领一个文件夹
java8 peek警告
dbcontext 线程池耗尽