
windows内核
文章平均质量分 63
幺幺满地乱爬
这个作者很懒,什么都没留下…
展开
-
x64内核实验7-线程
ETHREAD和KPCR都有点大就不全贴出来了只说一些常用的字段,一般熟悉了内核机制的话看名字很多都能猜出来跟之前的进程结构体一样是可等待对象都有的头部结构体KTHREAD + 0x018 VOID* SListFaultAddress 上一次用户模式互锁单链表POP操作发生页面错误的地址。内核栈的原始栈位置(高地址)内核栈低地址内核栈的栈基址内核调用栈开始位置KTHREAD + 0x0C8 INT64 WaitStatus 等待的结果状态。原创 2023-10-07 20:57:19 · 1165 阅读 · 0 评论 -
x64内核实验6-进程
首先来看一下进程结构体完整的定义,然后我会介绍几个比较重要的字段属性下面是我从pdb文件导出的头文件,这个头文件可以直接复制到ida里导入成结构体使用的,其他结构体的头文件后面我会一起放出来给大家下载EPROCESS.h。原创 2023-10-07 13:19:40 · 360 阅读 · 0 评论 -
x64内核实验5-API进0环
今天开始我们来分析系统api进0环的过程。原创 2023-10-06 19:42:57 · 980 阅读 · 0 评论 -
x64内核实验3-页机制的研究(1)
在白皮书的第三卷2.5章对控制寄存器有详细的介绍,下面是白皮书中CR寄存器的结构图(这里要说明一下cr4的第12位是由被使用的这个位在2.5章的后半部分有介绍是控制是否开启5级分页的位否则是四级分页)首先是smep和smap两个位,这部分因为之前的实验会用到所以已经在段机制的部分介绍过了,这里就不再赘述其余一些位置的功能后面用到了会继续介绍,这边有个结构的概念就可以了。原创 2023-10-05 15:19:54 · 526 阅读 · 0 评论 -
x64内核实验2-段机制的变化
x86下的段描述符结构图如下在x86环境下段描述符主要分为3个部分的内容:base、limit、attribute,而到了64位环境下段的限制越来越少,主要体现在base和limit已经不再使用而是直接置空,也就是默认强制为平坦模式ia-32e模式使用的是64位内核文件,legacy是兼容模式使用的还是32位内核文件,我们这里不关注兼容模式。原创 2023-10-05 03:14:50 · 234 阅读 · 0 评论 -
x64内核实验1-调试环境配置
首先如上图配置好用于跟主机内核调试器通信的串口。原创 2023-10-05 03:09:52 · 147 阅读 · 0 评论 -
利用TLS反调试
今天说一下利用TLS提供的静态绑定回调函数来反调试。原创 2023-08-22 21:59:55 · 819 阅读 · 0 评论 -
Windows驱动反调试的一种手段
DebugPort是在用windowsapi调试方式时候所使用的数据结构指针,那么如果我们能够循环清空这个值的话,就可以做到大部分windows调试api都无法正确调试进程。今天要介绍的是eprocess的0xbc位置。原创 2023-10-01 17:01:50 · 510 阅读 · 0 评论 -
驱动隐藏进程(eprocess断链)
具体的原理就不详细描述了,这种办法是最为基础的隐藏手段而且网上有很多文章,只不过我看了一些大部分都只是直接在driverEntry中写死的那种,所以我简单写了个三环0环交互的驱动代码供大家参考。进程在内核中存在一个双向链表将所有的活动进程串联起来,今天写的就是将我们的目标进程从这个链表中移除以达到隐藏进程的目的。原创 2023-10-01 16:55:20 · 1240 阅读 · 0 评论 -
保护模式阶段测试-模拟3环0环调用
最近又复习了一下保护模式相关的内容,然后打算搞个能够把段页的大部分知识能够串联起来的测试代码。2.申请一个物理页里面填充一个数据结构,此数据结构中存放我们新的中断号。1.插入一个中断门,中断门的函数地址为3环传进来的那个。1.通过设备通信到0环告诉0环我新增加的函数地址。2.通过3环0环共享的数据结构取到新增加的中断号。0.编写一个函数读取高2g的地址内容。3.调用中断号读取高2G地址内容。接收到3环的函数地址。原创 2023-10-01 03:30:15 · 615 阅读 · 0 评论 -
驱动插入中断门示例代码
最近做实验,每次在应用层代码写测试代码的时候都要手动挂一个中断描述符,很不方便所以就想着写个驱动挂一个中断门比较省事。原创 2023-09-30 22:13:30 · 429 阅读 · 0 评论 -
驱动挂载物理页代码示例
使用的实验环境为32位xp系统在101012分页模式下。此实验用于测试对分页模式的掌握程度。原创 2023-09-30 01:03:40 · 568 阅读 · 0 评论 -
3环断链以及断链后的检测方法
我们在3环注入代码很多时候会选择注入dll,因为纯粹的硬编码不方便写出大量功能,而且不容易维护所以很多时候我们会通过各种方式让我们的dll注入到目标地址空间中,其中有一些方式可以不需要我们自己对dll处理重定位而是借助pe加载器让系统帮助我们处理重定位,但是就会导致我们的dll会在目标的peb中可见,也就是留下了痕迹。比如说,我不通过模块链表来检测而是直接搜索内存找到有pe指纹的位置然后根据pe结构查看当前的模块名字,不是我自己的那就说明有人注入了模块进来。这时就可以通过3环断链的方式隐藏这一部分痕迹。原创 2023-09-03 19:13:27 · 865 阅读 · 0 评论 -
Windows内存注入(前置原理)
我们重设的eip可以指向我们插入的内存或是注入的dll地址,在执行我们的代码后在跳转回原先的eip位置(这里有很多种方式,也可以继续上面的操作吧eip设回去,也可以通过远跳转回去都可以)通过Windows提供的获取线程上下文api可以获取到线程当前的寄存器信息,这样我们就可以先暂停线程然后重设eip的值然后将我们更新后的上下文设置到线程里,在让其运行起来。:此函数用于减少目标线程的挂起计数,是其恢复争抢时间片。:此函数用于让目标线程挂起。:此函数用于获取线程上下文。:此函数用于重设线程上下文。原创 2023-08-18 23:27:35 · 601 阅读 · 0 评论 -
vs使用def导出文件简介
配置到导出格式时候可以通过NONANE选项使到处函数的符号名字为空,@X为导出的序号,此序号为导出表中的index,可以通过序号获取此函数的地址。1.首先需要创建一个dll项目,否则没地方配置使用def文件的指向。2.定义一系列函数并创建一个def文件。3.配置使用def文件的指向编译即可。原创 2023-08-13 12:47:18 · 1505 阅读 · 0 评论 -
保护模式中段选择子权限校验逻辑详解
RPL可能会削弱CPL的作用,例如当前CPL=0的进程要访问一个数据段,它把段选择符中的RPL设为3,这样虽然它对该段仍然只有特权为3的访问权限。RPL说明的是进程对段访问的请求权限(Request Privilege Level),是对于段选择子而言的,每个段选择子有自己的RPL,它说明的是进程对段访问的请求权限。CPL是当前进程的权限级别(Current Privilege Level),是当前正在执行的代码所在的段的特权级,存在于cs段选择子的后两位的低两位。dpl存在f的位置,拆分是1111。原创 2023-08-05 01:30:12 · 334 阅读 · 0 评论