ICode9

精准搜索请尝试: 精确搜索
首页 > 系统相关> 文章详细

Windows内核(游戏逆向)

2022-06-28 22:31:18  阅读:192  来源: 互联网

标签:逆向 Windows 线程 内存 驱动 APC 内核



Windows内核上目录:
https://www.processon.com/view/link/62218fc563768907728d5d02#map
Windows内核下目录:
https://www.processon.com/view/link/626ff351e0b34d074547d58d#map

Windows内核:
本课程并不涉及到游戏数据的分析
仅仅是通过学习Windows(32/64)位内核运行原理相关的知识来绕过或是突破游戏的保护
对于本套课程作测试用到的程序或者游戏,仅仅是为了演示效果
如构成侵权,及时联系我删除对应视频
邮箱service@yxfzedu.com
QQ:851920120

- Windows内核总的目录学习路线
- 前提知识:C/C++,汇编,PE结构
- 工具:X64/86dbg,CE,IDA,Windbg,DebugView等
- 环境:VMware,Win7 32 ,Win10 64(1809) 双机调试及符号下载

- 参考资料:IA-32架构软件开发人员手册_卷3(Intel Architecture 32bit简称,即英特尔32位体系架构)


内核上和下总共22个章节


Windows内核(上)共有九章

第一章:保护模式
主要学习CPU运行原理,Windows操作系统是如何根据CPU的规则来写操作系统,
内容包括利用段的机制三环进入零环各个知识点的讲解,如何利用CPU提供的各种门进行提权,
包括调用门,中断门,陷阱门,任务门,及任务段。
利用页的机制如何更细粒度的保护内存
包括10 10 12分页,2 9 9 12分页
及各个知识点的实验

第二章:驱动开发
主要学习驱动的开发,常用的一些函数
驱动蓝屏分析
驱动签名

第三章:系统调用
熟悉Windows三环API到Windows内核的执行流程,清晰的了解调用细节
是在游戏对抗中不可缺少的技术点
自写三环API(让调试器(OD,CE)断点无效)
SSDT HOOK(让调试器(OD,CE)无法打开进程)

第四章:进程线程
对Windows内核进程和线程讲解,
通过分析关键函数SwapContext从本质了解线程进程,了解其运行原理,
包括线程切换,强杀进程,进程挂靠等技术原理的讲解及代码的实现

第五章:句柄表
主要学习全局句柄和私有句柄,
全局句柄保护进程,私有句柄提权,
私有句柄降权,Object回调,
分析游戏图标不显示原因
解决DNF,CF,PUBG游戏图标显示问题等

第六章:APC
- APC:异步过程调用(Asyncroneus Procedure Call)
- 一句话解释APC:就是A线程提供一个函数,让B线程去执行,就是APC。
- 完整一点解释APC:A线程提供一个函数,插入到B线程,B线程在某个时刻,满足某些条件下就会执行APC。
- 怎么控制一个线程? 插入APC
- 谁插入的apc -- 别的线程插入的
- 插入到哪里 -- Ethread 有两个队列,一个是三环的 一个零环的
- 队列的特点 后进先出
- 想让apc做三环的事情就先到三环队列里,想让apc做零环的事情,就写到零环队列里。
- 目标:线程
- APC能做出的功能:
- 内存读写 (测试程序:DNF)
- 远程CALL (测试程序:DNF)
- 注入 (测试程序:DNF)

第七章:系统回调
主要是讲解Windows系统为我们提供的回调机制
来监控进程,线程,加载模块,注册表操作
并且通过回调函数来操作它
例如禁止打开指定进程
禁止加载指定模块
锁定注册表等操作

第八章:读写项目
- 读写内存的几种方式
包括:附加进程读写:通过进程挂靠读写内存
MDL映射读写:通过目标虚拟地址计算出物理地址,然后根据物理地址映射出一个新的虚拟地址,
然后对这个新的虚拟地址就行读写操作
内核APC读写:用内核APC对内存进行读写
- 读到内存之后怎么复制
- ReadProcessMemory -- MmCopyVirtualMemory
- 驱动层的部分 DLL


第九章:封装驱动到三环
- 1.把驱动文件写到三环项目中
- 2.加载驱动卸载驱动
- 3.驱动通信加上
- 4.封装读写功能 (导出函数)
- 5.易语言模块

 

 

Windows内核(下)共有十三章

第十章:内存管理
- Windows内存管理主要学习什么
- 线性地址是如何管理的
- 物理地址是如何管理的
- 缺页异常解决了什么问题
- 堆,栈这些内存是怎么申请的

- Windows内核情景分析 第三章

- 不管什么程序,除了程序代码本身所占用的空间外,程序在运行过程中总得使用一定的内存空间,因为数据也要占用空间。这些存储数据的内存空间大致可分为三类:
- 全局变量:编译工具链接的时候就静态的分配好了
- 局部变量:调用子函数的时候,在栈上分配
- 通过malloc分配,可以通过free释放,重复利用

- 每个进程都有4GB的空间,但是这4GB空间并不是都在使用,有没有一个地方在记录着哪些地址空间已经使用了,哪些没有使用?

- 肯定有一个地方在记录

- 怎么记录线性地址是否是可以用的?

- 每个进程都有自己的线性地址管理


第十一章:X64汇编
X64新增的寄存器
VS集成64位汇编环境
64位汇编传参问题
汇编里面调用外部函数
全局变量定位

第十二章:X64调用流程
前提知识:
保护模式,系统调用

参考资料:
x86x64体系探索及编程 作者:邓志

64位段描述符
64位调用门

第十三章:X64页表拆分
64位下线性地址的分页模式
设置PTE,PDE的no_execute属性,达到躲避游戏检测等问题
主要内容包括:
PML4T(Page Map Level-4 Table):4KB 包含512个PML4E
PDPT(Page Directory Pointer Table):4KB大小,包含512个PDPE
PDT(Page Directory Table):4KB大小,包含512个PDE
PT(Page Table):4KB大小,包含512个PTE结构

大页:1G && PDPTE.ps== 1
中页:2M PDE.ps == 1 && PDPTE.ps==0
小页:4K PDE.ps == 0 && PDPTE.ps==0

参考资料:x86x64体系探索及编程

第十四章:X64物理地址映射
主要实现
Win7 X64物理地址映射
Win10 X64物理地址映射

第十五章:远程CALL(用户APC)
了解什么是远程CALL
远程CALL能做什么
实现远程CALL的几种实现方式
APC的方式实现远程CALL的具体实现
DNF喇叭功能测试

第十六章:远程CALL(劫持线程)
以劫持线程的方式实现 远程CALL
包括劫持原理,代码实现
获取主线程
挂起线程函数定位
恢复线程函数定位
获取当前线程RIP
构建shell code
劫持RIP及修复返回地址
测试DNF喇叭公告

第十七章:注入技术(用户APC)
注入技术:
包括三种方式:
创建线程注入
APC注入
劫持线程注入

以APC的方式实现无模块注入DLL
整体的一个流程:
1.整合APC代码
2.DLL转换成二进制
3.整合申请内存代码
4.整合内存执行DLL代码 malloc
5.替换申请内存地址
6.测试往DNF注入DLL

第十八章:注入技术(劫持线程)
以劫持线程的方式实现无模块注入

无痕注入:
1.没有线程
2.申请的内存是没有痕迹 (你让游戏保护查不到你的内存)
3.没有模块信息

1.整合劫持线程代码
2.构建shell code
3.劫持RIP
4.抹去PE标记
5.测试往DNF,PUBG注入DLL
6.分析并解决无法注入到PUBG问题


第十九章:注入技术(创建线程)
1.创建线程 隐蔽性不好 线程内核对象 -
白名单模块:
系统的dll
游戏本身的dll


2.APC 插入一个用户apc - 找个线程 -等待某个时机+某些条件满足
3.劫持线程 获取主线程-初始化栈-Trapframe-rip

APC与劫持线程 共同点:
隐蔽性好

1.拆分下大概流程
2.查找内核中创建用户线程函数
3.测试线程函数
4.整合无模块注入相关代码
5.处理线程-伪装线程
6.处理线程-创建线程回调禁用掉
7.处理线程-线程隐藏
8.解决无法注入到DNF问题


第二十章:云下发
原理:
加载驱动的时候从服务器下载驱动,实现动态加载驱动,每次特征码都不一样

阿里云 腾讯云 华为云 京东云 百度云
价格:
配置:内存:16G CPU 4 宽带 10M 5M

1.VS 驱动开发环境
2.驱动签名工具

 

1.云下发所需环境,服务器选择等

2.VS自动编译项目代码实现

3.服务端安装Nginx

4.编写自动VMP脚本

5.客户端代码实现从服务器下载驱动


第二十一章:异常
学习异常的主要目的就是为了软件调试
在调试软件的时候,目标程序为什么断点可以断下来
它的本质就是触发了异常,在异常处理函数中有个死循环,在等待用户的指令
我们这一章的异常,主要就是讲解这个异常的记录,异常的分发,异常的处理整个流程


第二十二章:软件调试
了解软件调试的整个流程,调试器与被调试程序是怎么进行联系的,建立联系之后又是怎么进行对调试
事件采集以及怎么对调试事件进行处理的,Int 3断点,内存断点,以及硬件断点的原理,以及自写调试功能
实现一个调试器调试程序的一个流程。这章学完也是为了以后自建调试体系作铺垫。

标签:逆向,Windows,线程,内存,驱动,APC,内核
来源: https://www.cnblogs.com/yxfzedu/p/16421463.html

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有