资源详情
一、基础篇--简单驱动模型
1.1 DDK及VC6.0/7.0/9.0的安装
1.1.1 安装VC++6.0 -1课
1.1.2 安装VS2003-VC++7.0-2课
1.1.2 安装VS2008-VC++9.0-3课
1.1.3 安装VC助手-4课
1.1.5 安装DDK-5课
1.2驱动开发VC环境安装配置
1.2.1 VC6环境编译驱动-6课
A、VC6驱动编译配置
B、VC6集成环境下编译驱动
1.2.2 VS2003环境编译驱动-7课
A、VC7驱动编译配置
B、VC7集成环境下编译驱动
1.2.3 VS2008环境编译驱动-8课
A、VC9驱动编译配置
B、VC9集成环境下编译驱动
1.3 NT式驱动
1.3.1编写一个名为DDK_HelloWorld简单的驱动-9课
A、VC6集成环境下书写代码
驱动入口函数DriverEntry
入口函数参数DriverObject和RegistryPath
B、书写SOURCES文件
C、书写makefile文件
D、用DDK-Build环境编译
1.3.2为DDK_HelloWorld添加卸载例程-10课
A、输出调试信息-KdPrint
B、认识PDRIVER_OBJECT结构
C、注册驱动卸载例程
D、卸载例程回调函数构建
E、查看驱动调试信息
1.3.3 用工具过驱动保护(确定学习方向)-11课
A、用户层至内核的隐秘通道
B、浅谈过保护原理
C、实战过XX游戏驱动保护,让OD,CE正常附加调试
D、小结
1.3.4为DDK_HelloWorld添加设备例程-12课
A、相关内核API介绍
B、重要数据结构驱动对象DRIVER_OBJECT
C、重要数据结构设备对象DEVICE_OBJECT
D、添加创建设备的例程
E、用工具查看驱动及驱动设备
1.3.5VM+windbg安装 13课
A、安装VM虚拟机
B、在VM里安装操作系统
C、安装windbg
D、windbg和VM的相关配置
E、启用windbg双机调试
1.3.6实战用windbg调试自己驱动DDK_HelloWorld -14课
A、用户层调试和内核调试区别
B、如何下断跟踪
C、F10步过和F11步进
D、查看寄存器相关信息
E、源代码调试与机器码调试
1.3.7DDK_HelloWorld卸载例程细化-15课
A、再看DEVICE_OBJECT结构
B、删除符号链接
C、删除设备
D、测试卸载例程
1.3.8为DDK_HelloWorld添加默认派遣例程-16课
A、初识IRP
B、一个简单的IRP处理函数
C、IRP.IoStatus结构
D、IoCompleteRequest函数
1.4 编写自己的驱动过游戏保护(以11课分析为例)
1.4.1需要具备的理论知识-17课
A、了解SSDT结构
B、由SSDT索引号获取当前函数地址
C、如何获取索引号
D、获取起源地址-判断SSDT是否被HOOK
E、如何向内核地址写入自己代码
1.4.2读出SSDT表当前函数地址-18课
A、引用KeServiceDescriptorTable表
B、通过ServiceTableBase+偏移读出当前函数地址
C、用windbg测试读取的值
1.4.3读出原函数地址-19课
A、集成上一课代码至GetNt_CurAddr函数
B、MmGetSystemRoutineAddress
C、书写GetNt_OldAddr函数
D、测试结果
1.4.4JMP地址转换公式推导-20课
A、JMP地址转换公式推导
B、计算实际地址函数RealJmp_Addr
C、测试
1.4.5绕过SSDT驱动保护-21课
A、去掉页面保护
B、写入In Line HOOK代码
C、用OD附加测试效果
D、反HOOK代码
1.6 NT式驱动的安装-22课
A、OpenSCManager
B、CreateService
C、OpenService
D、StartService
E、CloseServiceHandle
F、集成到loadNTDriver函数
1.7 NT式驱动的卸载-23课
A、卸载驱动流程
B、内核函数DeleteService
C、内核函数ControlService
D、构建UnLoadSys函数
E、测试并查看调试信息
1.8 驱动代码中C和C++代码区别-24课
A、函数调用约定
B、C和C++编译方式
C、用C++方式编译驱动
D、C代码升级至C++
E、优化21课的代码
1.9、再谈VC环境配置-25课
A、编译选项C/C++ Project Option
B、链接选项Link Project Option
C、测试所编译驱动
二、中级篇
2.1、手动加载NT式驱动(非工具)-26课
A、注册表
B、手动运行驱动
C、手动停止驱动
2.2、应用程序与驱动交互访问(缓冲模式)
2.2.1、数据交换原理-27课
A、用户层传入数据
B、驱动层接收数据
C、驱动层回传数据级用户层
2.2.2、实战EXE和SYS通信-28课
A、用户层传入数据EXE部分代码
B、驱动层接收数据并处理SYS部分代码
C、驱动层返回数据至用户层
D、用户层获得处理结果
2.3、应用程序与驱动交互访问(直接模式)-29课
A、用户层传入数据EXE部分代码
B、驱动层接收数据并处理SYS部分代码
C、驱动层返回数据至用户层
D、用户层获得处理结果
E、预编译指令#pragma #ifndef #endif
2.4、应用程序与驱动交互访问(其它模式)-30课
A、用户层传入数据EXE部分代码
B、驱动层接收数据并处理SYS部分代码
C、驱动层返回数据至用户层
D、用户层获得处理结果
E、驱动中的异常处理
2.5、再谈SSDT HOOK驱动保护原理-31课
A、初识内核进程相关结构
B、内核函数PsGetCurrentProcess
C、进程保护原理
D、实例测试
2.6、自写驱动保护XX进程-32课
A、HOOK SSDT
B、构建自己的内核函数
C、构建Hook和UnHook函数
D、修改EXE和SYS对应源代码(实现所谓保护)
E、测试效果
2.7、驱动中的内存管理-33课
A、 物理内存
B、 虚拟内存
C、 Ring0地址和Ring3地址
D、 驱动程序和进程的关系
E、 分页和非分页内存
F、 分配内核内存
2.8、内存管理相关内核API-34课
A、RtlCopyMemory,RtlCopyBytes和RtlMoveMemory
C、RtlZeroMemory和RtlFillMemory
D、RtlEqualMemory
E、ExAllocatePool和 ExFreePool
F、重载new和delete操作符
2.9.1在认识链表结构exe部分-35课
A、链表结构
B、链表的初始化
C、在链表中插入数据(结点)
D、链表的遍历
2.9.2在驱动中使用链表sys部分-36课
A、链表结构
B、链表的初始化
C、在链表中插入数据(结点)
D、链表数据的删除
E、链表的遍历
2.8其它
数据类型
返回状态值
检查内存的可用忄生
异常处理try-except
异常处理try-finally
断言
2.9内核函数
2.9.1内核模式下的字串操作
ASCII字符串和UNICODE字符串
ANSI_STRING字符串和UNICODE_STRING字符串
字符串的初始化与销毁
字符串复制
字符串比较
字符串转化成大写
字符串与整型数字相互转换
ANSI_STRING字符串和UNICODE_STRING字符串相互转换
2.9.2内核模式下的文件操作
文件的创建
文件的打开
获取和修改文件属忄生
写文件和读文件
2.9.3 IRP和派遣函数
IRP和IRP类型
对IRP函数的处理
编写通用的IRP派遣函数
跟踪IRP的利器IRPTrace
三、进阶篇(进程保护,RootKit)
3.1应用层勾子
IAT HOOK
InLine HOOK
3.2内核勾子
3.2.2 Shadow SSDT
3.2.3 InLine HOOK
3.2.3 object HOOK
3.2.4 IDT中断描述符表
3.2.5 IDT HOOK
四、高级篇--驱动逆向
4.1单机调试驱动windbg+vmware
4.1.1游戏反取色分析
4.1.2游戏进程隐藏分析
4.1.3游戏进程保护分析
4.2实战游戏驱动保护分析
4.2.1 再谈过保护原理
4.2.2 XX游戏XX 驱动分析
4.2.3 XX游戏XX 驱动分析