64位内核第一讲,和32位内核的区别
64位内核第一讲,和32位内核的区别
双击调试配置请查看 连接: https://www.cnblogs.com/aliflycoris/p/5877323.html
一丶编译的区别.
首先,还是使用WDK7.1.7600编写. 但是编译的时候,要使用x64来编译. 其代码框架不变.
1.驱动加载
驱动加载的程序还是使用普通的驱动加载即可.但是64位(win7),微软推出了两种新的方式.
1.DSE
2.KPP
DSE: 这个机制是 驱动强制签名,也就是说你编写的驱动,都要进行签名.才可以加载.
KPP: 内核补丁保护, 比如我们说的SSDT表,(ring3 -> ring0 中专表)在XP下是可以HOOK的,现在,这些都被保护了,只要你更改了系统的核心源码,直接蓝屏.
2.去掉KPP保护.
在编写的64为内核驱动, 如果我们的系统是安全模式启动,则没有DSE保护.也就是说不用签名.
现在有工具可以直接去使用.
第一个选项是,点击之后,你的系统启动则是在安全模式启动.
第二个选项是, 点击之后,你的驱动可以添加一个测试签名.
3.注意的问题
如果进行了上面来了两个步骤,我们的驱动还是不能加载,那么这也是一个坑. 微软说了,在PE文件中,你的驱动必须有签名检查.
正确的姿势:
首先,编写驱动的source文件加上命令行选项.
LINKER_FLAGS = /INTEGRITYCHECK
且必须放在最下面, 加了这个选项,那么你的驱动,可以使用微软提供的HOOK函数了.
二丶64位GDT表
首先,地址变大了,变成了48位的地址,其高位是FFFF,属于是符号扩展.
IDT 也是变大了.
其内核中的结构体也变大了.
不光这个结构体,还有里面的,有兴趣的自己解析一下查看.
三丶SSDT表的寻找,以及SSDT加密
我们知道 ring3 -> ring0 会通过SSDT表进行中专,
其EIP 会存放在 msr寄存器中. xp下是174 175 176
现在查看AMD的CPU指令,会发现. 进0环会调用SystemCall命令.
其MSR寄存器是在 C0000081 C0000082 C0000083
其EIP会存放在82里面.
那么我们可以 使用指令.
rdmsr C0000082
读取三环进0环的地址. 对其解析.
因符号文件没有下载完全.所以还暂时没有办法解析.
SSDT加密算法是 模块首地址 + 当前表中的地址>>4 .我们要计算地址的时候.只需要将SSDT表中的内容的函数地址<<4位加上模块首地址即可.
- 碎片化 | 第四阶段-49-hibernate之HQL查询操作-视频
- Spring Cloud各组件超时总结
- 总结Web应用中常用的各种Cache
- 碎片化 | 第四阶段-50-hibernate之Criteria和NavtiveSQL查询操作-视频
- kafka_2.11-0.11.0.1集群搭建
- Spring Cloud Edgware新特性之五:filters端点
- 碎片化 | 第四阶段-51-Hibernate注解使用-视频
- 基础JavaScript装逼指南
- 碎片化 | 第四阶段-42-校验验证码-视频
- Angularjs中UI Router超级详细的教程{{上}}
- 【LEETCODE】模拟面试-120- Triangle
- Spring Cloud Edgware新特性之四:Zuul routes端点功能增强
- Spring Cloud Edgware新特性之三:使用配置属性自定义Feign的行为
- 碎片化 | 第四阶段-43-struts2拦截器interceptor-视频
- JavaScript 教程
- JavaScript 编辑工具
- JavaScript 与HTML
- JavaScript 与Java
- JavaScript 数据结构
- JavaScript 基本数据类型
- JavaScript 特殊数据类型
- JavaScript 运算符
- JavaScript typeof 运算符
- JavaScript 表达式
- JavaScript 类型转换
- JavaScript 基本语法
- JavaScript 注释
- Javascript 基本处理流程
- Javascript 选择结构
- Javascript if 语句
- Javascript if 语句的嵌套
- Javascript switch 语句
- Javascript 循环结构
- Javascript 循环结构实例
- Javascript 跳转语句
- Javascript 控制语句总结
- Javascript 函数介绍
- Javascript 函数的定义
- Javascript 函数调用
- Javascript 几种特殊的函数
- JavaScript 内置函数简介
- Javascript eval() 函数
- Javascript isFinite() 函数
- Javascript isNaN() 函数
- parseInt() 与 parseFloat()
- escape() 与 unescape()
- Javascript 字符串介绍
- Javascript length属性
- javascript 字符串函数
- Javascript 日期对象简介
- Javascript 日期对象用途
- Date 对象属性和方法
- Javascript 数组是什么
- Javascript 创建数组
- Javascript 数组赋值与取值
- Javascript 数组属性和方法
- Tensorflow中批量读取数据的案列分析及TFRecord文件的打包与读取
- YII框架实现自定义第三方扩展操作示例
- 在Tensorflow中实现leakyRelu操作详解(高效)
- Django def clean()函数对表单中的数据进行验证操作
- Python3爬虫中Splash的知识总结
- Laravel框架自定义公共函数的引入操作示例
- PHP PDOStatement::setFetchMode讲解
- Python QTimer实现多线程及QSS应用过程解析
- PHP count()函数讲解
- Laravel中9个不经常用的小技巧汇总
- PHP simplexml_load_string()函数实例讲解
- php文件操作之文件写入字符串、数组的方法分析
- php xhprof使用实例详解
- PHP获取远程http或ftp文件的md5值的方法
- PHP addslashes()函数讲解