Windows内核实验 ——— 页面异常 前言 本次实验我们将简单的构造一个页面异常的处理函数,利用之前的Hook技术将相应代码写入GDT中,为我们进程调用提供处理函数以及相关全局变量,通过实验中的一些现象来进行了解页面异常 实验过程 我们首先需要做的是构造一个写入代码到GDT中的程序,以及将我们的Hook代码进行写入目的地址处 我们尝试在地址:805454A8处进行写入我们的代码,将用来处理中断服务的函数写入到GDT中 12345p = 2023-07-05 Windows Kernel
Windows内核实验 ——— 数据TLB 前言 回到我们之前提到的三级内存映射关系,对于我们之前查询地址的操作可以通过判断TLB中是否有对应的缓存来进行读取,当存在有对应数据时我们便从TLB进行直接获取,若不存在则是通过访问cr3进而访问对应的PDE、PTE信息,内存访问的大致流程为: TLB直接记录了虚拟内存到物理内存的访问关系,对于TLB我们无法直接通过汇编语句来进行获取 实验过程 在此次实验中需要注意: 代码顺序执行,即不产 2023-07-01 Windows Kernel
Windows内核实验 ——— 内存延迟分配 前言 在Windows中对虚拟内存分配存在有一个机制,当我们分配的虚拟内存没有使用之前是不会映射物理内存的,此次实验中我们将构造一个新的节表,将一个变量写到此段表开辟的页头部,通过赋值来观察其是否映射到了物理内存中 实验内容 与之前相同,我们写一个简单的中断提取后构造一个节表,在节表中定义一个变量,将变量赋值给我们的全局变量,通过打印全局变量来观察Windows的内存是否映射到物理内存中 1234 2023-06-11 Windows Kernel
Windows内核实验 ——— 平行进程 前言 我们之前实验中通过切换cr3以及将我们代码写入到GDT中,通过调用公共区域内代码将notepad中值进行了修改,在此次实验中我们将同样利用cr3的进程切换来执行进程内私有的代码,而不需要将大量代码保存在GDT中 实验过程 我们前面提到了每个进程存在有自己的私有空间,我们可以操作cr3切换到其私有地址空间中,在此次实验我们构造两个相同基地址的程序,通过进程的切换来完成对全局变量的修改 主程序 2023-06-11 Windows Kernel
栈溢出的简单利用 前言 最近学校的一些课程简单提到了一些栈溢出的相关危害,并提供一个实验让我们尝试利用缓冲区溢出来打开notepad.exe,并可以尝试在多个操作系统上达到通用性。 实验内容 此次实验采用VS完成,实验开始前记得关闭VS的各项安全保护机制 基础实验 此次实验我们的溢出点为以下代码: 123456void overflow(){ char buf[10]; memcpy(buf, sh 2023-06-07 Malicious Code Analysis
Windows内核实验 ——— 进程切换 前言 前面我们已经了解到了CR3是控制进程的一个核心资源,相当于访问内存的一把钥匙,理论上我们可以通过其访问任何进程的内存,此次实验中我们将编写代码将一个notepad中的内存信息进行修改 实验过程 我们首先创建一个notepad程序,在里面随便写入点内容,通过CE来找到其字符串对应的地址空间 我们找到对应地址空间后我们通过使用notepad的CR3寄存器来获取对应的地址空间,我们使用Windb 2023-06-06 Windows Kernel
Windows内核实验 ——— 零地址读写 前言 我们都知道在C语言中0地址是无法进行读写的,会造成读写异常。本质上来说是因为0地址是一个不存在的物理页面,但是我们可以尝试进行对其修改,将其PTE进行修改,进而我们可以对其进行读写操作 实验过程 我们可以先通过!pte 0来测试零地址是不可读写的 可以观察到下面的not valid,证明其不可读写的特性。但是我们之前提到了对PTE修改的计算公式,我们可以利用该计算方式来修改零地址处的PTE 2023-06-05 Windows Kernel
Windows内核实验 ——— PAE分页 前言 上个实验中我们通过将PAE进行关闭之后学习通过CR3来找到真实物理地址的方式,而在此次实验中将恢复为原来的noexecute,来再次完成原先我们的操作 实验过程 与上次实验一样,我们先执行我们之前运行的一个获取cr3以及signFlag地址的程序 此处不再贴代码了,找代码可以往回翻一下非PAE分页处的代码 同样需要注意修改 int 20H 的中断 运行成功后与之前类似,我们查找当前运 2023-06-04 Windows Kernel
Windows内核实验 ——— 非PAE分页 前言 之前我们所进行的都是关于段的,我们通过修改fs段来进行提权,再此之后我们将讨论一下关于Windows的页保护 实验内容 在开始之前我们需要将虚拟机设置为PAE模式 PAE:物理地址扩展 我们原来的启动配置文件boot.ini中将noexecute进行修改为execute 我们进行上述设置后相当于我们将页属性从不可执行设置为了可执行,数据保护是在段上完成,而页不对其进行操作 本次实验虚 2023-06-03 Windows Kernel
Windows内核实验 ——— 系统调用 前言 在之前的实验过程中都需要我们使用WinDBG来中断内核,在系统中断表中添加int 20,将我们自己构造的内核代码进行运行,而在此处实验中我们将构建一个处于三环的程序,通过系统调用来完成对应的功能。 实验过程 因为在程序中ntdll都会被程序所调用对此我们哦那个给模拟该方式来实现从三环到零环的权限。 我们此处尝试实现两个函数ReadMem、AllocMem。我们同样需要两个程序来构建,第一个用 2023-05-14 Windows Kernel