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
1965



被折叠的 条评论
为什么被折叠?



