精华内容
下载资源
问答
  • 2020-03-24 16:01:17

    Inter x86将处理器执行模式分为4层环,我们平时说的用户层程序处于3环(Ring3),内核层代码处于0环(Ring0),而Ring3的地址空间是各进程之间独立的,Ring0层是进程之间共享,不同进程会由进程上下背景文的切换来实现对Ring0层访问。Windows中并没有使用Ring1和Ring2层。
    我们的用户层进程通过系统服务来完成我们需要完成的工作,而系统服务是在内核层实现的,那么就需要CPU就要从Ring3层的调用切入Ring0层,那么这个过程是如何实现的?
    进入内核一般有中断、异常、自陷三种手段,而如果是我们平时函数正常系统调用,会通过自陷指令(int 0x2e)让CPU主动进入系统空间,对于应用程序而言,相当于执行了一次函数调用。还有一种称为快速调用约定的sysenter和sysexit指令,也是调用系统服务,并为此配备了SYSENTER_CS_MSR、SYSENTER_EIP_MSR、SYSENTER_ESP_MSR三个MSR(Mode Specific Register)寄存器。
    接下来说一说这二者分别是怎么进行执行的,首先来说传统的Windows系统调用自陷指令int 0x2e:
    以经典的ReadFile函数(因为我看的书是拿这个函数举例的)来进行解释,我们调用一个WinAPI ReadFile函数,其位于kernel32.dll的导出函数中,在用户层这个函数内部调用的是ntdll下的Nt系列的函数NtReadFile,该函数就是一个Windows的系统调用,内核中也有与之同名的函数。众所周知,ntdll下有两个函数,一个叫做ZwReadFile,一个叫做NtReadFile,二者指向同一片地址:

    更多相关内容
  • Windows x64内核学习笔记(一)—— 环境与配置 前言 之前,跟着海哥学习了windows内核的一些机制,包括保护模式,异常处理,消息机制等等,使用的环境是XP系统。 但是,在实际工作中,面对需要用到x64内核相关的...

    Windows x64内核学习笔记(一)—— 环境与配置

    前言

    之前,跟着海哥学习了windows内核的一些机制,包括保护模式,异常处理,消息机制等等,使用的环境是XP系统。

    但是,在实际工作中,面对需要用到x64内核相关的内容时,依旧会感到茫然无措,毕竟脑中的知识只局限在32位内核。

    随着时代发展,64位系统未来必将成为主流,但苦于市面上关于x64的教程非常少,因此一直没有机会系统化学习。

    前段时间才发现周壑老师出了一套名为「x64内核研究」的教程,不得不说周壑老师真是太牛了。

    那么,就让我们一起来学习x64内核吧。

    新特性

    相较于x32内核而言,x64内核包含以下几个新特性

    1. SMEP / SMAP
      分别为控制寄存器Cr4的两个标志位,用于控制内核对用户层的数据读写与执行的权限。
      例如如果像x32内核一样,在x64中做idt后门,那么可能会产生类似「三重错误」的错误。
    2. KPTI
      内核页表隔离,Win10在2018年初更新的补丁,使得一个进程对应两个Cr3,处理用户层和内核层时拥有两个idt表。
    3. 硬件漏洞(幽灵、熔断)相关(介绍)
    4. CFG(介绍)
    5. Patch Guard
      内核补丁保护,不能随意对x64内核进行patch,否则会触发不定时蓝屏。
    6. DSE强制签名(介绍)

    基础要求

    1. C语言
    2. x64汇编
    3. x86保护模式

    实验环境

    1. 虚拟机:VMware Workstation(15.1.0)版本及以上
    2. 操作系统:Windows 10 1903 (笔者使用的小版本是18362.356)
    3. 调试器:Windbg(10.0.18362.1)
    4. C语言(x64)开发环境:Visual Studio(2010)版本及以上
    5. 驱动(x64)开发环境:WDK(7600)版本及以上
    6. 其他工具:CE(7.0)版本及以上;DebugView(4.9.0)版本及以上

    Guest Win10配置

    1. 由于本次学习不涉及到VT,因此可以把VT支持关掉。
      在这里插入图片描述
    2. 可以调整蓝屏时产生转储文件的大小
      在这里插入图片描述
    3. 转储文件的路径最好也改一下:
      在这里插入图片描述
    4. 开启调试模式和测试模式
      // 1. 查看当前的启动项信息
      bcdedit /enum {current}
      // 2. 复制一个启动项,并开启调试模式和测试模式
      bcdedit /copy {current} /d "Windows Debug Entry"
      bcdedit /dbgsettings serial baudrate:115200 debugport:1
      //    ID是第一条命令执行后提供的启动项标识符
      bcdedit /debug {ID} ON
      bcdedit /set {ID} TESTSIGNING on
      // 3.(可选)添加一个只禁用驱动签名的启动项
      bcdedit /copy {current} /d "Windows Nointegritycheck Entry"
      //    ID是上一条命令执行后提供的启动项标识符
      bcdedit /set {ID} nointegritychecks on
      

    问题解决

    在尝试使用DbgView64监视核心时,可能会报错
    在这里插入图片描述

    解决方法:关闭UAC

    1. 使用「Command+R」输入「gpedit.msc」,打开本地策略组编辑器。
    2. 依次展开「计算机配置」-「Windows设置」-「安全设置」-「本地策略」-「安全选项」,在具体策略中找到用于账户控制相关配置
      在这里插入图片描述
    3. 将「用户账户控制:以管理员批准模式运行所有管理员」设置为「已禁用」。
      在这里插入图片描述

    好了,接下来进行重启,就能够监视核心了,然后就可以在Host OS使用WinDbg进行双机调试了。

    参考资料

    展开全文
  • windows内核学习笔记-----双机调试的环境安装

    目录

    前言

    配置物理机

    配置VMWare

    进入win7系统进行配置


    前言

    此文章适合不会安装双机调试的win内核初学者观看,

    看了各种安装资料,自己操作总是和资料上不同,各种报错,尝试了一下午终于安装好了。。。

    在这片文章里我也会说一下我遇到的坑!!

    看此文章的前提:

    1.已经安装了wdk,安装教程百度

    可以在这里:下载 Windows 驱动程序工具包 (WDK) - Windows drivers | Microsoft Docs

    2.已经安装了vmware,安装教程百度

    3.vmware上安装了win7x64系统,安装教程百度

    我这里的iso文件是在这里下的:MSDN, 我告诉你 - 做一个安静的工具站

    迅雷链接

    ed2k://|file|cn_windows_7_professional_with_sp1_x64_dvd_u_677031.iso|3420557312|430BEDC0F22FA18001F717F7AF08C9D5|/

    配置物理机

    安装完wdk后,会安装windbg,

    我的路径是

    C:\ProgramData\Microsoft\Windows\Start Menu\Programs\Windows Kits\Debugging Tools for Windows (X64)

    win10系统可以win+Q键搜索

     打开文件位置

     把快捷方式复制到桌面

    右键快捷方式,点击属性

     在目标里加上

    -b -k com:pipe,port=\\.\pipe\com_1,resets=0

    原来是: "D:\Windows Kits\10\Debuggers\x64\windbg.exe"

    加上后是: "D:\Windows Kits\10\Debuggers\x64\windbg.exe" -b -k com:pipe,port=\\.\pipe\com_1,resets=0

    然后点击应用,点击确定即可

    配置VMWare

    如果启动了windows7系统先关闭

    编辑虚拟机

     把打印机移除

    移除之后点下方的添加

     

     选择串行端口,点完成

    在进行如下图的设置

     命名的管道填如下内容:

    \\.\pipe\com_1

    进入win7系统进行配置

    然后开启虚拟机

     进入win7系统

    管理员身份运行cmd,输入

    bcdedit

    出现以上内容说明你是以管理员身份运行的

    然后以下命令依次输入:

    bcdedit /dbgsettings serial baudrate:115200 debugport:1
    bcdedit /copy {current} /d "Windows7"

     此时会给你一个很长的ID,放在下面指令里即可

    bcdedit /displayorder {current} {ID}
    bcdedit /debug {ID} ON

    注:上面两个指令的ID替换成之前给你的很长的一串字母

    设置完毕后重启即可

    然后打开windbg

    在启动调试程序之前打开

    这时windbg会等待系统连接

    重启后会发现多了一个启动调试程序

    选择启动调试程序后windows会加载系统

    然后windbg会有反应

    这样表示系统与windbg连上了,这时系统会卡死

     在windbg下面的输入框里输入g

    即可让系统运行起来

     windbg如下图所示表示系统在运行

    按下Ctrl+Break即可暂停系统,进行调试

     这样就可以进行双机调试我们的驱动了,由于笔者也是刚学win内核,具体调试还没开始进行,如果以后有时间可能会发,感谢你的观看,再见~~

    展开全文
  • 想深入理解windows内核机制的一些好资料集结。 通过这些,可以让我们从内核理解windows的行为和机制。 对以后的编程和项目有很大的帮助。 也是走向“高手”的必读!
  • 从上图上可以看出,windows内核主要层次划分为三个层次,以及windows子系统、文件系统、网络、设备驱动程序等几个部分。 硬件抽象层(Hardware Abstraction Layer,简称HAL):主要是把所有与硬件相关联的代码隔离...

    从上图上可以看出,windows内核主要层次划分为三个层次,以及windows子系统、文件系统、网络、设备驱动程序等几个部分。

    •  硬件抽象层(Hardware Abstraction Layer,简称HAL):主要是把所有与硬件相关联的代码隔离到一个专门模块中,从而使上面的层次尽可能做到独立于硬件平台。
    • 内核层或微内核层(micro-kernel):位于HAL硬件抽象层之上,主要包含了基本的操作系统原语和功能,如线程和进程、线程调度、中断和异常的处理、同步对象和各种同步机制。
    • 执行体层(execution):提供供应用层或者内核驱动程序直接调用的功能和语义。包含一个内核管理器,用于一致地管理执行体中的对象。

          执行体和内核层位于内核基本模块ntoskrnl.exe二进制模块中,二者的具体分工是:内核层实现操作系统的基本机制,执行体负责所有的策略的决定。执行体中的对象绝大多数封装了一个或者多个内核对象,并且通过某种方式(如句柄)提供给应用程序,体现了机制与策略分离的设计思想。

            windows内核为用户模式代码提供了一组系统服务,供应用程序使用内核中的功能,并且是通过一组系统DLL,最终通过ntdll.dll切换到内核模式下的执行体API函数中,来调用内核中的系统服务。ntdll.dll是这种调用的桥梁。对于内核提供的每一个系统服务,该DLL都提供一个响应的存根函数,这些存根函数的名称以“Nt”作为前缀,如NtCreateProcess、NtOpenFile和NtSetTimer等。另外ntdll.dll还提供了许多系统级的支持函数,如映像加载函数(前缀Ldr)、windows子系统通信函数(前缀Csr)、调试函数(前缀Dbg)、系统事件函数(前缀Etw),以及一般的运行支持函数(前缀Rtl)和字符串支持函数等。

    展开全文
  • 如果读者从未接触过Windows内核编程,读者应该先学习第二部分。能自己编写内核程序并不意味着可以读懂内核,虽然反过来是一定成立的。读懂别人编写的没有代码的程序,比自己编写更困难一些,但的确是值得的。  第8...
  • windows内核原理与实现》是一本比较好的学习系操作系统的工作原理的一本书,值得参考。
  • 虚拟内存划分表(来自Windows内核设计思想): 今天来说一下最常见的分页和非分页内存: 我们都知道虚拟地址是不能访问物理内存的,需要内存管理单元将其映射到某个物理页面,转换成物理地址,CPU才能进行访问。...
  • 完整的零基础学习windows下驱动编程(内附源码)。内核编程环境配置;串口过滤、键盘过滤;磁盘虚拟;磁盘过滤;文件系统过滤与监控;文件系统透明加密;文件系统微过滤;网络传输层过滤;NDIS协议驱动;NDIS小端口...
  • Windows采用了双内核结构,操作系统核心运行在内核模式下,应用程序运行在用户模式下。当应用程序需要用到内核内核扩展模块的服务时,使用硬件指令从用户模式切换至内核模式,等服务完成再切回用户模式。Windows...
  • Windows x64内核学习笔记(二)—— IA-32e模式IA-32e模式模式检测特性强制平坦段任务切换中断门描述符FS / GS参考资料 IA-32e模式 描述:IA-32e是IA-32模式的扩展,它是一种状态,其内核为64位,用户可以是32位,也...
  • windows的系统结构采用双模式结构(dual mode),即内核模式和用户模式;操作系统的核心运行在内核模式(kernel mode)下,应用程序运行在用户模式(user mode)下。在两种模式下运行的权限和访问的范围不一样,当...
  • 毛德操的 Windows内核情景分析 下册,学习Windos核心开发,安全技术学习必读
  • Windows 和 Linux 是当今两款最主流的服务器操作系统产品,都拥有广泛的用户和信徒。Windows 通过强大的商业运作,驱动了大量优秀人才加盟到它的开发团队中;...今天我们继续从一道面试题目“ Linux 内核Windows
  • 学习windows内核

    千次阅读 2017-09-09 23:18:08
    操作系统通过驱动对象来分发命令。 主函数需要驱动对象和注册表路径 ...还是自己实现,删除设备对象和符号链接还有一些自己创建的东西。 通过设备对象才能通信,所以需要创建一个设备对象。如果创建成功了就能在驱动...
  • Windows内核学习点滴记录

    千次阅读 2012-03-13 16:12:39
    每天我们都在使用Windows系统学习、编程、听音乐、玩游戏,Windows的操作想来是很熟练了,可是你又对Windows到底了解多少呢?本系列的目的, 就是让你对Windows系统有个更直观、更清楚、更彻底的认识。虽然我们...
  • WINDOWS内核学习步骤

    2012-11-09 19:41:00
    (一)内核驱动入门 1.驱动级HelloWorld 2.驱动框架理解 (二)内核开发基础 3.驱动级文件与注册表操作 4.中断运行级别 5.同步与多线程 6.内核数据结构 7.应用程序与驱动通信与弹窗 ...
  • 编写Windows内核程序,就意味着这个程序可以执行任意指令,可以访问计算机所有的软件、硬件资源。因此,稍有不慎就有可能将系统变得不稳定。Windows的设计者设计了各种驱动模型或者框架,如NT式内核驱动模型、WDM...
  • 从汇编语言到Windows内核编程.pdf 【完整书签】【高清版】(共282页) ============================================ 入手篇 熟悉汇编 第1章 汇编指令与c语言 1.1 上机建立第一个工程 1.1.1用visual studio创建工程...
  • windows内核安全编程

    2009-11-06 10:56:06
    寒江独钓 windows内核 安全编程源代码 寒江独钓 windows内核 安全编程源代码 寒江独钓 windows内核 安全编程源代码 寒江独钓 windows内核 安全编程源代码
  • 这是《Windows内核安全与驱动开发》一书的随书案例代码,代码内容以Windows驱动编程为主,仅供参考学习之用
  • windows内核分析(上)

    2018-09-25 23:28:28
    主要用于介绍windows内核对象的底层实现,可以结合《windows核心编程》来一块学习
  • 编程技术_Windows+NT 内核分析
  • windows 内核

    2013-11-22 17:01:02
    Windows开发简介.Windows是一种基于图形界面的多任务操作系统。为这个环境开发的程序有着相同的外观和命令结构。对用户 来说,这使得学习使用Windows应用程序变得轻易了
  • doc文档若干,帮助学习windows内核
  • 毛德操的 Windows内核情景分析 上册,学习Windos核心开发,安全技术学习必读
  • 著名的独钓寒江雪windows内核安全编程,详细讲解了C语言开发的独门秘籍,是学习内核编程的绝佳好书。
  • Windows内核原理与实现

    2018-08-23 15:57:27
    毕业设计时用过的资料,对windows分析得非常详细,值得学习
  • Windows x64内核学习笔记(五)—— KPTIKPTI实验一:构造IDT后门并读取Cr3实验二:访问KVASCODE区段实验三:访问TEXT区段参考资料 KPTI 描述:KPTI(Kernel page-table isolation)即内核页表隔离机制。 在学习SMEP...
  • Windows内核学习:I/O系统

    千次阅读 2009-10-12 10:36:00
    作者:shenzi链接:http://blog.csdn.net/shenziWindows内核学习:I/O系统1.I/O系统组件 Windows的I/O系统如图1所示,由几个可执行模块和设备驱动程序组成。图1:I/O系统组件I/O管理器将应用程序和系统组件连接到...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 91,029
精华内容 36,411
关键字:

windows内核学习