Windows内核和驱动进程保护
TenProtect(TP) 驱动保护原理

能有效的防止用户游戏帐号和虚拟财产被窃取。腾讯 TP 系统主要作用为外挂检测、反盗号、反非法工作室、防非法消息。
具体功能如下: 反注入:TP系统能有效的阻止非法模块对游戏进行注入; 反加速:TP系统能防止游戏客户端的非法加速功能; 反模拟按键:TP系统能有效阻止模拟按键程序; 反脱机: TP系统能针对非正常登录游戏的行为进行检测; 反调试: TP系统采用内核级反调试技术,保护游戏进程不被调试和分析; 反木马: TP系统可以保护玩家帐号不被木马程序窃取; 检测外挂功能:TP系统能对外挂功能进行检测; 指令混淆: TP系统能对正常指令进行虚拟和变形,加大外挂作者逆向难度; 特征匹配: TP系统采用特征码匹配技术,能准确检测到外挂的使用; 文件校验:TP系统可以准确检测游戏目录下的文件是否被第三方程序篡改; 游戏内存数据校验: TP系统所特有技术手段可以准确感知到游戏关键数据的异常; 游戏进程保护: TP系统可以保护游戏进程不被第三方程序读写; 游戏虚拟财产保护: 在玩家因不当操作引起帐号泄漏情况下,TP系统也可以保护玩家帐号内虚拟财产不被不法份子转移;
Hale Waihona Puke 那么如何实现干掉 TP 对 NtOpenProcess 所做的 Hook 呢 ? 一般干掉的意思就是恢复 Hook,但是恢复 Hook 有一个很严重的问题,那就是很容易就被 TP 检测到了, 其实可以换个思路,为什么一定要干掉 TP 对 NtOpenProcess 所做的 Hook 呢 ? 就算被干掉了,还得干掉 TP 用来检测 NtOpenProcess 的 Hook 是否被干掉的线程之类的,
6: }
7: else
操作系统名词解释汇总

操作系统名词解释汇总操作系统(Operating System,简称OS)是计算机系统中最基本的软件之一,它负责管理和控制计算机硬件资源,并提供用户与计算机之间的接口。
本文将对一些常见的操作系统名词进行解释,帮助读者更好地理解操作系统相关的概念。
一、内核(Kernel)内核是操作系统的核心部分,它直接控制计算机的硬件和系统资源。
内核负责管理计算机的进程、内存以及设备驱动程序。
它提供了与应用程序和硬件交互的接口,是操作系统其他组件的基础。
二、进程(Process)进程指在操作系统中正在运行的一个程序实例。
它是计算机资源分配的基本单位,每个进程都有自己的执行状态、代码、数据和上下文。
操作系统通过进程调度算法来合理分配CPU时间片,从而实现多个进程之间的并发执行。
三、线程(Thread)线程是进程中的一个执行单元,也被称为轻量级进程。
同一个进程中的多个线程共享进程的资源(如内存),每个线程有自己的执行路径和局部数据。
多线程可以提高程序的并发性和系统的响应速度,提高资源利用率。
四、虚拟内存(Virtual Memory)虚拟内存是一种操作系统内存管理技术,它将物理内存和磁盘空间组合起来使用,扩展了可用的内存空间。
虚拟内存使得应用程序可以访问比物理内存更大的内存空间,同时提供了内存保护和共享机制。
五、文件系统(File System)文件系统是操作系统中用于管理和存储文件的一种机制。
它提供了文件的创建、读取、写入和删除等操作,同时还负责文件的组织和存储。
常见的文件系统包括FAT、NTFS(Windows系统)、Ext4(Linux系统)等。
六、设备驱动程序(Device Driver)设备驱动程序是操作系统用于和硬件设备进行通信的一种软件。
它提供了对硬件设备的访问接口,使应用程序可以通过操作系统与硬件设备进行交互。
不同硬件设备需要不同的设备驱动程序来完成其控制和数据传输功能。
七、系统调用(System Call)系统调用是应用程序通过操作系统提供的接口来访问操作系统功能的一种机制。
CEOD无法附加游戏进程的破解方法来吧别在为这烦恼了

CE+OD无法附加游戏进程的破解方法来吧别在为这烦恼了其实看过 windows 核心编程那本书的人都知道计算机编程领域那些所谓的游戏保护真的只是为难菜鸟而已,对于大鸟基本不起作用.游戏无法就是采用线程进程 SSDT 等等这些东西来限制一些如:CE OD ASM32 这些工具调试而已比如OD要调试一个程序进程首先做的是2步操作1.调用系统库中打开进程的API函数2.创建新线程来调试程序进程.当如果一个游戏出现无法OD附加或者调试失败的情况,那么可以先检查下这2个方面是否存在问题.第一:检查SSDT表中的函数是否被修改,E语言老师的 SSDTHOOK 深入浅出的帖子也说过,SSDT表只是给API函数的一个指引.如果把这个表中的打开进程 API函数修改HOOK掉,那么就会导致程序无法打开进程只有恢复它才能进行打开进程第二:检查下游戏启动后运行进程里面的线程, 游戏进程中分很多种线程,有些是负责连接网络的等等检查的时候可以自己写一些暂停线程的工具进行检测游戏进程中的各线程用途,只要不动游戏的联网线程和主线程其他线程可以进行暂停或销毁掉,其实过游戏保护不是必须要学习C++的,这点发现好多朋友都被外面的那些人给误导了. 首先下面是我得出来的结论:游戏本身使用最高权限:驱动级进行对相关的函数进行HOOK 与监视(通常是.sys 系统驱动文件)像这样的情况,因为游戏是以驱动级别的形式来进行保护自己的进程, 所以必须自己写个恢复HOOK相关函数的驱动文件加载,以驱动级的方式去恢复游戏驱动级的保护.普通用户级别权限是无法进行对驱动级别的程序操作的,而要自己去写恢复相关HOOK的驱动文件,目前的语言只有C++ 比较合适.所以学习C++.只是为了这个用而学,并不是说学会C++ 你就会过驱动保护,这是2码事情,因为你还要懂如何进行对API函数恢复HOOK的一些操作!对这方面有些研究的都使用过 XueTr.exe 这个软件吧,之所以普遍的游戏保护都可以被它搞定是因为这个工具本身就是驱动级,因为它驱动时候会加载自己的驱动.进行枚举系统运行的进程中内核相关信息,并且以驱动级对它们操作,包括独立团电脑编程助手的SSDT 恢复功能也是,所以如果游戏是采用驱动级的权限去HOOK修改相关函数来达到保护自己进程的话,那么你要解决掉它就必须以驱动级的权限去干掉恢复被HOOK的相关函数.只有平等级别的权限才能互相操作。
Windows进程的句柄表

原Windows 进程的句柄表2015年03月12日 14:49:32qiaoli的知识备忘录阅读数:1288本文源自《Windows内核原理与实现》第3章Windows 进程和线程3.4.1 Windows 进程的句柄表(1)上一章介绍了Windows 内核中的对象管理器,Windows 执行体实现了一套对象机制来管理各种资源或实体。
每种对象都有一个类型对象,类型对象定义了该类对象的一些特性和方法。
对象管理器也定义了一个全局名字空间,提供了根据名称来解析对象的统一机制(参考ObpLookupObjectName 函数)。
类型对象通过提供自定义的Parse 方法可以扩展此名字空间。
对象管理器中的对象是执行体对象,它们位于系统空间;在进程空间不能通过地址来引用它们。
Windows 使用句柄(handle)来管理进程中的对象引用。
当一个进程利用名称来创建或打开一个对象时,将获得一个句柄,该句柄指向所创建或打开的对象。
以后,该进程无须使用名称来引用该对象,使用此句柄即可访问。
这样做可以显著地提高引用对象的效率。
句柄是一个在软件设计中被广泛使用的概念。
例如,在C 运行库中,文件操作使用句柄来表示,每当应用程序创建或打开一个文件时,只要此创建或打开操作成功,则C 运行库返回一个句柄。
以后应用程序对文件的读写操作都使用此句柄来标识该文件。
而且,如果两个应用程序以共享方式打开了同一个文件,那么,它们将分别得到各自的句柄,且都可以通过句柄操作该文件。
尽管两个应用程序得到的句柄的值并不相同,但是这两个句柄所指的文件却是同一个。
因此,句柄只是一个对象引用,同一个对象在不同的环境下可能有不同的引用(句柄)值。
在Windows 中,句柄是进程范围内的对象引用,换句话说,句柄仅在一个进程范围内才有效。
一个进程中的句柄传递给另一个进程后,句柄值将不再有效。
实际上,Windows支持的句柄是一个索引,指向该句柄所在进程的句柄表(handle table)中的一个表项。
天书夜读:从汇编语言到Windows内核编程

作者简介谭文:从2002年到2008年,从事信息安全类软件的Windows内核驱动的开发工作。
从2008年开始参与一个主要涉及不同架构之间二进制指令的实时翻译技术的项目的开发。
业余时间在驱动开发音()以楚狂人为笔名发表了许多技术文章。
编辑推荐我作为驱动开发的老兵,深感资料缺乏的艰辛,很多信息无法在文档中找到,此时自力更生的能力更加重要。
当我们手中拿着神兵利器——WinDbg时,一切都在掌握之中。
这本书将要告诉您的不是全面的汇编知识或未公开的Windows秘密,而是怎么从这些貌似天书的汇编代码中,一探Windows底层的核心实现。
在开发中出现的问题,能不能从Windows自身找到答案?如果您正在这样思考,无疑本书是为您度身订做的。
本书授人以渔,也授人以鱼;短小精悍,读之如一缕清风,读罢则有醍醐灌顶之感。
——驱动开发网站长 马勇(znsoft)本书简介本书从基本的Windows程序与汇编指令出发,深入浅出地讲解了Windows内核的编程、调试、阅读,以及自行探索的方法。
读者在使用C/C++开发Windows程序的基础上,将熟练掌握汇编和C语言的应用,深入了解Windows底层,并掌握阅读Windows内核的基本方法,以及Windows内核的基本编程方法。
本书适合使用C/C++在Windows上编程的读者,尤其适合希望加深自己技术功底的Windows应用程序员、计算机专业的有志于软件开发的大中院校学生;专业的Windows内核程序员,亦可从本书得到超越一般内核程序开发的启发。
目录入手篇 熟悉汇编 第1章 汇编指令与C语言 1.1 上机建立第一个工程 1.1.1 用Visual Studio创建工程 1.1.2 用Visual Studio查看汇编代码 1.2 简要复习常用的汇编指令 1.2.1 堆栈相关指令 1.2.2 数据传送指令 1.2.3 跳转与比较指令 1.3 C函数的参数传递过程 第2章 C语言的流程和处理 2.1 C语言的循环反汇编 2.1.1 for循环 2.1.2 do循环 2.1.3 while循环 2.2 C语言判断与分支的反汇编 2.2.1 if-else判断分支 2.2.2 switch-case判断分支 2.3 C语言的数组与结构 2.4 C语言的共用体和枚举类型 第3章 练习反汇编C语言程序 3.1 算法的反汇编 3.1.1 算法反汇编代码分析 3.1.2 算法反汇编阅读技巧 3.2 发行版的反汇编 3.3 汇编反C语言练习基础篇 内核编程 第4章 内核字符串与内存 4.1 字符串的处理 4.1.1 使用字符串结构 4.1.2 字符串的初始化 4.1.3 字符串的拷贝 4.1.4 字符串的连接 4.1.5 字符串的打印 4.2 内存与链表 4.2.1 内存的分配与释放 4.2.2 使用LIST_ENTRY 4.2.3 使用长长整型数据 4.2.4 使用自选锁 第5章 文件与注册表操作 5.1 文件操作 5.1.1 使用OBJECT_ATTRIBUTES 5.1.2 打开和关闭文件 5.1.3 文件读/写操作 5.2 注册表操作 5.2.1 注册表键的打开 5.2.2 注册表值的读 5.2.3 注册表值的写 第6章 时间与线程 6.1 时间与定时器 6.1.1 获得当前滴答数 6.1.2 获得当前系统时间 6.1.3 使用定时器 6.2 线程与事件 6.2.1 使用系统线程 6.2.2 在线程中睡眠 6.2.3 使用同步事件 第7章 驱动、设备与请求 7.1 驱动与设备 7.1.1 驱动入口与驱动对象 7.1.2 分发函数和卸载函数 7.1.3 设备与符号链接 7.1.4 设备的安全创建 7.1.5 设备与符号链接的用户相关性 7.2 请求处理 7.2.1 IRP与IO_STACK_LOCATION 7.2.2 打开与关闭请求的处理 7.2.3 应用层信息传入 7.2.4 驱动层信息传出探索篇 研究内核 第8章 进入Windows内核 8.1 开始Windows内核编程 8.1.1 内核编程的环境准备 8.1.2 用C语言写一个内核程序 8.2 学习用WinDbg进行调试 8.2.1 软件的准备 8.2.2 设置Windows XP调试执行 8.2.3 设置VMWare虚拟机调试 8.2.4 设置被调试机为Vista的情况 8.2.5 设置Windows内核符号表 8.2.6 调试例子diskperf 8.3 认识内核代码函数调用方式 8.4 尝试反写C内核代码 8.5 如何在代码中寻找需要的信息 第9章 用C++编写的内核程序 9.1 用C++开发内核程序 9.1.1 建立一个C++的内核工程 9.1.2 使用C接口标准声明 9.1.3 使用类静态成员函数 9.1.4 实现new操作符 9.2 开始阅读一个反汇编的类 9.2.1 new操作符的实现 9.2.2 构造函数的实现 9.3 了解更多的C++特性 第10章 继续探索Windows内核 10.1 探索Windows已有内核调用 10.2 自己实现XP的新调用 10.2.1 对照调试结果和数据结构 10.2.2 写出C语言的对应代码 10.3 没有符号表的情况 10.4 64位操作系统下的情况 10.4.1 分析64位操作系统的调用 10.4.2 深入了解64位内核调用参数传递深入篇 修改内核 第11章 机器码与反汇编引擎 11.1 了解Intel的机器码 11.1.1 可执行指令与数据 11.1.2 单条指令的组成 11.1.3 MOD-REG-R/M的组成 11.1.4 其他的组成部分 11.2 反汇编引擎XDE32基本数据结构 11.3 反汇编引擎XDE32具体实现 第12章 CPU权限级与分页机制 12.1 Ring0和Ring3权限级 12.2 保护模式下的分页内存保护 12.3 分页内存不可执行保护 12.3.1 不可执行保护原理 12.3.2 不可执行保护的漏洞 12.4 权限级别的切换 12.4.1 调用门及其漏洞 12.4.2 sysenter和sysexit指令 第13章 开发Windows内核Hook 13.1 XP下Hook系统调用IoCallDriver 13.2 Vista下IofCallDriver的跟踪 13.3 Vista下inline hook 13.3.1 写入跳转指令并拷贝代码 13.3.2 实现中继函数实战篇 实际开发 第14章 反病毒、木马实例开发 14.1 反病毒、木马的设想 14.2 开发内核驱动 14.2.1 在内核中检查可执行文件 14.2.2 在内核中生成设备接口 14.2.3 在内核中等待监控进程的响应 14.3 开发监控进程 14.4 本软件进一步展望 第15章 Rootkit与HIPS 15.1 Rootkit为何很重要 15.2 Rootkit如何逃过检测 15.3 HIPS如何检测Rootkit 第16章 手写指令保护代码 16.1 混淆字符串 16.2 隐藏内核函数 16.3 混淆流程与数据操作 16.3.1 混淆函数出口 16.3.2 插入有意义的花指令 第17章 用VMProtect保护代码 17.1 安装VMProtect 17.2 使用VMProtect 17.3 查看VMProtect效果参考文献插图摘要书摘插图 第10章 继续探索Windows内核 10.1 探索Windows已有内核调用 基础知识下面用本书前面介绍的知识来做一些有用的事情。
第02章 - Windows NT安全

第2章 Windows NT安全原理虽然本书以Windows 2000作为阐述Windows系统安全原理与技术的重点,但由于Windows 2000的大部分核心功能和面向对象的设计都来源于Windows NT 4.0,大部分原有的基础安全结构仍然保持不变,因此本章将首先说明Windows NT 4.0系统安全的基本原理与技术。
2.1 Windows NT系统安全体系图2-1显示了Windows NT 4.0系统体系结构中的多个组成部分以及彼此之间的相关性。
与其他大多数模型类似,这也是一种分层结构:计算机硬件位于底端,而高层的应用程序位于顶端。
用户与最高层的部分进行交互,中间的所有层次都为上一层提供服务并与下一层进行交互。
图2-1 Windows NT4.0安全体系结构该体系结构分为两种模式:内核模式(Kernel Mode)和用户模式(User Mode)。
应用程序及其子系统运行在用户模式下。
该模式拥有较低特权,不能对硬件直接进行访问。
用户模式的应用程序被限定在由操作系统所分配的内存空间内,不能对其他内存地址空间直接进行访问。
用户模式只能使用特殊的应用程序编程接口(API)来从内核模式组件中申请系统服务。
用户模式中包含有以下一些主要的子系统。
z Win32子系统:这是主要的应用程序子系统,所有的32位Windows应用程序都运行在这个子系统之下。
z本地安全子系统:用来支持Windows的登录过程,包括对登录的身份验证和审核工作。
安全子系统需要和Win32子系统进行通信。
z OS/2子系统:被设计用来运行和OS/2 1.x相兼容的应用程序。
z POSIX子系统:被设计用来运行和POSIX 1.x相兼容的应用程序。
而内核模式中的代码则具有极高的特权,可以直接对硬件进行操作以及直接访问所有的内存空间,并不像运行在用户模式下的程序那样被限定在自身特定的地址空间内。
组成内核模式的整套服务被称为“执行服务”(有时也被称为Windows NT Executive)。
数据执行保护DEP

数据执行保护技术(Data Execution Prevention,以下简称DEP)是WinXP SP2 和2003 sp1 新增的一项功能。
DEP 简单地说可以看作操作系统底层的安全防护机制,本身不具备对病毒检测的功能。
但如果有利用漏洞溢出包括本地溢出的病毒发作时,DEP 可以进行防护作用。
在WinXP SP2 和2003 sp1 的系统上,在控制面板里打开“系统”属性,在【高级】选项卡下的“性能:视觉效果、处理器计划、内存使用和虚拟内存”里面点击【设置】,接着在“性能选项”中选择【数据执行保护】选项卡,即可设置DEP 功能。
DEP 技术也需要硬件设备的支持,如果要完整地支持DEP 必须拥有支持DEP 技术的CPU,目前只有Intel 的“安腾”系列、Pentium 4 J 支持,以及AM D 的Athlon 64 系列、Opteron 支持。
硬件不支持DEP 的计算机使用WinXP SP2 或2003 sp1 只能用软件方式模拟DEP 的部分功能。
数据执行保护(DEP)是MicrosoftWindowsX PS ervicePack2(SP2)支持的一种处理器功能,它禁止在标记为数据存储的内存区域中执行代码。
此功能也称作“不执行”和“执行保护”。
当尝试运行标记的数据页中的代码时,就会立即发生异常并禁止执行代码。
这可以防止攻击者使用代码致使数据缓冲区溢出,然后执行该代码。
数据执行保护(DEP)有助于防止病毒和其他安全威胁造成破坏,它们的攻击方法是从只有Windows和其他程序可以使用的内存位置执行恶意代码。
此类威胁使用以下方法造成破坏:它接管某个程序正在使用的一个或多个内存位置,然后进行传播并破坏其他程序、文件甚至您的电子邮件联系方式。
与防火墙或防病毒程序不同,DEP不能阻止在您的计算机上安装有害程序。
但是,它会监视您的程序,以确定它们是否安全地使用系统内存。
为此,DEP软件会单独或与兼容的微处理器一起将某些内存位置标记为“不可执行”。
一个修改NT内核的真实RootKit-电脑资料

一个修改NT内核的真实RootKit-电脑资料------------------[ Phrack 杂志 --- 卷标9 │ 期刊 55 ]------------------[ 一个修改NT内核的真实RootKit ]------------------[ 作者:Greg Hoglund < *****************>]------------------[ 翻译:TOo2y<*******************>]译者注:首先要感谢sinister和alert7,没有他们的指点和帮助我也不会这么快接触到Windows的底层内核,在此一并表示感谢,。
如果您对Linux的RootKit很感兴趣,可以访问大鹰的主页,那有很多精彩的资料。
由于时间仓促及能力有限,翻译得不妥之处,还望斧正。
绪论----首先,像Back oifice和NetBus都不属于Rootkit。
它们是具有和PC-AnywhreSMS或其他的商用程序相同功能的业余版本。
如果你想远程控制一台工作站,可以向微软购买一套功能强大的SMS系统。
一个远程桌面/管理应用程序不是Rootkit。
什么是Rootkit?Rootkit是修改已经存在于系统内的可执行路径并具有特洛伊功能的程序集。
这些进程侵犯信任处理基础TCB)的完整性。
换句话说,Rootkit就是那些插入后门到已经存在的程序,修改或损坏已经存在的安全的系统。
- Rootkit可能会破坏一个用户在登录时的审核;- Rootkit允许任何人登录进系统,如果他们使用一个后门密码;- Rootkit可能会修改内核,它会允许任何人执行具有特别文件名的特权代码。
所有的可能性无法想像,没有边际,但是有一点可以肯定的就是“RootKit”将自己与已经存在的系统结构联系起来,因此它往往是在暗地里运行的。
而PC Anywhre那样的远程管理应用程序就仅仅是一个严密的应用程序。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
进 程 管 理 器
设 置 管 理 器
本 地 过 程 调 用
Configuratio n manager
Local process call
Plug and Play manager
Security reference monitor
Memory manager
Process manager
Object manager
添加串口(Serial Port),串口使用为\\.\pipe\com_1 选择为This end is the server和The other end is a virtul machine 在XP的启动引导文件boot.ini中添加 multi(0)disk(0)rdisk(0)partition(1)\WINDOWS="Microsoft Windows XP Professional (Debug Mode)" /noexecute=optin /fastdetect /debug /debugport=com1 /baudrate=115200
Explorer User application Subsystem DLLs
POSIX Windows DLLs
NTDLL.DLL User Mode Ring 3 Ring 0 System Service Dispatcher(系统服务) (Kernel mode callable interfaces)(执行体API)
Task Manager
Service control manager
Local Security Authority Winlogon Wininit Windows DLLs
Environment Subsystem
Windows
Services
Service host Print spooler Windows DLLs
用户层
驱动开发环境的搭建 Visual Studio + Windows Driver Kit + Windbg + VMware
VS作为IDE是默认作为应用层的开发环境,默认使用的是SDK, 所以使用VS作为驱动开发的IDE需要进行环境上的设置。
WDK相对于Win32的SDK而言,前者用于内核层开发,后者用于 用户层开发,两者有相当一部分内容是不可以共用的,而且即使存在 相同的函数,其函数的参数也是不一样的。 在Win32开发中,我们使用VS写代码和调试代码,而在驱动开发 中,VS仅仅用作写代码和静态查错,写完代码后使用WDK进行编译 和连接。 由于不像Win32中的程序相互之间是独立的,拥有各自的虚拟地 址空间和资源,一个程序出错不会影响到其他正在运行的程序,而在 内核中所有的地址空间和资源完全是共用的,一旦有一个内核文件出 错,那必定会导致操作系统的蓝屏。 所以我们在驱动开发中,对于驱动的调试和加载不在本机上实现,而 是在虚拟机中实现,调试驱动是用Windbg通过串口连接到虚拟机对 虚拟机上运行的整个系统作为一个程序进行调试。
3、驱动中的链表操作 (1)new和delete的重载 (2)使用自定义结构体 (3)WDK提供的结构体List_Entry
Part 1 基础知识
System Processes
Session manager Local session manager
Windows操作系统架构
Applications
typedef struct _KSERVICE_TABLE_DESCRIPTOR { PULONG_PTR Base;//SSDT的基地址 PULONG Count;//SSDT每个服务被调用的次数,一个指向数组的指针 ULONG Limit;//服务函数的个数 PUCHAR Number;//指向一个记录每个服务所需传递参数长度的数组的指针 } KSERVICE_TABLE_DESCRIPTOR, *PKSERVICE_TABLE_DESCRIPTOR;
Part 2 从最简单的驱动开始
1、最简单的驱动HelloWorld (1)编写最简单的驱动 (2)添加默认派遣例程 (3)为驱动添加设备和卸载设备 2、驱动的加载与启动 (1)使用工具 (2)命令行 (3)注册表 HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\services (4)自己编写Win32驱动加载程序LoadSys.exe
3、SSDT (1)读取SSDT中当前函数地址 (2)读出函数原地址 (3)突破Blue Screen,取消Windows内核只读保护,修改SSDT表。 (4)JMP 0xE9 Inline Hook初试 4、C还是C++? (1)函数调用约定__stdcall __cdecl (2)C和C++编译 (3)运行时函数Run Time Function
高级: 入口点:DriverEntry 设置校验和:是(/RELEASE) 基址:0x10000 随机基址:默认值 数据执行保护(DEP):默认值 命令行: 附加选项:/SECTION:INIT,D/IGNORE:4198,4010,4037, 4039,4065,4070,4078,4087,4089,4221 Vmware设置
I/O manager 缓 存 Device and 管 file system 理 器 drivers Windows USER, GDI Graphics drivers
Kernel Mode
System Threads
对 象 管 理 器
插 即 用 管 理 器即
全 引 用 监 视安
内 存 管 理 器
VS中的环境设置(以VS2008为例) 添加配置Driver VC++目录中 包含文件: D:\WinDDK\7600.16385.1\inc\api D:\WinDDK\7600.16385.1\inc\crt D:\WinDDK\7600.16385.1\inc\ddk 库文件: D:\WinDDK\7600.16385.1\lib\win7\i386 属性管理器 C/C++ 常规: 调试信息格式:C7兼容 警告等级:3级 将警告视为错误:是 优化: 优化:禁用 预处理器: 预处理器定义:WIN32=100;_X86_=1;WINVER=0x501;DBG=1 代码生成: 运行时库:多线程/多线程调试 缓冲区安全检查:否
高级: 调用约定:__stdcall 编译为:默认值 链接器: 常规: 输出文件:$(OutDir)\$(ProjectName).sys 启用增量连接:否 忽略导入库:是 附加库目录:D:\WinDDK\7600.16385.1\lib\win7\i386 输入: 附加依赖项:ntoskrnl.lib Hal.lib wdm.lib wdmsec.lib wmilib.lib ndis.lib MSVCRT.LIB LIBCMT.LIB 忽略所有默认库:是 清单文件: 启用用户账户控制(UAC):否 调试: 生成调试信息:是 生成映射文件:是 映射文件名:$(TargetDir)$(TargetName).map 系统: 子系统:本机(/SUBSYSTEM:NATIVE) 堆栈保留大小:262144 堆栈提交大小:4096 驱动程序:驱动程序(/DRIVER)
Part 3 派遣函数与内存管理
1、应用程序.exe与驱动.sys的通信 (1)IRP (I/O Request Package) (2)缓冲模式 (3)直接模式 (4)其他模式 (5)SSDT Hook进程保护的实现 2、内存管理 (1)物理内存、虚拟内存 (2)Ring3地址,Ring0地址 (3)内存管理API
Cache manager
Micro-Kernel(微内核) Hardware abstraction layer (HAL)硬件抽象层
OpenProcess调用过程
OpenProcess Kernel32.OpenProcess Ntdll.NtOpenProcess
Ntdll.KiFastSystemCall Sysenter中断 内核层 SSDT (System Service Descriptor Table) Ntoskrnl.NtOpenPr的 API 在这个系统服务描 述表(SSDT)中都存在一个与之相对应的服务,当我 们的应用程序调用 ntdll.dll 中的 API 时,最终会调 用内核中与之相对应的系统服务。 由于有了 SSDT,我们只需要告诉内核需要调 用的服务所在 SSDT 中的索引就 可以了,然后内 核根据这个索引值就可以在 SSDT 中找到相对应的 服务了,然后再由内核调用服务完成应用程序 API 的调用请求即可。
System Services Descriptor Table 系统服务描述符表
这个表将用户层的Win32 API和内核层的API连接起来。SSDT的全部 内容通过内核全局变量KeServiceDescriptorTable来完成。
在Windows Research Kit中的关于KeServiceDescriptorTable的定义。 \Windows Research Kernel\WRK-v1.2\base\ntos\inc\ke.h
在Windbg中的Symbol Search Path中添加 srv*D:\WinDDK\symbols*/download/symbols 建立Windbg的快捷方式,属性中目标为 D:\WinDDK\7600.16385.1\Debuggers\windbg.exe -b -k com:pipe,port=\\.\pipe\com_1,baud=115200,reconnect -y
Windows内核 和驱动进程保护
By Dream_Sky12
Part 1 基础知识 1、Windows操作系统架构,以OpenProcess为例介绍函数在整个操作系统的 调用过程。 2、驱动开发环境的搭建(Visual Studio+WDK+Windbg+VMware) 3、初步了解SSDT(System Services Descriptor Table系统服务描述符表) 4、makefile,sources文件