
windows内核
文章平均质量分 74
jyl_sh
多年从事IT项目的开发和管理工作,主要从事过电力、电信、邮政、教育、金融等行业的IT系统的开发建设及项目管理工作
展开
-
Flag寄存器
8086CPU的标志寄存器有16位,其中存储的信息通常被称为程序状态字(PSW)。标志寄存器(简称为flag)和其他寄存器不一样,其他寄存器是用来存放数据的,都是整个寄存器具有一个含义。而flag寄存器是按位起作用的,也就是说,它的每一位都有专门的含义,记录特定的信息。当执行一个加法(或减法)运算,使结果的低4位向高4位有进位(或借位)时,AF=1;CF(Carry Flag)——进位标志位。CPU内部的寄存器中,有一种特殊的寄存器(对于不同的处理机,个数和结构都可能不同)具有以下3种作用。原创 2024-05-29 10:06:03 · 570 阅读 · 0 评论 -
Detours学习之十四:Detour 4.0 的编译
第一步:下载源码 地址 https://github.com/Microsoft/Detours/releases ,并解压至自己选择好的目录。例如 C:\work\detours\第二步:编译x86 ,32位的编译打开VS 32位的命令行工具。这个可以是在开始——应用程序——vs2017找到。输入:cd C:\work\Detoursnmake -f makefile即可得到32位的编译结果。x64,64位的编译选择x64的cmd。输入:cd C:\work\De...原创 2021-10-29 22:50:07 · 3088 阅读 · 0 评论 -
Detours学习之十三:Detours API用于将dll和有效负载插入新进程的api
用于将dll和有效负载插入新进程的apiDetourCreateProcessWithDllEx DetourCreateProcessWithDlls DetourCopyPayloadToProcess DetourCopyPayloadToProcessEx DetourFinishHelperProcess DetourIsHelperProcess DetourRestoreAfterWith一、DetourCreateProcessWithDllEx创建一个新进程并将DLL原创 2021-10-29 09:32:05 · 3140 阅读 · 0 评论 -
Detours学习之十二:Detours API用于修改二进制文件的api
用于修改二进制文件的apiDetourBinaryOpen DetourBinaryEnumeratePayloads DetourBinaryFindPayload DetourBinarySetPayload DetourBinaryDeletePayload DetourBinaryPurgePayloads DetourBinaryEditImports DetourBinaryResetImports DetourBinaryWrite DetourBinaryClose一原创 2021-10-29 09:31:41 · 843 阅读 · 0 评论 -
Detours学习之十一:用于访问已加载的二进制文件和有效负载的api
用于访问已加载的二进制文件和有效负载的apiDetourEnumerateModules DetourGetEntryPoint DetourGetModuleSize DetourEnumerateExports DetourEnumerateImport DetourEnumerateImportEx DetourFindPayload DetourFindPayloadEx DetourFindRemotePayload DetourGetContainingModule De原创 2021-10-28 16:45:34 · 756 阅读 · 0 评论 -
Detours学习之十:用于查找目标函数的api
用于查找目标函数的apiDetourFindFunction DetourCodeFromPointer一、DetourFindFunction通过名称找到目标函数的地址。 定义 PVOID DetourFindFunction(_In_ LPCSTR pszModule, _In_ LPCSTR pszFunction); 参数 pszModule:应该在其中找到函数的DLL或二进制文件的路径。pszFunction:要查找的函数名。 返回值 如果成功,返回原创 2021-10-28 16:16:27 · 1013 阅读 · 0 评论 -
Detours学习之九:用于路由目标函数的api
用于路由目标函数的apiDetourTransactionBegin DetourUpdateThread DetourAttach DetourAttachEx DetourAllocateRegionWithinJumpBounds DetourDetach DetourSetIgnoreTooSmall DetourSetRetainRegions DetourSetSystemRegionLowerBound DetourSetSystemRegionUpperBound D原创 2021-10-28 16:08:12 · 1844 阅读 · 0 评论 -
Detours学习之八:DetoursAPI 函数参考
Detours API 函数参考The Table of Contents provides an alphabetical listing of the available API functions, which can be grouped as follows: 目录按字母顺序列出可用的API功能,可分为以下类别:APIs For Detouring Target Functions 用于迂回目标函数的apiDetourTransactionBegin DetourUpdateThre原创 2021-10-28 11:58:48 · 673 阅读 · 0 评论 -
Detours学习之七:Detours示例程序构建
Detours示例程序构建要构建示例应用程序,请在samples目录中键入nmake。注意,为了使用许多其他示例程序,必须构建setdll和syslog示例。 每个样例目录都有一个测试,可以通过键入nmake test调用它来演示样例的用法。除了极少数例外,所有的.exe程序也接受/?命令显示使用信息。 跟踪示例通过syelogd.exe守护进程记录其输出,并挂钩CreateProcessW以将自己加载到任何子进程。例如,输入withdll -d:trac...原创 2021-10-28 11:55:09 · 3218 阅读 · 0 评论 -
Detours学习之六:32位和64位进程路由
32位和64位进程 Detours最常见的使用场景是通过路由绕过现有应用程序中的功能,而不修改原始应用程序二进制文件。在这些场景中,用户提供的DetourCreateProcessWithDll函数被打包在DLL中,DLL在启动时使用DetourCreateProcessWithDll API加载到应用程序中。从父进程调用DetourCreateProcessWithDll API;它通过为detour DLL插入导入表项来更改应用程序的内存副本。这个新的导入表条目导致OS加载程序在应用程序...原创 2021-10-28 11:45:09 · 1278 阅读 · 0 评论 -
Detours学习之五:PayLoads有效负载和DLL导入编辑
PayLoads有效负载和DLL导入编辑 除了附加和分离detours函数的api外,detours包还包括附加任意数据段(称为有效负载)到Windows二进制文件和编辑DLL导入表的api。Detours中的二进制编辑api是完全可逆的;Detours在二进制文件中存储恢复信息,以便在将来的任何时候删除编辑。 Windows PE二进制文件格式。 上图显示了Windows Portable Executable (PE)二进制文件的基本结构。Windows二进制...原创 2021-10-28 11:37:48 · 3796 阅读 · 0 评论 -
Detours学习之四:拦截二进制函数
拦截二进制函数 Detours库支持拦截函数调用。拦截代码在运行时动态应用。Detours将目标函数的前几个指令替换为无条件跳转到用户提供的detour函数。来自目标函数的指令保存在trampoline函数中。trampoline由从目标函数中删除的指令和无条件地转移到目标函数的其余部分组成。 当执行到达目标函数时,控制直接跳转到用户提供的detour函数。detour函数执行任何适当的拦截预处理。detour函数可以将控制权返回给源函数,也可以调用trampoline函...原创 2021-10-28 11:08:36 · 664 阅读 · 0 评论 -
Detours学习之三:使用Detours
使用Detours为了达到拦截和截获绕过目标函数,有两件事是必要的:一个包含目标函数地址的目标指针和一个detour函数。为了正确拦截目标函数、detour函数和目标指针,必须具有完全相同的调用签名,包括参数数量和调用约定。使用相同的调用约定可以确保正确地保存寄存器,并确保在detour函数和目标函数之间正确地对齐堆栈下面的代码片段说明了Detours库的用法。用户代码必须包含detours.h头文件并链接到detours.lib库。#include <w...原创 2021-10-28 10:33:35 · 1687 阅读 · 0 评论 -
windows内核开发学习笔记五十:x64调用协定
本篇文章描述x64代码中一个函数(调用方)用来调用另一个函数(被调用方)的标准流程和约定。调用约定违约x64应用程序二进制接口(ABI)默认使用四个寄存器的快速调用约定。在调用堆栈上分配空间作为一个影子存储,供调用者保存这些寄存器。在函数调用的参数和用于这些参数的寄存器之间有严格的一对一对应关系。任何不适合8字节的参数,或者不是1、2、4或8字节的参数,都必须通过引用传递。一个参数永远不会分布在多个寄存器上。x87寄存器堆栈未被使用。被调用方可能会使用它,但是在函数调用中它是vo原创 2021-08-06 14:47:52 · 1494 阅读 · 0 评论 -
windows内核开发学习笔记四十九:安全管理强制访问模型
以上就是SRM中自主f访问控制的实现过程。SRM的强制访问过程是通过特权检查来实施的,sePrivilegeCheck调位于base\ntos\se\privileg.c文件中的SepPrivilegeCheck函数执行实际的特权检查。其参数Token代表了当前线程的安全环境,如同SepAccessCheck函数也需要代表调用线程的令牌一样;参数RequirePrivileges和RequiredPrivilegeCount合起来指明了调用线程要请求一组特权;参数PrivilegeSetCo...原创 2021-07-08 18:35:01 · 855 阅读 · 1 评论 -
windows内核开发学习笔记四十八:安全管理自主访问模型
接着上一篇博文学习安全管理,现在我们来学习对象管理器如何让使用SRM的安全检查的,当一个进程打开一个对象时,对象管理器在名字空间中查到目标对象后,但是在返回给句柄调用者以前,它调用\base\ntos\ob\obse.c文件中的ObCheckObjectAccess函数检查访问许可。ObCheckObjectAccess是对象管理器的函数,它将对象管理器与SRM的安全机制连接起来。它首先调用ObGetObjectSecurity函数以获得目标对象的SD(安全描述符),数据类型为SECURIT...原创 2021-07-08 18:32:06 · 697 阅读 · 0 评论 -
windows内核开发学习笔记四十七:安全管理
windows系统有严格的安全模型,既实现了以对象为基础的自主访问控制(discretionary access control)又实现了系统级的强制访问控制(mandatory access control)。在自主访问的控制模型中,对象的所有者授权或拒绝哪些用户可以访问该对像。基于对象的访问控制并不能保护系统的所有操作,因为操作并没有与一个特定的对象联系在一起,如系统停机(shutdown)、备份文件核目录、交互式登陆到系统中等;甚至有些操作针对整个系统,并不与特定用户账号相关联,如账户...原创 2021-07-08 09:32:14 · 675 阅读 · 1 评论 -
windows内核开发学习笔记四十六:事件追踪(ETW)
Windows提供了统一的跟踪和记录事件的机制,称为ETW(Event Tracing For Windows)。用户模式应用程序和内核模式驱动程序都可以使用ETW来记录事件。ETW是直接由内核支持的事件记录机制。在它的框架结构中,共有三种组件:控制器(Control):负责启动、停止或配置事件记录会话。 提供者(Provider):负责向ETW注册自己的事件类,并接受控制器的命令,以便启动或者停止它们所负责的事件类的记录过程。 消费者(Consumer):负责有针对性地读取它们想要...原创 2021-07-07 13:30:02 · 4541 阅读 · 0 评论 -
windows内核开发学习笔记四十五:内核配置管理器
配置管理器是执行体中的组件,它的实现依赖于内存管理器和缓存管理器(以及文件系统),这就意味着它必须要在这些组件初始化以后才能正常工作;然而在系统初始化的早期(比如I/O子系统的初始化),windows已经需要使用注册表中的配置信息了,但此时配置管理器尚未被初始化。windows的做法是,在内核初始化以前,内核加载器(ntldr)已经将整个HKLM\SYSTEM储巢作为一个只读文件加载到了内存中,因而配置管理器在完全初始化以前只需要直接把巢室索引加上该储巢的内存映射地址,就可以得到巢室的内存地...原创 2021-07-06 16:56:09 · 822 阅读 · 0 评论 -
windows内核开发学习笔记四十四:注册表存储结构-储巢
上一篇文章学习了注册表的逻辑结构,接下来我这篇文章来学习注册表的存储结构。注册表实际存储是由一组储巢构成,每个储巢包含了一个由键和值构成的层次结构。下面表是windows的各个储巢的注册表路径和文件路径。一个系统的储巢列表存放在HKLM\SYSTEM\CurrentControlSet\Control\hivelist键下。当系统初始化时,HKLM\SYSTEM总是被先加载进来,然后配置管理器找到hivelist键,继续加载其他的储巢,并创建注册表的根键,将这些储巢连接起来,就建立起了完整的...原创 2021-07-05 17:19:40 · 721 阅读 · 0 评论 -
windows内核开发学习笔记四十三:注册表逻辑结构
Windows系统的很多组件都是可以配置的原创 2021-07-05 13:46:29 · 1045 阅读 · 0 评论 -
windows内核开发学习笔记四十二:内核对象管理目录及接口
windows内部维护了一个对象层次目录(即系统全局名字空间),其根目录对象是由全局变量ObpRootDirectoryObject来定义的。在根目录之下,系统内置了一些子目录,通过查询NtCreateDirectoryObject函数可以看到CallBack、ArcName、Device、Driver、FileSystem、KernelObjects、ObjectTypes、GLOBAL??和Security子目录的创建过程,下面的是创建Driver子目录的代码://创建driver目...原创 2021-07-04 21:03:48 · 801 阅读 · 0 评论 -
windows内核开发学习笔记四十一:内核对象管理机理
对象管理器是执行体中的组件,主要管理执行体对象。执行体对象也可能封装了一个或多个内核对象。原创 2021-07-03 21:21:16 · 593 阅读 · 3 评论 -
windows内核开发学习笔记四十:内核概念之同步处理
现代操作系统中,由于多处理器、多核或者中断等各种并发(concurrency)因素的存在,同样的代码有可能被并发执行,而数据也可能被并发访问。在这种情况下,对于可能被并发访问的数据进行必要的同步(synchronization)保护是一种常见的编程实践。windows操作系统提供了多种同步机制,使得系统代码或者应用程序代码能够选择恰当的手段来保护其代码和数据。根据执行环境中的IRQL值大于APC_LEVEL或者等于PASSIVE_LEVEL,可以将同步机制分为:不依赖于线程调度的同步机制 和...原创 2021-06-29 12:11:17 · 693 阅读 · 0 评论 -
windows内核开发学习笔记三十九:内核概念之中断和异常
中断(interrupt)是处理器与外部设备打交道的重要途经;而异常(exception)则是处理器的正常指令流在执行过程中产生一些特殊事件,需要紧急处理才能继续原来的指令流。它们都会打断一个正常的指令流,但区别在于,中断的发生与当前指令流并无实质的联系,而异常则是当前指令流执行的直接结果。而且,中断是异步的,而异常是同步的。 尽管中断和异常的触发来源和方式不相同,Intel x86处理器内部使用同一套陷阱机制来处理中断和异常,它利用IDT(Interrupt Descri...原创 2021-06-29 10:11:25 · 910 阅读 · 0 评论 -
windows内核开发学习笔记三十八:内核概念之进程和线程管理
前面在windows内核开发学习笔记三十五:系统线程和系统进程博文中介绍了系统进程和系统线程,涉及了一些线程和进程的概念,在本文更进一步的介绍进程和线程管理的相关知识。 进程(process)定义了一个执行环境,包括他自己的私有的地址空间、一个句柄表,以及一个安全环境;线程(thread)则是一个控制流,有自己的调用栈(call stack),记录了它的执行历史,每个进程都包含一个或多个线程,当进程被初始创建时系统为该进程创建第一个线程;当最后一个线程结束时,进程也随之结束...原创 2021-06-28 17:24:58 · 793 阅读 · 0 评论 -
windows内核开发学习笔记三十七:内核概念之内存管理
Intel x86体系结构既支持段式内存管理,也支持页式内存管理,然而,windows没有使用段式内存管理方案,而只是简单地将32位虚拟内存空间按照0~4GB的线性地址空间来看待。任何一个进程都定义了它自己的完整4GB地址空间,但是,其中的2GB~4GB之间的部分是所有进程共享的,称为系统地址空间;0~2GB部分是进程私有的,称为进程地址空间。但是对于一些对内存大小有特殊要求的应用程序,如数据库,对私有空间要求越大越好,因此需要在windows的引导选项”/3GB"对进程空间进行设置以获得3...原创 2021-06-28 15:07:56 · 716 阅读 · 1 评论 -
windows内核开发学习笔记三十六:内核概念之内核模式
windows内核中的各个组件并非单纯的独立模块,相反地组件之间不可避免地包含着复杂的依赖关系,甚至存在着交叉调用。原创 2021-06-28 11:44:28 · 597 阅读 · 1 评论 -
windows内核开发学习笔记三十五:系统线程和系统进程
在 在windows中,每个线程代表一个指令执行序列,同时也是一个调度单元。进程定义了一个执行环境,有自己的独立地址空间。每个线程都必定依附一个进程。windows内核除了接受来自应用程序的系统服务调用,它自己也有一些线程用于各种用途,这些线程运行在一个特殊的进程环境中,称为system进程(注意与操作系统的关键进程--系统进程的区别)。system进程的线程被称为系统线程,其中有一组系统辅助线程(system worker thread)代表操作系统或者其他应用进程来完成一些特殊的工作。...原创 2021-06-27 22:18:38 · 535 阅读 · 0 评论 -
windows内核开发学习笔记三十四:windows子系统之图形设备接口
windows的图形引擎也是在windows子系统中提供的,有以下两个方面特点:一是它提供了一套与设备无关的编程接口-GDI,使得应用程序可以适应各种底层显示设备的差异;二是应用程序与图形驱动程序之间的通信足够高效,从而即使在频繁输出和刷新图形元素的情况下,windows也能够为用户提供良好的视觉效果。 在技术上,windows子系统定义了一个稳定的图形体系结构,以便于第三方图形设备硬件厂商可以方便地将他们的视频显示器和打印设备集成到windows中,win32k.sys 通...原创 2021-06-27 18:46:43 · 594 阅读 · 1 评论 -
windows内核开发学习笔记三十三:windows子系统之窗口管理
windows子系统的用户界面管理有一个层次结构,通常应用程序只是在一个默认的桌面运行。每个子系统会话都有自己的会话空间,属于某个会话的资源将从该会话空间中分配。当用户登录到windows中时,操作系统将为该用户建立一个会话;即使用户通过远程桌面或者终端服务连接到一个系统中,系统也会为该用户建立一个单独的会话。在一个会话中,有一个交互式窗口站,可能还有非交换式窗口站。在交互式窗口站中通常有三个桌面:登录桌面、默认桌面和屏幕保护桌面。通常运行的图形界面应用程序运行在默认桌...原创 2021-06-27 17:01:54 · 742 阅读 · 0 评论 -
windows内核开发学习笔记三十二:windows子系统
windows支持三个环境子系统:OS/2、POSIX和windows(win32)。原创 2021-06-27 14:51:59 · 1235 阅读 · 0 评论 -
windows内核开发学习笔记三十一:内核的关键组件之网络
在windows系统开发之初,网络并不是系统的标准配置,随着网络技术的普及逐渐演变为系统的标准配置,为应用程序提供了多种网络的API,可以供在安装时根据硬件的配置需求做出适当的选择,下面就是windows平台上的主要的网络:windows套接字:简称winsock,实现并扩展了BSD套接字标准。最新版本winsock2.0,支持异步网络I/O、服务质量(Qos)规范、可扩展名字空间以及多点消息传输等新特性。 WinInet:这个是一个高层次的网络API,支持包括Gopher、FTP和HTT...原创 2021-06-26 23:06:21 · 791 阅读 · 1 评论 -
windows内核开发学习笔记三十:内核的关键组件之文件系统及存储管理
在在xian 在现代操作系统中,文件系统是外部存储设备的标准接口,它为应用程序使用这些设备中的数据提供了统一的抽象。原创 2021-06-25 18:12:24 · 596 阅读 · 0 评论 -
windows内核开发学习笔记二十九:内核的关键组件之设备驱动程序
前面介绍了执行体、内核、硬件设备抽象三个内核核心功能,这三个功能,位于内核模块ntoskrnl.exe和HAL中,其中执行体和微内核共存于内核模块ntoskrnl.exe中。除了这三部分外,其他的模块几乎都是以驱动程序的形式存在的。windows操作系统中的设备驱动程序,不一定对应着物理设备,也可以是虚拟设备,甚至完全与设备无关的仅仅是内核的扩展模块。从软件的角度而言,可以把设备驱动程序看成是windows内核的一种扩展机制,系统通过设备驱动程序来支持新的物理设备或者扩展功能。 设备...原创 2021-06-25 14:47:34 · 777 阅读 · 0 评论 -
windows内核开发学习笔记二十八:内核的关键组件之执行体(Executive)
执行体是内核模块的上层部分,在大的方面看,执行体包含以下组件:进程和线程管理器,负责创建进程和线程,以及终止进程和线程。对于进程和线程的底层支持是在内核层中提供的,执行体在内核层的基础上又添加了一些语义和功能。 内存管理器。此组件提供了虚拟内存功能,既负责系统地址空间的内存管理,又为每个进程提供了一个私有的地址空间,并且也支持进程间的内存共享。 安全引用监视器,该组件强制在本地计算机上实施安全策略,守护操作系统的资源,执行对象的保护和审计。 I/O管理器。实现与设备无关的输入和输出功能,负责将I/原创 2021-06-25 11:29:15 · 1253 阅读 · 1 评论 -
windows内核开发学习笔记二十七:内核的关键组件之内核(微内核)
内核(微内核)这个其实就是内核的核心部分了,它负责线程调度和终端,异常的处理,在多处理器的情况下,还负责多处理器之间的协调,从而优化系统的性能。这层的核心任务是:让系统中所有的处理器尽可能地忙和高效。windows的内核按照面向对象的思想来设计,它管理两种类型的对象:分发器对象(sipatcher object)和控制对象。分发器对象实现了各种同步功能,这些对象的状态会影响线程的调度。windows内核的分发器对象有:事件,突变体,信号量,进程,线程,队列和定时器等。控制对象用于控制内核的操作。.原创 2021-06-24 18:53:09 · 1019 阅读 · 0 评论 -
windows内核开发学习笔记二十六:内核的关键组件之HAL抽象层
HAL(Hardware Abstraction Layer,硬件抽象层)Windows NT的一个目标是使操作系统可跨平台移植。理想情况下,当一种新机器问世时,它应该可以仅仅使用新机器的编译器来重新编译这个操作系统,就让他首次运行。但是,现实中并不能这样做。虽然上层的操作系统能够完全移植(因为它们的处理大多是内部数据结构),但底层处理的是设备寄存器、中断、DMA和其他的硬件特性,这些都是因机器而不同的。即使大部分底层代码是用C语言编写的,它也不能仅仅从X86上拿出来放到Alpha上,然后重新...原创 2021-06-24 17:22:41 · 1169 阅读 · 0 评论 -
windows内核开发学习笔记二十五:两种内核模式切换的安全检测
前面几篇文章已经介绍了Windows的架构、运行模式、核心架构等,本篇接着介绍windows的两种运行模式切换等方面的原理和技术。从上一章节可以可以知道,在内核层最上面的是执行体API,这一层负责接收来自应用层的各种程序的访问,而且是绝大部分是通过Ntdll.dll桥来调用的。因为应用程序是运行在用户模式下的,为了保证这种调用和访问的健壮性,抵御来自用户模式的错误调用或者恶意攻击,必须保证执行体API参数的有效性。这就是说要保证这些参数值的合规性,若是指针参数,还要保证指针所指的内存的有效。...原创 2021-06-24 14:52:20 · 512 阅读 · 0 评论 -
windows内核开发学习笔记二十四:windows内核架构
从上图上可以看出,windows内核主要层次划分为三个层次,以及windows子系统、文件系统、网络、设备驱动程序等几个部分。硬件抽象层(Hardware Abstraction Layer,简称HAL):主要是把所有与硬件相关联的代码隔离到一个专门模块中,从而使上面的层次尽可能做到独立于硬件平台。 内核层或微内核层(micro-kernel):位于HAL硬件抽象层之上,主要包含了基本的操作系统原语和功能,如线程和进程、线程调度、中断和异常的处理、同步对象和各种同步机制。 执行体层(execu...原创 2021-06-23 16:55:37 · 1577 阅读 · 0 评论