WIN10 x64 Patch Guard 学习笔记
0x0 前言
笔记学习会持续更新
0x1 基础理论
绝大部分 PG检测(如果不是全部)基于 context 结构体;
context 包括:一小段自解密代码
要用到的系统API指针
重要的 API 代码 copy
INITKDBG 节的copy
要检测的目标地址,大小,chucksum 构成的结构体数组…
context 大部分时间是加密的;
context 的数据源来自于系统初始化时的最初数据
context 的地址,作为系统线程,DPC 等的参数,随着调度被传递;
context 的验证逻辑执行周期约为 2min, 但是每次检测的目标区块随机;
context 采用接力的方式调度,
自解密->检测逻辑->复制自身到新的context->加密新的context->销毁旧的context;
context 检测逻辑的调用源具有随机性,在 PG初始化时决定。
0x2 攻击手法
1.静态补丁 (比较简单 好用)缺点需要重启
VT 实现 读/执行 分离 (前提拥有非常稳定 高权限的VT 需要技术门槛)
定位所有的context调用源, 针对性 patch
基于加密算法分析,攻击 context 的内容
(1) 搜索内存, 粗筛 context;
(2) 基于加密算法特性, 定位 context;
(3) 解密context, patch 检测逻辑, 加密写回 context.
设置 context 页面不可执行, 接管页面异常处理 (容易误伤)
(1)搜索内存, 粗筛 context;
(2) hook PageFault, 接管执行保护异常;
(3) 在异常处理中定位 context, 阻止检测逻辑.