自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(31)
  • 收藏
  • 关注

原创 互斥体

【代码】互斥体。

2023-07-04 17:46:46 90

原创 BTS 汇编指令

【代码】BTS 汇编指令。

2023-07-03 22:35:53 315

原创 多核环境hook高并发函数

* SwapContext函数调用频繁,我们就hook它 **

2023-07-03 17:23:55 142

原创 sysenter & int 2e

sysenter进入0环直接从MSR寄存器获取寄存器的值中断门进入0环需要查内存(TSS\IDT)获取寄存器的值。

2023-05-22 16:35:08 111

原创 01 APC

线程是不能被杀掉、挂起、恢复的,线程在执行的时候自己占着CPU,别人怎么可能控制它呢?如果想改变一个线程的行为怎么办呢?可以给她提供一个函数,让它自己去调用,这个函数就是APC(

2023-05-15 13:56:26 74

原创 02 全局句柄表

全局句柄表的TableCode 的元素指的就是EPROCESS 或者 ETHREAD 的头了,不再是 _OBJECT_HANDLE。2.每个进程和线程都有一个唯一的编码 : PID和CID 这两个值其实就是全局句柄表中的索引。1.所有的进程和线程无论是否打开,都在这个表中。

2023-05-11 13:55:05 87

原创 01句柄表

当一个进程创建或者打开一个内核对象的时候,将获得一个句柄,通过这个句柄可以访问内核对象句柄存在的目的是为了避免在应用层直接修改内核对象句柄表是私有的,每个进程一个。

2023-05-11 11:53:54 71

原创 10 DPC

DPC是什么?它的英文全称为Deferred Procedure Call,即延迟过程调用。它最初作用是设计为中断服务程序的一部分,用来解决中断服务处理时间过长的问题。因为每次触发中断,都会关中断,然后执行中断服务例程。由于关中断了,所以中断服务例程必须短小精悍,不能消耗过多时间,否则会导致系统丢失大量其他中断。但是有的中断,其中断服务例程要做的事情本来就很多,那怎么办?于是,可以在中断服务例程中先执行最紧迫的那部分工作,然后把剩余的相对来说不那么重要的工作移入到DPC函数中去执行。

2023-05-10 11:15:49 57

原创 09 进程挂靠

ApcState这个结构体的Process成员就是存储的进程挂靠上的进程CR3。可以打一个比方,EPROCESS的DirectoryTableBase存储的是亲父母,而ApcState存储的是养父母,我想要资源时从养父母来拿。正常情况下,CR3的值是由养父母提供的,但CR3的值也可以改成和当前线程毫不相干的其他进程的DirectoryTableBase。进程为线程提供资源,也就是提供Cr3的值,Cr3中存储的是页目录表基址,Cr3确定了,线程能访问的内存也就确定了。

2023-05-10 10:53:14 44

原创 08 分析KiSwapThread、KiSwapContext、SwapContext(没有分析完....)

【代码】08 分析KiSwapThread、KiSwapContext、SwapContext(没有分析完....)

2023-05-10 10:35:06 106

原创 07 线程切换

但在实际的使用中我们发现,当我们在3环查看不同线程的FS寄存器时,FS的段选择子都是相同的,那是如何实现通过一个FS寄存器指向多个TEB呢?调度链表有32个,每次都从头开始查找效率太低,所以Windows都过一个DWORD类型变量的变量来记录,正好是32位,一个位代表一个链表,当向调度链表.中挂入或者摘除某个线程时,会判断当前级别的链表是否为空,为空将.变量对应位置0,否则置1,这个变量就是==_kiReadySummary==。其中,时钟中断也是一种中断,中断号0x30。

2023-05-10 09:28:25 177

原创 06 模拟线程切换

代码的注解都写好叻,顺序认真看自然会明白的。

2023-05-09 16:59:43 75

原创 05 等待链表和调度链表

程序可以正常运行,原因是CPU执行与调度是基于线程的,进程断链只是影响一些遍历系统进程的API,并不会影响程序执行:断链后在Windbg或者OD中无法看到被断掉的线程,但并不影响其执行,原因是CPU调度线程的时候压根不用这个链表** 线程有3种状态:就绪(ready)、等待(wait)、运行(running)**运行的线程 : 存储在KPCR中就绪和等待的线程 : 33个链表中(一个等待链表,32个就绪链表)

2023-05-09 13:22:39 103

原创 04 判断线程是否为GUI线程

Window XP中打开一个DebugView应用程序,使用WinDbg查看它的进程和线程的情况。接下来我们查看这两个线程。

2023-05-09 10:11:49 72

原创 03 使用DebugPort 清零实现反调试

驱动代码#include <ntifs.h>#include <wdm.h>#include <ntddk.h>//操作码:0x0-0x7FF 被保留,0x800-0xFFF 可用#define HIDE CTL_CODE(FILE_DEVICE_UNKNOWN,0x800,METHOD_BUFFERED,FILE_ANY_ACCESS)#define SHOW CTL_CODE(FILE_DEVICE_UNKNOWN,0x801,METHOD_BUFFE

2023-05-09 09:28:24 220

原创 02 进程断链、线程断链

进程断链驱动代码#include <ntifs.h>#include <wdm.h>#include <ntddk.h>//操作码:0x0-0x7FF 被保留,0x800-0xFFF 可用#define HIDE CTL_CODE(FILE_DEVICE_UNKNOWN,0x800,METHOD_BUFFERED,FILE_ANY_ACCESS)//设备对象PDEVICE_OBJECT devObj;//符号链接UNICODE_STRING s

2023-05-08 17:24:33 298

原创 01 EPROCESS、ETHREAD、KPCR结构

每个windows进程在0环都有一个对应的结构体:EPROCESS,这个结构体包含了进程所有重要的信息。

2023-05-08 09:53:07 248

原创 SSTD HOOK

打开一个记事本,只能通过点击关闭按钮或者菜单退出可以,而不能通过其他程序调用TerminateProcess关闭它。首先我们得找到TerminateProcess真正调用的内核函数的函数编号(所以我们需要修改编号101H的函数的地址,更新为我们自己的函数地址0x101但是,我们去修改该地址的值,有可能修改失败,页有可能是只读的,所以我们可以去修改该地址的PDPTE\PDE\PTE的属性,或者可以直接修改CR0寄存器的WP位。

2023-05-06 17:43:34 144

原创 中断 & 控制寄存器

它负责分配中断资源和管理各个中断源发出的中断请求.为了便于标识各个中断请求,中断管理器通常用IRQ,全称为Interrupt Request,后面加上数字来表示不同的中断。: 写保护位 ,WP = 1时,Supervisor不能写R/W没有置位的页,WP = 0时,Supervisor可以写任何页。异常通常是CPU在执行指令时检测到的某些错误,比如除0、访问无效页等,中断与异常之间有一些相似之处,但它们是不一样的。: PAE = 1,是2-9-9-12分页,PAE = 0是10-10-12分页。

2023-05-06 13:28:27 450

原创 SystemServiceTable

SystemServiceTable,即系统服务表,它不是SSDT表由4部分组成,ServiceTable指向的是函数地址数组,每个成员四个字节;Count表示调用次数,没啥意义;ServiceLimit表示这张表有几个函数;ArgumentTable指向对应函数有几个字节参数,每个成员一个字节从图中可以看出,Windows提供了两张表:上面的表是用来处理一般内核函数的,下面这张表是用来处理与GUI相关的内核函数。

2023-05-06 10:57:34 161

原创 3环层面调用

中断门进0环,需要的CS、EIP在IDT表中,需要查内存(SS与ESP由TSS提供),而CPU如果支持sysenter指令时,操作系统会提前将CS/SS/ESP/EIP的值存储在MSR寄存器中,sysenter指令执行时,CPU会将MSR寄存器中的值直接写入相关寄存器,没有读内存的过程,所以叫快速调用,但本质是一样的。其实,快速调用并不是一直存在的,在比较古老的CPU是不支持快速调用的。虽然它们指向的是同一个物理页,但在User层是只读的,在Kernnel层是可写的,通过页的限制保证在3环的安全性。

2023-05-05 10:37:28 67

原创 05 常规3环和0环通信、驱动注册、运行、停止、卸载

常规3环和0环通信0环代码#include <ntddk.h>//函数声明typedef NTSTATUS(_stdcall *_PsTerminateProcess)(PEPROCESS pEprocess,NTSTATUS ExitCode);_PsTerminateProcess pspTerminateProcess = NULL;//操作码:0x0-0x7FF 被保留,0x800-0xFFF 可用#define KillAPPTOOL CTL_CODE(FILE_D

2023-05-04 14:55:19 130

原创 04 设备创建方式

应用层通过CreateFile、ReadFile、WriteFile、CloseHandle等函数打开、从设备读取数据、向设备写入数据、关闭设备的时候,会使操作系统分别产生出IRP_MJ_CREATE、IRP_MJ_READ、IRP_MJ_WRITE、IRP_MJ_CLOSE等不同的IRP。值得注意的是,我们之前使用CreateFile这个东西只是为了创建文件,其实它的本质是与设备对象创建访问,我们3环程序想要通过符号链接与驱动建立通讯,就必须通过这个函数。其实就是一个别名,没有这个别名,在3环不可见。

2023-05-04 09:47:54 61

原创 03 特征码搜索PspTerminateProcess函数、隐藏驱动模块

函数地址。

2023-04-28 14:38:48 316

原创 02 读GDT表、字符串操作、遍历内核模块

【代码】(实验) 内核编程基础。

2023-04-27 16:41:06 137

原创 01 驱动编写基础案列

在同一处理器上,等级高的程序可以打断等级低的程序HOOK的时候使用的程序等级是 2缺页异常的 分页处理程序 等级是 2所以HOOK必须使用非分页内存。

2023-04-27 15:26:38 93

原创 基础环境配置

VS2019官网下载社区版WDK官网下载安装后我们可以正式写一个简单的XP驱动创建一个新项目,添加源文件main.c (c++文件也可以,名字任意取),我们写一个简单的驱动程序。

2023-04-27 10:33:14 382

原创 (实验)TLB存在探测

直接上代码有一个问题,结束后电脑会蓝屏,各位大佬知道的评论区留言呗~~~谢谢哦结果不刷新的结果 :结果刷新的结果 :

2023-04-25 15:18:49 75

原创 (理论)TLB

属性是 PDPET PDT PET 三个的属性AND起来的,如果是10-10-12就是PDE AND PTE。统计信息 : TLB大小毕竟有限,冷热区分,冷的可以被替换掉。存储的是线性地址的基址 : 也就是前20位(一个页)存储的是物理地址的基址 : 也就是前20位(一个页)

2023-04-25 11:22:57 82 1

原创 (实验) 给地址0挂上物理页,实现可读可写

【代码】(实验)给地址0挂上物理页,实现可读可写。

2023-04-25 10:46:01 104 1

原创 (实验)修改PDE、PTE属性读取高2G地址

在代码中直接读取高2G的内存地址会报错,当然我们可以通过调用门、中断门等提权读取,不过今天我们直接修改页的属性,物理页偏移 (0x00C)

2023-04-18 09:49:02 212

空空如也

空空如也

TA创建的收藏夹 TA关注的收藏夹

TA关注的人

提示
确定要删除当前文章?
取消 删除