InfinityHook 实践纪录武侠版

admin 2022年12月9日10:03:41评论89 views字数 1850阅读6分10秒阅读模式

InfinityHook 实践纪录武侠版

本文为看雪论坛优秀文章

看雪论坛作者ID:慢热型


网上资料1:


在我折腾InfinityHook的时候我发现2004下系统没啥作用,原因是在2004系统上 WMI_LOGGER_CONTEXT->GetCpuClock已经不是rdtsc()函数了,而是一个叫做 EtwpGetLoggerTimeStamp的函数。

那我们试探下直接拉它看。
InfinityHook 实践纪录武侠版
网上资料:EtwpGetLoggerTimeStamp函数按照WMI_LOGGER_CONTEXT->GetCpuClock的值有如下操作:

大于3抛异常

等于3用rdtsc

////等于2用off_140C00A30 这里是140C01e00

等于1用KeQueryPerformanceCounter

等于0用RtlGetSystemTimePrecise


3,1,0都好说,但是这个2的off_140C00A30 这里是140C01E00。

看交叉引用。

InfinityHook 实践纪录武侠版

放大看:

InfinityHook 实践纪录武侠版

他是一个在data上,指向HalpTimerQueryHostPerformanceCounter的指针。

请看下图:
InfinityHook 实践纪录武侠版

请看下图:

InfinityHook 实践纪录武侠版

InfinityHook 实践纪录武侠版
追本溯源大概梳理下:

来源是这里写

InfinityHook 实践纪录武侠版

w 写入交叉引用,指出了修改变量内容的程序位置。

InfinityHook 实践纪录武侠版

这是来源
lea rax lpTimerQueryHostPerformanceCounter
mov qword ptr cs:off_140c01e00,rax

这是出接口
((ULONG64)PtrOff140c01e00) = (ULONG64)HookHalpTimerQueryHostPerformanceCounter;

总结是缘起缘灭。

思路整理下:


reinterpret_cast<uintptr_t>((uintptr_t)CkclWmiLoggerContext + OFFSET_WMI_LOGGER_CONTEXT_CPU_CYCLE_CLOCK) = 2;

这不就来了么
lea rax lpTimerQueryHostPerformanceCounter
mov qword ptr cs:off_140c01e00,hk函数

这是出接口
((ULONG64)hk函数) = (ULONG64)HalpTimerQueryHostPerformanceCounter;

总结移魂大法。



资料二:


再次伟大!

重操旧业再换个路也能到北京,条条大路通北京。

这两个指针其实就是得到系统时间。而且是唯一在HalpTimerQueryHostPerformanceCounter用到的指针。

如果之前的off_140C00A30是被PG监控的,这两个指针会不会被监控呢?能不能利用呢?

此外不仅这个off_140C00A30函数,还有几个在ETW上必call的函数指针,这些指针有没有被监控呢?

让我们跟踪这个HalpTimerQueryHostPerformanceCounter上的两个函数:

在HalpTimerQueryHostPerformanceCounter中,往下看:
InfinityHook 实践纪录武侠版
InfinityHook 实践纪录武侠版

InfinityHook 实践纪录武侠版
InfinityHook 实践纪录武侠版

微软在栈上初始化了一个数组,然后依次给这个数组赋值,根据赋值的信息,我们可以逆向推导出函数名字:
HalpTimerInitSystem 140c61f80

InfinityHook 实践纪录武侠版

第三个箭头在48的数组上没有截图到(就是追的数据其中之一)。
InfinityHook 实践纪录武侠版
划重点:
微软在栈上初始化了一个数组,然后依次给这个数组赋值,根据赋值的信息,我们可以逆向推导出函数名字。


人家的有函数名字,上面的不知道怎么搞,希望有大佬能具体教一下。修复函数我直接重命名。
InfinityHook 实践纪录武侠版
不会搞,无法重塑,就来个原图。

InfinityHook 实践纪录武侠版

从而得知如下信息:
InfinityHook 实践纪录武侠版
就从这个HvlGetQpcBias下手:
InfinityHook 实践纪录武侠版他会查询一个HvlpReferenceTscPage表,我们手动定位:

InfinityHook 实践纪录武侠版

mov cs:HvlpReferenceTscPage,rdi
替换这个表地址
mov cs:HvlpReferenceTscPage,函数地址

移魂大法走起。

发现都是在出接口 hook



InfinityHook 实践纪录武侠版


看雪ID:慢热型

https://bbs.pediy.com/user-home-837575.htm

*本文由看雪论坛 慢热型 原创,转载请注明来自看雪社区

InfinityHook 实践纪录武侠版



# 往期推荐

1.CVE-2022-21882提权漏洞学习笔记

2.wibu证书 - 初探

3.win10 1909逆向之APIC中断和实验

4.EMET下EAF机制分析以及模拟实现

5.sql注入学习分享

6.V8 Array.prototype.concat函数出现过的issues和他们的POC们


InfinityHook 实践纪录武侠版


InfinityHook 实践纪录武侠版

球分享

InfinityHook 实践纪录武侠版

球点赞

InfinityHook 实践纪录武侠版

球在看


InfinityHook 实践纪录武侠版

点击“阅读原文”,了解更多!

原文始发于微信公众号(看雪学苑):InfinityHook 实践纪录武侠版

  • 左青龙
  • 微信扫一扫
  • weinxin
  • 右白虎
  • 微信扫一扫
  • weinxin
admin
  • 本文由 发表于 2022年12月9日10:03:41
  • 转载请保留本文链接(CN-SEC中文网:感谢原作者辛苦付出):
                   InfinityHook 实践纪录武侠版http://cn-sec.com/archives/1454951.html

发表评论

匿名网友 填写信息