今天,我们来讲一下内核安全!
本文章仅提供学习,切勿将其用于不法手段!
目前,在渗透测试领域,主要分为了两个发展方向,分别为Web攻防领域和PWN(二进制安全)攻防领域。在PWN的二进制领域,免杀技术,一直是后渗透利用阶段的重要安全技术之一。
想要免杀,需要了解的安全技术知识包括软件加壳、代码混淆(例如,使用花指令)、隐匿技术(例如,Rootkit技术)、动态加密等内容。
接上一篇文章,我们来继续讲述下 Rootkit技术 的相关基础知识点内容!
在《 渗透测试之内核安全系列课程:Rootkit技术初探 》之前的文章中,我们讲述了 GDT 全局描述符表、LDT 局部描述符表、GDTR 全局描述符表 寄存器、LDTR 局部描述符表 寄存器 、一致性代码、非一致性代码、实模式、保护模式、线性地址 等非常重要的基础知识点内容!
这些内容,是学习 Rootkit 技术 的基础 !
今天,我们来重点讲解下 线性地址 到 物理地址 的 转换 !
注意,本章中的 比特位排序,是从 数字 1 开始计算的,第N位 对应的 比特位索引 为 第N位 - 1 。
注意,本章中的 字节排序,是从 数字 1 开始计算的,第N个字节 对应的 字节索引 为 第N个字节 - 1 。
说起,线性地址 到 物理地址 的 转换,我们不得不提起几个非常重要的 控制寄存器 !
CR0 寄存器、CR1 寄存器、CR2 寄存器、CR3 寄存器 。
其中,CR1 寄存器 ,并没有被实际使用,所以 暂时 忽略 !
这里,重点只讲 CR0 控制寄存器 、CR2 页故障线性地址寄存器、 CR3 页目录基址寄存器 !
CR0 控制寄存器,最重要的两个比特位,分别是第1位和第32位,刚好是 CR0寄存器的内容值的“ 头 ” 和 “ 尾 ” !
CR0控制寄存器的第1位 PE ,控制着 保护模式 的开启 与 关闭 !当 PE 位 是 1 时,保护模式 处于 开启状态 ,当 PE 位 是 0 时,保护模式 处于 关闭状态,此时 计算机 运行于 实模式 !
CR0控制寄存器的第32位 PG ,控制着 内存分页机制 的开启 与 关闭 !当 PG 位 是 1 时,内存分页机制 处于 开启状态 ,当 PG 位 是 0 时,内存分页机制 处于 关闭状态,此时 计算机 运行于 实模式 !
如果需要 启用 内存分页机制,那么 第 1 位 PE 位 和 第 32 位 PG 位 的值,均要为 1 !
在禁用 CPU 的 内存分页机制 时,线性内存地址 等同于 物理内存地址!
现在,让我们来科普一下 布尔值 和 布尔运算 存在 的 意义!
这主要是为了让您更加深刻地理解,0 和 1 所代表的 布尔运算 意义 !
在我之前发布的一些文章中,我提到了 布尔值 的 运算 !
非真即假,非假即真!不是真的?那么就一定是假的!不是假的?那么就一定是真的!
布尔值,只会存在 两个值,True 真,或者 False 假 !
在 计算机领域 的 二进制 世界 中,数字 1 ,通常代表 True 真 !
在 计算机领域 的 二进制 世界 中,数字 0 ,通常代表 False 假 !
在 计算机领域 的 二进制 世界 中,数字 1 ,通常代表 条件成立 !
在 计算机领域 的 二进制 世界 中,数字 0 ,通常代表 条件不成立 !
在 计算机领域 的 二进制 世界 中,数字 1 ,通常代表 开启 !
在 计算机领域 的 二进制 世界 中,数字 0 ,通常代表 关闭 !
这些知识,都属于 计算机领域 中 技术知识 学习方面 的 小技巧 !
CR2 页故障线性地址寄存器,主要用于 在页异常情况发生时,报告相应的出错信息。
当发生页异常时(例如,指定的内存页,并不存在!这时,会触发 缺页中断 )CPU 会把引起 缺页中断 的 线性地址 保存在 CR2 页故障线性地址寄存器 之中!
操作系统中的页异常处理程序(其实就是 缺页中断 所对应的 中断服务程序)可以通过检查 CR2 页故障线性地址寄存器 的 内容值 的方式