安全内核初探(一)

简介: 安全内核初探

内核相关基础知识


1. CPU模式:实模式、保护魔术、8086虚拟模式

实模式:操作系统和软件权限一样,可以随便访问内存的每一个地方

保护模式:32位开始、开启了段页的保护,分为了用户模式和特权模式,这样可以保护关键内存不被访问修改。用户权限的应用程序,是不能访问特效模式的。

8086虚拟模式:CPU提供这种模式,使得可以跑16位程序


2. 内核:就是操作系统的一部分,这部分在0环运行


3. 驱动:可以看做是操作系统的一个dll,在0环运行操控硬件,但是我们肯定不是用来操控硬件。硬件不是微软产的,所有他肯定得让厂家能够编写,驱动代码控制硬件。所有我们就有机会能够访问内核。到了win7 64位后编写驱动需要增加签名才能够,被系统加载进去。


4. 用户模式和内核模式通信图


8db982bed72a3659a998ae54e330b878_640_wx_fmt=png&wxfrom=5&wx_lazy=1&wx_co=1.png


用户模式和内核模式

对内核驱动程序进行证明签名以便公开发布


安装开发驱动包(WDK)


我们现在学习的是XP系统,所有我们要开发XP的驱动,所以选择这个。

288ef9e1592dee477f814faf96a97c3a_640_wx_fmt=png&wxfrom=5&wx_lazy=1&wx_co=1.png


自己随便安装到一个目录、我安装的是D:\WinDDK


1d938679021667646bce52c37218d688_640_wx_fmt=png&wxfrom=5&wx_lazy=1&wx_co=1.png


介绍WDK

第一个重要的是WDK的帮助文档


a450a3087f5b63949921b8866604d54b_640_wx_fmt=png&wxfrom=5&wx_lazy=1&wx_co=1.png


这个部分就是我们关于内核的帮助,驱动还有开发硬件的相关的,这些我们不需要了解。

f5c7d8f8f8f228cb8a4800c252bffc85_640_wx_fmt=png&wxfrom=5&wx_lazy=1&wx_co=1.png


这些就是内核函数

1. ob开头的API: 一般是对象使用,操作系统是C和汇编写的,但是用的却是面向对象设计,比如进程.还有引用计数等等.所以需要调用这种API.


2. Mm开头的API: Mm开头的API,都是内存管理的API,比如锁定一块内存,不让其与磁盘交换数据等等.


3. Ps开头的API: ps开头的API,一般都是管理进程和线程的API,比如psGetCurrentProcessId,获得当前进程ID.


4. Io开头的API: Io开头的API一般就是负责IO操作的.如果写硬件驱动则不用管这些.直接使用in 或者out进行操作.


5. Po开头的API: Po开头的API一般就是管理电源的API.对于写内核驱动的我们,不关心这些.写硬件驱动的则要关心,比如通电了.硬件驱动需要做些初始化什么的.


6. Cm开头的API: Cm开头的API一般是注册表常用的API.


7. Zw开头的API: Zw开头的API,一般是内核版本的API,比如三环有CreateFile,那么在内核API中则是ZwCreateFile.


8. Ke开头API: ke开头的API,一般是内核层的API.在内核中,分为内核层还有执行层.


9. Ex开头的API: Ex开头的API,则是执行层的API.


10. Rtl开头的API :  Rtl开头的Api和C库函数很像,在驱动中可以使用C库函数,但是 微软不建议使用.所以提供了Rtl开头的API,甚至比C库函数还多.


11. DMA开头的API: 一般是写硬件驱动用的,我们不用.


12. HAL开头的API: 操作硬件抽象层的API.


13. Dbg开头的是调试函数



526284a1520f5e836d032f476cd9b4ba_640_wx_fmt=png&wxfrom=5&wx_lazy=1&wx_co=1.png


编译环境

我们现在看的是编译XP内核的环境

free编译的就是Release版

Checked编译的就是debug版


27b7856e1de2da5d7a8acac373f2e1c3_640_wx_fmt=png&wxfrom=5&wx_lazy=1&wx_co=1.png


编写第一个内核程序


dll编写时候有一个dllmain

驱动有DriverEntry

06229ee4b22a10cc859db583235da304_640_wx_fmt=png&wxfrom=5&wx_lazy=1&wx_co=1.png


编写代码


f3a4c7a31d39056ab7fff282c06e03ab_640_wx_fmt=png&wxfrom=5&wx_lazy=1&wx_co=1.png


然后在DKK目录下找到src

99a07fe453451feeb986d44458529cdc_640_wx_fmt=png&wxfrom=5&wx_lazy=1&wx_co=1.png


找到这两个文件夹,然后拷贝到我们源码那里

c9b3dff44679650bd2f76258df3c85d5_640_wx_fmt=png&wxfrom=5&wx_lazy=1&wx_co=1.png


把不需要的删除并且改名字就可以了

3ef791fa217e574c23ef47c52ed76a94_640_wx_fmt=png&wxfrom=5&wx_lazy=1&wx_co=1.png


然后打开编译环境

3d57d08ebf313e8a7acdc62ed99c5e99_640_wx_fmt=png&wxfrom=5&wx_lazy=1&wx_co=1.png


进入源码路径,然后编译(build),发现这个错误就时路径有空格


34e69173a0ea86decaea5abda41760a7_640_wx_fmt=png&wxfrom=5&wx_lazy=1&wx_co=1.png


得到sys的程序


abf3659e6a78c9d250c3c1488791b36b_640_wx_fmt=png&wxfrom=5&wx_lazy=1&wx_co=1.png


#include <ntddk.h>
VOID DriverUnload(__in struct _DRIVER_OBJECT *DriverObject)
{
DbgPrint("DriverUnload\n");
}
int g_num = 100;
NTSTATUS DriverEntry(
PDRIVER_OBJECT     DriverObject,
PUNICODE_STRING    RegistryPath)
{
//注册卸载函数
DriverObject->DriverUnload = DriverUnload;
DbgPrint("Hello WDK!:%p\n", &g_num);
return  STATUS_SUCCESS;
}

相关文章
|
SQL 分布式计算 监控
全链路数据治理
本场景主要介绍以常见的真实的海量日志数据分析任务为背景,如何通过使用DataWorks完成数据采集 、加工数据、配置数据质量监控和数据可视化展现等任务。
|
数据采集 监控 数据管理
《阿里云数据治理方案及案例分享》|学习笔记
快速学习《阿里云数据治理方案及案例分享》
2149 0
|
6月前
|
JavaScript 数据可视化 前端开发
如何安装和配置 ECharts
如何安装和配置 ECharts
162 1
|
6月前
|
存储 监控 大数据
数据仓库(11)什么是大数据治理,数据治理的范围是哪些
什么是数据治理,数据治理包含哪些方面?大数据时代的到来,给了我们很多的机遇,也有很多的挑战。最基础的调整也是大数据的计算和管理,数据治理是一个特别重要的大数据基础,他保证着数据能否被最好的应用,保证着数据的安全,治理等。那么数据治理到底能治什么,怎么治?
156 0
|
存储 缓存 索引
分别基于红黑树、timefd、多级时间轮实现定时器-2
分别基于红黑树、timefd、多级时间轮实现定时器
98 0
|
存储 SQL NoSQL
浏览器端数据库IndexedDB
1.概念 IndexedDB是一种轻量级NoSQL(Not Only SQL,泛指非关系型)数据库,用来持久化大量客户端数据。
|
机器学习/深度学习 数据采集 算法
用PyTorch构建基于卷积神经网络的手写数字识别模型
用PyTorch构建基于卷积神经网络的手写数字识别模型
316 0
|
分布式计算 运维 DataWorks
《全链路数据治理-智能数据建模 》——产品实操:零售电商数据建模操作实践(1)
《全链路数据治理-智能数据建模 》——产品实操:零售电商数据建模操作实践(1)
214 0
|
SQL 分布式计算 DataWorks
《全链路数据治理-智能数据建模 》——客户案例:菜鸟集团数仓建模(4)
《全链路数据治理-智能数据建模 》——客户案例:菜鸟集团数仓建模(4)
208 0
|
数据建模 物联网
《全链路数据治理-智能数据建模 》——客户案例:菜鸟集团数仓建模(1)
《全链路数据治理-智能数据建模 》——客户案例:菜鸟集团数仓建模(1)
243 0