揭示内核恶意软件行为的研究与实践
1. Rkprofiler内存标记问题及解决
Rkprofiler在内存标记过程中存在一些问题。在双向链表中,每个元素包含一个 LIST_ENTRY 类型的数据成员,其两个指针指向相邻元素的 LIST_ENTRY 成员。当标记一个列表元素后,恶意软件访问下一个元素时,Rkprofiler仅标记下一个元素的 LIST_ENTRY 成员,而不是标记整个元素及其类型。
为解决此问题,在预分析阶段,会为 SINGLE_LIST_ENTRY 和 LIST_ENTRY 数据成员标注列表元素的类型名称和偏移量。解析类型头文件时,生成器会将这些成员替换为指向列表元素的指针,并将偏移值存储在类型图中,以便监视器找到相邻元素的实际地址。
另外,Windows内核有时使用相对指针遍历列表,如内核函数 NtQueryDirectoryFile 的磁盘文件查询结果数据缓冲区。由于相对指针被定义为无符号整数,需要在内核类型头文件中标记这些相对指针,使Rkprofiler能识别并正确计算元素地址。
Rkprofiler还需处理Windows内核源使用的两种模糊数据类型:
- 联合(union) :在任何给定时间只包含多个可选成员之一,所需内存由最大数据成员决定。猜测联合在给定时间应使用哪个成员依赖于代码上下文,难以在Rkprofiler中自动化处理。
- 通用指针pvoid :可由开发
超级会员免费看
订阅专栏 解锁全文
2010

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



