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位加上模块首地址即可.

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

发表于

我来说两句

0 条评论
登录 后参与评论

相关文章

来自专栏Android-薛之涛

Android-强,软,弱,虚引用

      啥是强引用?举个例子,我们平时new 的对象,就都是强引用。如: String s =new String(),这就是一个强引用,那么强引用有啥特点...

11210
来自专栏DannyHoo的专栏

Xcode中插件的管理工具-----Alcatraz

Alcatraz 是一款 Xcode的插件管理工具,可以用来管理XCode的 插件、模版以及颜色配置的工具。

10810
来自专栏進无尽的文章

编码篇-持久化NSUserDefaults

NSUserDefaults类,以字典形式保存数据,IOS会自动把字典中的键值对转换成对应的XML文件(也就是plist文件),这个文件会被保存到APP的沙盒目...

14810
来自专栏每日一篇技术文章

weex-10-组件a的使用

a标签使用起来比较简单,先留下一个问题,如果想要跳转到html页面怎么实现?我们后面会讲到!

15020
来自专栏DannyHoo的专栏

The Operation couldn't be completed.(LaunchServicesError error 0.)

问题描述:当运行Xcode6时,编译代码成功,但是登陆模拟器失败,显示错误:The Operation couldn't be completed.(Launc...

24810
来自专栏曾大稳的博客

Android aidl流程简单分析

我们通过写一个从服务端(另外一个进程)获取用户名和密码作为demo来进行源码讲解。

19330
来自专栏清晨我上码

spring mvc 国际化的几种方案

通过设置浏览器请求测试:http://localhost:8080/xxx/nation/test

1.3K30
来自专栏李蔚蓬的专栏

Android实战_note1(MyMirror_一款小型摄像处理的App)

1.1 Activity.java全文: 注意代码中的注释,其中 handler.sendEmptyMessageDelayed(1,3000);...

10920
来自专栏游戏开发那些事

【Unity游戏开发】AssetBundle杂记--AssetBundle的二三事

  马三在公司大部分时间做的都是游戏业务逻辑和编辑器工具等相关工作,因此对Unity AssetBundle这块的知识点并不是很熟悉,自己也是有打算想了解并熟悉...

59820
来自专栏一个爱瞎折腾的程序猿

asp.net core合并压缩资源文件引发的学习之旅

重启vs2017,卧槽。一遍又一遍无响应(家里公司电脑都没有成功~)..幸好还有其他路可以走...

49320

扫码关注云+社区

领取腾讯云代金券

年度创作总结 领取年终奖励