这个驱动本来准备端午节搞的,但后来端午节去了躺北京玩了几天,也就搁置了...最近连续花了4个晚上,大致把它搞的差不多了,有些收获...初学 window驱动,水平很菜,有些东西我也未必清明,加上3环的代码还没有吃透,期间也没有用调试器跟踪,全是IDA(F5)静态分析的,谬误在所难免, 高手请飘过,希望对菜鸟学习有点帮助.
1.SSDT检测
这个功能有三个IoControlCode与之对应,他们分别是22000fh(拷贝KeServiceDescriptorTable); 220007h(拷贝KeServiceDescriptorTable->ServiceTable);22000bh(恢复一个 ssdt hook),这个功能目前还不具备检测和恢复inline hook的功能
2.Shadow SSDT检测
这个功能实现和SSDT差不多,都是从KeSystemServiceDescriptorTableShadow入手,不过3环需要为每个平台配置一张函数名表(ssdt可以不配置函数名表,可以从ntdll.dll中收集),详细文章可以参见zhuwg兄弟写的<<shadow ssdt 学习笔记>>一文
3.进程
3.1 进程检测
IoControlCode是22001Bh,在检测之前会设置检测方式,然后根据检测方式进行检测.这个功能主要由 irp_mj_device_control_dispatch_function函数的is_22001Bh_list_process分支完成,这里集成了4种检测方法,大致如下:
3.1.1 基于PspCidTalbe的检测,这里rku对句柄表做了解析,对每个Object判定是不是EPROCESS,是则插入到输出列表 (icesword也有这中检测,不过在1.22中没有解析句柄表,而是用ExEnumHandleTable搞定这些) 详细代码见 list_process_in_2k_by_handle_table/list_process_in_not_2k_by_handle_table 函数
3.2.1 基于KiWaitListHead/KiWaitOutListHead的检测,这个检测方法很简单,关键是 KiWaitListHead/KiWaitOutListHead两个链表的获取, 详细代码见list_process_by_list_head函数
3.3.1 如果是xp系统则还会采用*淫**荡*的内存暴力搜索进程进行检测,这段代码看debugman的yykingking发过, 详细代码在list_process_by_search_memory_in_xp函数
3.4.1 rku还会inline hook SwapConte
1.SSDT检测
这个功能有三个IoControlCode与之对应,他们分别是22000fh(拷贝KeServiceDescriptorTable); 220007h(拷贝KeServiceDescriptorTable->ServiceTable);22000bh(恢复一个 ssdt hook),这个功能目前还不具备检测和恢复inline hook的功能
2.Shadow SSDT检测
这个功能实现和SSDT差不多,都是从KeSystemServiceDescriptorTableShadow入手,不过3环需要为每个平台配置一张函数名表(ssdt可以不配置函数名表,可以从ntdll.dll中收集),详细文章可以参见zhuwg兄弟写的<<shadow ssdt 学习笔记>>一文
3.进程
3.1 进程检测
IoControlCode是22001Bh,在检测之前会设置检测方式,然后根据检测方式进行检测.这个功能主要由 irp_mj_device_control_dispatch_function函数的is_22001Bh_list_process分支完成,这里集成了4种检测方法,大致如下:
3.1.1 基于PspCidTalbe的检测,这里rku对句柄表做了解析,对每个Object判定是不是EPROCESS,是则插入到输出列表 (icesword也有这中检测,不过在1.22中没有解析句柄表,而是用ExEnumHandleTable搞定这些) 详细代码见 list_process_in_2k_by_handle_table/list_process_in_not_2k_by_handle_table 函数
3.2.1 基于KiWaitListHead/KiWaitOutListHead的检测,这个检测方法很简单,关键是 KiWaitListHead/KiWaitOutListHead两个链表的获取, 详细代码见list_process_by_list_head函数
3.3.1 如果是xp系统则还会采用*淫**荡*的内存暴力搜索进程进行检测,这段代码看debugman的yykingking发过, 详细代码在list_process_by_search_memory_in_xp函数
3.4.1 rku还会inline hook SwapConte

本文详细介绍了Rootkit Unhooker驱动的逆向分析过程,涉及SSDT、Shadow SSDT的检测,进程检测与杀进程方法,内核模块和Stealth Code的检测技术,以及代码Hook的检测。作者分享了通过IoControlCode进行的各种功能实现,如检测和恢复SSDT Hook,遍历内核模块和内存搜索,以及进程保护措施。文章还提及了参考的相关资源和技术细节。
最低0.47元/天 解锁文章
1370





