FSD HOOK与SSDT HOOK恢复简单思路
File System Driver文件系统驱动程序,分为本地FSD和远程FSD。
-----------------------------------------------------------------------------------------
首先是FSD HOOK。
网上比较容易找到的是sudami对360superkiller的逆向,映射大小计算上好像有些错误。
这里贴出我的想法,备忘 :)
1. 向ZwQuerySystemInformation传递11号参数,获得SYSTEM_MODULE_INFORMATION结构,通过结构查询ntfs和fastfat的基地址(lpModuleBase)。
2. 通过指定路径打开ntfs.sys和fastfat.sys对应的磁盘文件
L”\\SystemRoot\\system32\\drivers\\ntfs.sys”
L” \\SystemRoot\\system32\\drivers\\fastfat.sys”
3. 根据PE格式获得文件中镜像基地址(imageBase)
4. 使用特征码搜索ntfs.sys和fastfat.sys设置派遣路径的指令。
用IDA反汇编ntfs.sys(fastfat.sys类似)见指令和对应的机器码如下:
esi指向DriverObject结构,指令字结构分别为
c7 46 XX YY YY YY YY
c7 86 XX XX XX XX YY YY YY YY (XX为esi的相对偏移,YY为真正的函数地址)
因此可以通过特征搜索此段指令:
获得指令后,根据上述结构分别获取IRP派遣序号index和原始派遣函数地址addr。
在这里真正index的计算方法如下:
同时由于ntfs.sys实际加载的位置和pe文件中存储的位置不同,所以需要重定位:
至此获得了派遣函数的原始路径。
5. 使用ObReferenceObjectByName分别获得
L”\\FileSystem\\Ntfs”
L”\\FileSystem\\Fastfat”
对应的驱动对象(DriverObject)。
将驱动对象中的派遣函数地址与从pe文件读取的地址进行比对,如果发现不同和进行修复。
-----------------------------------------------------------------------------------------
SSDT HOOK
1. 确定windows所使用内核文件时ntoskrnl.exe还是ntkrnlpa.exe。
当电脑内存大于512MB时windows开启PAE使用ntkrnlpa.exe否则使用ntoskrnl.exe这里并没有考虑支持多核处理器的内核。
所以我们只要检测PAE是否开启就能确定内核文件名了。
当cr4寄存器的5 bit置为时说明开启了PAE。
2. 将内核文件映射如内存,首地址为krnlImgBase。
3. 向ZwQuerySystemInformation传递11号参数,得到SYSTEM_MODULE_INFORMATION结构数组,遍历数组得到系统内核在内存中的基地址krnlBase。
4. 根据PE格式解析映射到内存中的文件,获得原始SSDT。
方法是:首先获得系统导出的SSDT表地址,减去基地址后得到SSDT的RVA
找出内存映射的内核文件的节表。
搜索SSDT的RVA处在文件那哪个节中。
内存映射文件的SSDT = SSDT RVA – 所在节 RVA + 所在节 RawOffset + krnlImgBase
5. 对比原始SSDT与当前SSDT内容,不同则替换。
这里存在一个重定位问题需要注意。
代码如下:
FSD HOOK与SSDT HOOK恢复简单思路相关推荐
- Windows内核API HOOK 之 Inline Hook
来源:CSDN 作者:daiwen 名字起得好,Inline hook,乍一听,似乎很高深.此处的Inline,我以为,意指将汇编代码直接写入内核API的内存区域.Inline Hook不像用户态 ...
- 进程隐藏与进程保护(SSDT Hook 实现)(二)
文章目录: 1. 引子 – Demo 实现效果: 2. 进程隐藏与进程保护概念: 3. SSDT Hook 框架搭建: 4. Ring0 实现进程隐藏: 5. Ring0 实现进程保护: 6. 隐藏进 ...
- SSDT Hook的妙用-对抗ring0 inline hook
******************************************************* *标题:[原创]SSDT Hook的妙用-对抗ring0 inline hook * ...
- 进程隐藏与进程保护(SSDT Hook 实现)(二) 转载自 Zachary.XiaoZhen - 梦想的天空
文章目录: 1. 引子 – Demo 实现效果: 2. 进程隐藏与进程保护概念: 3. SSDT Hook 框架搭建: 4. Ring0 实现进程隐藏: 5. Ri ...
- (52)系统调用阶段测试——基于 SSDT HOOK 的 FindWindowA 监视器
一.项目说明 SSDT HOOK 内核函数我们已经会了,请看这两篇博客: SSDT HOOK 实现进程保护 补充内容:SSDT HOOK 模板 此次考试和 hook NtOpenProcess 或 N ...
- (51)SSDT HOOK 实现进程保护
一.回顾 在前面的课程里,我们逆向分析了 KiSystemService / KiFastCallEntry 的部分代码,我们发现这两个函数找系统服务表 SystemServiceTable 的方法是 ...
- (50)补充内容:SSDT HOOK 模板
代码 下面的驱动代码ssdt hook了NtOpenProcess函数,可以监视打开进程的操作. #include <ntddk.h> #include <ntstatus.h> ...
- 也谈SSDT Hook(二)
一.实战篇 本不想摘代码,既然实战,就不多讲废话了,还是贴上吧,谁都有违背原则的时候:). 代码一:经典案例,替换NtQuerySystemInformation,列取所有查询到的进程名,我使用修改C ...
- 进程隐藏与进程保护(SSDT Hook 实现)(一)
文章目录: 1. 引子 – Hook 技术: 2. SSDT 简介: 3. 应用层调用 Win32 API 的完整执行流程: 4. 详解 SSDT: 5. SSDT Hook 原理: 6. 小结: ...
最新文章
- 构建商品评价的分类器
- Intent Android 详解
- 【翻译】CodeMix使用教程(三):Emmet
- 关于STL 容器的嵌套使用, 小试牛刀
- java ftp上传文件 linux_Java实现把文件上传至ftp服务器
- 你想象中的Task后续,很简单?
- coursera 《现代操作系统》 -- 第五周 同步机制(1)
- Java7并发编程指南——第二章:线程同步基础
- Android 功耗(4)---MTK平台待机功耗分析流程
- C++的STL标准库学习(queue)队列(第四篇)
- 函数调用的汇编语言详解
- 计算机术语hpp,HPP(计算机术语)_百度百科
- 倒立摆的实现 1.前期准备
- 杂题收录+简要题解3【杭电多校】
- python图片剪裁(图片按四个点坐标剪裁)
- 微信小程序开发动感十足的加载动画--都在这里!
- 狗年大作狗文化,吉祥送进千万家!丰收、兴旺、欢乐的景象。(图集)
- stcoder Splatter Painting 记忆化搜索
- [二叉树路径总和] 一杯茶一包烟,一个递归转一天
- JSP高校信息管理系统myeclipse开发sql数据库web结构计算机java编程