Windows内核
文章平均质量分 95
记录下自己的内核学习笔记
鬼手56
代码搞起来还是很轻松的,就是头有点冷
展开
-
VT虚拟化框架编写
学习VT相关的知识,需要具备WIN32基础和内核相关的知识,包括Windows段机制,页机制等等,VT里面都会有所涉及,也就是得把Windows编程和驱动基本通关,新手建议劝退。整个VT的知识结构有大量的新的概念,新的寄存器,新的指令还有各种标志位,初次学习VT建议结合代码来理解相关的理论基础,重点在于梳理整个VT的流程,不要深究具体的某个细节。整个流程走完之后就有了阅读别人代码的能力,等实际应用的时候再去查阅相关资料补齐技术细节的部分。我的笔记,很多能省的基本都省掉了,只把整体必须的流程整理出来。原创 2023-02-11 23:08:16 · 5377 阅读 · 0 评论 -
驱动无模块注入dll
Windows驱动无模块注入姿势全解 包含三环和零环的多种注入方式原创 2022-12-10 13:57:39 · 9839 阅读 · 6 评论 -
Windows x64隐藏可执行内存
Windows x64隐藏可执行内存原创 2022-12-04 15:16:06 · 6586 阅读 · 0 评论 -
驱动保护进程 句柄降权 杀软自保 游戏破图标技术原理和实现
驱动保护进程 句柄降权 杀软自保 游戏破图标技术原理和实现原创 2022-11-26 18:04:16 · 7495 阅读 · 6 评论 -
编译器扩展SEH
文章目录编译器扩展的SEH为什么需要编译器扩展的SEH编译器支持的SEH过滤表达式try_except的实现细节手动挂入链表自动挂入链表_try_except嵌套重复拓展的_EXCEPTION_REGISTRATION_RECORD结构体scopetable成员分析try_finally编译器扩展的SEH为什么需要编译器扩展的SEH之前我们已经了解过SEH的异常处理流程,SEH的处理流程实...原创 2020-02-16 18:25:21 · 671 阅读 · 0 评论 -
VEH和SEH
文章目录VEHKiUserExceptionDispatcher函数分析代码实现添加VEH异常处理函数VEH异常的处理流程SEHExceptionListRtlDispatchException函数的执行流程代码实现添加SEH异常处理函数SEH异常的处理流程VEH当用户异常产生后,内核函数KiDispatchException并不是像处理内核异常那样在0环直接处理,而是修正3环EIP为KiUs...原创 2020-02-16 18:23:57 · 4119 阅读 · 1 评论 -
用户层和内核层异常的处理流程
文章目录内核层异常的处理流程用户层异常和内核层异常KiDispatchException函数详解RtlDispatchException函数的执行流程用户层异常的处理流程用户异常的处理流程内核层异常的处理流程之前已经了解过异常处理机制的执行流程:异常记录 异常分发 异常的处理。这次我们学习一下内核异常的分发与处理。用户层异常和内核层异常异常可以发生在用户空间,也可以发生在内核空间。无论是C...原创 2020-02-16 18:19:14 · 1901 阅读 · 0 评论 -
CPU和软件模拟异常的执行流程
文章目录CPU异常记录异常的分类CPU产生的异常软件模拟产生的异常CPU异常的处理流程CommonDispatchException函数分析总结模拟异常记录模拟异常的执行流程RaiseException函数分析KiRaiseException函数分析总结异常产生后,首先要记录异常信息(异常的类型 异常发生的位置等),然后要寻找异常的处理函数,我们称为异常分发,最后找到异常处理函数并调用,我们称为...原创 2020-02-16 18:15:44 · 1115 阅读 · 0 评论 -
APC机制详解
文章目录APC的本质APC队列APC结构APC相关函数KiServiceExitKiDeliveApc备用APC队列ApcState的含义挂靠环境下的ApcState的含义其他APC相关成员ApcStatePointerApcStateIndexApcStatePointer与ApcStateIndex组合寻址ApcQueueableAPC挂入过程KAPC结构挂入流程KeInitializeApc...原创 2020-02-15 12:45:23 · 7249 阅读 · 0 评论 -
进程线程007 进程挂靠与跨进程读写内存
文章目录进程挂靠进程与线程的关系线程与进程如何关联为什么需要ApcState.ProcessCR3的值可以随便改吗分析NtReadVirtualMemory函数总结跨进程读写内存跨进程操作NtReadVirtualMemory流程解析进程挂靠进程与线程的关系一个进程可以包含多个线程一个进程至少要有一个线程进程为线程提供资源,也就是提供CR3的值,CR3中存储的是页目录表的基址,CR3确定...原创 2020-02-12 20:39:41 · 2687 阅读 · 1 评论 -
进程线程006 Windows线程切换-线程优先级
文章目录内容回顾调度链表如何高效查找如果没有就绪线程怎么办内容回顾之前我们已经了解过,有三种情况会导致线程切换:当前线程主动调用API:API函数–>KiSwapThread–>KiSwapContext–>SwapContext当前线程的时间片到期:KiDispatchInterrrupt–>KiQuantumEnd–>KiSwapContext–>...原创 2020-02-12 20:36:53 · 519 阅读 · 0 评论 -
进程线程005 SwapContext函数分析
文章目录线程切换与TSS内核堆栈内核堆栈结构调用API进零环SwapContext代码分析线程切换与FSSwapContext代码分析SwapContext的其他问题SwapContext有几个参数 怎么判断出来的?SwapContext在哪里实现了线程切换?0环的ExceptionList是在哪里备份的线程切换与TSSSwapContext这个函数是Windows线程切换的核心,无论是主动切...原创 2020-02-12 10:00:27 · 2988 阅读 · 0 评论 -
进程线程004 Windows线程切换的三种方式
文章目录主动切换(调用API)KiSwapContext函数分析哪些API调用了SwapContext函数总结时钟中断切换如何中断一个正在执行的程序系统时钟时钟中断的执行流程总结时间片管理1.时间片到期什么是时间片?时间片什么时候发生改变?CPU时间片到期了如何处理?CPU时间片总结2.存在备用线程总结主动切换(调用API)之前我们已经学习了模拟Windows线程切换的代码,里面用于线程切换的...原创 2020-02-12 09:49:16 · 2610 阅读 · 1 评论 -
进程线程003 模拟线程切换
文章目录示例代码关键结构体调度链表初始化线程堆栈线程切换被动切换主动切换线程调度总结之前我们已经了解过线程的等待链表和调度链表,为了更好的学习Windows的线程切换,我们要先读一份代码示例代码ThreadSwitch.h#pragma once#include <windows.h>#include "stdio.h"//最大支持的线程数#define MAXGMT...原创 2020-02-10 10:53:23 · 740 阅读 · 1 评论 -
进程线程002 等待链表 调度链表
文章目录前言等待链表33个链表调度链表版本差异总结前言进程结构体EPROCESS(0x50和0x190)是2个链表,里面圈着当前进程的所有线程。对进程断链,程序可以正常运行,原因是CPU执行与调度是基于线程的,进程断链只是影响一些遍历系统进程的API,并不会影响程序执行。对线程断链也一样,断链后在Windbg或者OD无法看到被断掉的线程,但并不影响线程执行。等待链表线程有三种状态:就绪...原创 2020-01-01 13:40:48 · 659 阅读 · 0 评论 -
进程线程001 进程线程结构体和KPCR
文章目录前言EPROCESSKPROCESS主要成员EPROCESS其他成员ETHREADKTHREAD主要成员介绍ETHREAD其他成员介绍KPCRKPCR介绍_NT_TIB主要成员介绍KPCR的其他成员介绍KPRCB成员介绍KPRCB成员介绍前言进程线程的知识点很多,如果我们想了解问题的本质,就要从一些关键的结构体学起,先来介绍一个与进程密切相关的结构体EPROCESS每个进程在零环都...原创 2019-12-26 21:33:05 · 1360 阅读 · 0 评论 -
系统调用004 SSDT
文章目录前言KeServiceDescriptorTableSSDTSSDT Shadow前言之前我们了解到通过KTHREAD结构体0xE0的位置可以找到系统服务表,这个位置是我们通过逆向得出的。实际上,WIndows提供了一个导出的全局变量,通过这个导出的全局变量,我们就可以直接访问系统服务表。KeServiceDescriptorTable用IDA打开ntkrnlpa.exe,在导出表...原创 2019-12-23 22:02:20 · 480 阅读 · 0 评论 -
系统调用003 系统服务表
文章目录前言SystemServiceTable 系统服务表系统服务表在哪判断调用的函数在哪个表API函数的调用过程前言我们现在已经知道API怎么从三环进入零环,从三环进零环需要带两个寄存器,分别是eax和edx。eax保存的是系统的服务号,edx保存的是三环的esp,通过esp可以找到三环的参数。这次要解决的问题是如何通过eax找到零环的函数,零环的函数是怎么被调用的,并且零环的函数执行的...原创 2019-12-22 17:09:50 · 707 阅读 · 0 评论 -
系统调用002 KiSystemService函数逆向分析
文章目录前言保存现场_KTRAP_FRAMEKRPCExceptionList_KTHREAD结构体先前模式抬高堆栈判断当前权限更新_KTRAP_FRAME保存三环的寄存器环境判断调试状态前言之前我们详细了解了API从三环进到零环的过程,API会通过两种方式进入到零环,如果通过中断门的方式进入零环,最终会进入到KiSystemService这个函数。接下来就来分析KiSystemService...原创 2019-12-22 14:21:28 · 1811 阅读 · 0 评论 -
系统调用001 API从三环进零环的过程
文章目录前言逆向分析ReadProcessMemoryNtReadVirtualMemory_KUSER_SHARED_DATASystemCall通过int 0x2E中断门进入零环通过sysenter快速调用进入零环总结总结前言在三环操作系统提供了各种API,这些API实际上只是一个暴露在三环的接口,真正的功能实现部分,最终都是要进到零环。逆向分析ReadProcessMemory###...原创 2019-12-21 17:43:34 · 1702 阅读 · 2 评论 -
[保护模式]PAE模式
文章目录PAE模式 2-9-9-12分页非PAE模式为什么是10-10-12PAE模式为什么是2-9-9-12总结PDPTE结构PTE结构PTE结构XD标志位(AMD中称为NX,即No Excetion)PAE模式 2-9-9-12分页非PAE模式为什么是10-10-12先确定了页的大小4K,所以后面12位的功能也就确定了。2的12次方为4096,也就是4KB。12位正好可以索引到每一个物...原创 2019-12-11 23:12:16 · 1384 阅读 · 0 评论 -
[保护模式]非PAE模式
文章目录PAE 物理地址扩展线性地址 有效地址 物理地址CR3PDE/PTE物理页的属性通过线性地址访问PDT和PTT指向PDT的线性地址 0xC0300000总结指向PTT的线性地址 0xC0000000/C0001000总结访问PDT与PTT公式总结PAE 物理地址扩展线性地址 有效地址 物理地址如下指令:mov eax,dword ptr ds:[0x12345678]这个地址如...原创 2019-12-09 22:30:52 · 533 阅读 · 0 评论 -
[保护模式]任务段
文章目录TSS什么是TSSTSS的作用如何找到TSSTR寄存器读写将TSS段描述符加载到TR寄存器构造TSS段描述符修改TSSJMP 访问代码段JMP 访问任务段JMP FAR和CALL FAR访问任务段的区别TSS切换实验示例代码构造段描述符填充CR3TSS什么是TSSTSS是一块内存,大小为104字节,结构如图所示:结构体如下:typedef struct TSS { DWORD...原创 2019-12-04 21:16:48 · 653 阅读 · 0 评论 -
[保护模式]中断门
文章目录要点回顾中断门IDT中断门描述符中断门实验示例代码构造中断门描述符修改IDT表中断现场中断返回为什么会PUSH EFLAGS寄存器调用门和中断门的区别要点回顾执行调用门的指令:call cs:eip。其中cs是段选择子,包含了查找GDT表的索引。但当CPU遇到了如下指令:int [index],查询的却是另外一张表,这张表叫IDT中断门IDTIDT表全称为中断描述符表,包含三种描...原创 2019-12-01 19:43:17 · 1384 阅读 · 0 评论 -
[保护模式]调用门
文章目录调用门调用门执行流程调用门描述符调用门实验无参调用门示例代码构造调用门修改GDT表执行流程中断现场有参调用门示例代码构造调用门修改GDT表中断现场总结调用门调用门执行流程CALL FAR的指令格式:CALL CS:EIP(EIP是废弃的)执行步骤:根据CS的值 查GDT表,找到对应的段描述符,这个描述符是一个调用门在调用门描述符中存储另一个代码段的段选择子选择子指向的段 段...原创 2019-12-01 16:24:42 · 1105 阅读 · 0 评论 -
[保护模式]段间跳转和跨段跳转
文章目录段间跳转段寄存器段间跳转段间跳转的执行流程1.段选择子拆分2.查表得到段描述符3.权限检查4.加载段描述符5.代码执行总结跨段跳转短调用长调用跨段不提权跨段提权总结段间跳转代码跨段,本质就是修改CS段寄存器段寄存器段寄存器有下面几个:ES CS SS DS FS GS LDTR TR。除了CS以外,其他的段寄存器都可以通过MOV LES LSS LDS LFS LGS指令进行修改。...原创 2019-12-01 13:38:20 · 1750 阅读 · 0 评论 -
Windows内核实验005 Inline Hook
文章目录准备工作寻找Inline Hook的返回地址编写代码动态变化的返回地址JmpTargetAddrInline Hook基本框架示例代码实战HOOK KiTrap01无需计算偏移的Inline Hook方法示例代码准备工作寻找Inline Hook的返回地址假设我们现在要HOOK KiFastCallEntry这个内核函数,让所有的程序在进入零环之前先跳到我们自己的代码。但是会出现...原创 2019-11-17 15:18:17 · 1155 阅读 · 0 评论 -
Windows内核实验004 API调用
文章目录完善代码内核API调用修复一个潜在问题复现问题完整代码前面几次实验我们已经完成了一个三环的程序调用零环API的必要条件。提升到零环权限使fs指向KPCR完善代码这次我们去掉之前的死循环代码,并且将函数地址写入到IDT表项,在虚拟机中运行一下程序,看看会有什么结果。这里他抛出了一个内存访问异常。原因在于我们修改了fs寄存器之后,在iretd指令返回三环的时候,系统不会自动...原创 2019-11-16 20:43:28 · 739 阅读 · 2 评论 -
Windows内核实验003 再次回到中断
文章目录两个实验死循环开启中断后的死循环KiFastCallEntry调用零环API的两个条件分析KiFastCallEntry什么是KPCR完善代码完整代码之前的实验我们已经实现了从三环到零环的提权,但是提权不代表能正常调用内核函数。接下来我们要实现的一个事情就是在我们的代码里正常调用内核的函数。还是接着用上次的代码,这一次我们先来做两个实验。两个实验死循环首先用windbg连上虚拟机...原创 2019-11-16 15:10:25 · 485 阅读 · 0 评论 -
Windows内核实验002 中断现场
文章目录如何获取中断现场环境中段现场环境观察中断现场堆栈环境观察中断现场的寄存器环境段选择子段寄存器结构变化的段寄存器的具体含义遗留问题:SS段寄存器和栈顶指针来自于哪?什么是TSSTSS的工作细节中断提权的任务切换过程实验代码上一课我们已经实现了利用中断提权的方式让自己写的函数拥有了零环的权限,但是为了更方便的写零环代码。我们还需要搞清楚中断现场的上下文环境,什么资源可以被使用,什么资源不能被...原创 2019-11-15 23:04:15 · 821 阅读 · 0 评论 -
Windows内核实验001 中断提权
文章目录实验环境内核提权IDT的基本知识什么是中断什么是IDT表在PC Hunter中查看IDT表中断提权的基本原理写一个三环的小程序修改IDT表提权测试本篇文章基于周壑老师的讲解,感谢周壑老师。实验环境windbg双机调试环境VS开发环境32位 WIN7 虚拟机内核提权内核态的程序拥有一切权限,在Windows操作系统上,没有任何其他软件可以限制内核态的程序。如果让一个用户层的...原创 2019-11-12 23:18:09 · 1272 阅读 · 2 评论 -
Windbg新手入坑指南
文章目录前言熟悉理论 提高调试效率定制自己的Windbg界面关于工作空间命令概述标准命令元命令扩展命令调试技巧伪寄存器开始实战控制调试目标单步步入和单步步过单步执行到指定地址单步执行到下一个函数调用单步执行到下一个分支继续运行追踪并监视停止调试总结使用断点软件断点硬件断点条件断点地址表达式管理断点总结观察栈显示栈回溯总结分析内存显示内存显示字符串显示数据类型搜索内存修改内存其他命令参考资料前言...原创 2019-04-08 21:47:26 · 4471 阅读 · 1 评论 -
双机调试环境搭建
文章目录准备工作第一步 复制target文件第二步 安装vminstall第三步 配置windbg第四步 连接到虚拟机第五步 设置符号路径准备工作一个安装了windows操作系统的虚拟机需要一个windbg,要求与被调试机器的位数一样VirtualKD 一个用于搭建双机调试的工具 下载链接:http://virtualkd.sysprogs.org/第一步 复制target文件...原创 2019-04-07 12:43:41 · 489 阅读 · 0 评论 -
Windbg无源码调试驱动
文章目录准备工具修改OEP修改校验和开始调试准备工具windbg调试器一台搭建好双机调试环境的虚拟机任意一个能运行驱动的软件CFF ExplorerLoadPE修改OEP首先随便找一个驱动文件,我就直接用Everything搜索一个接着把文件脱到CFF,找到OEP接下来,将RVA转成FOA然后把OEP修改为CC,保存文件修改校验和修改完成之后,记得还要修改校验...原创 2019-04-07 12:41:05 · 1064 阅读 · 0 评论