InfinityHook 实践纪录武侠版
2022-12-9 18:6:18
Author: 看雪学苑(查看原文)
阅读量:11
收藏
本文为看雪论坛优秀文章
看雪论坛作者ID:慢热型
在我折腾InfinityHook的时候我发现2004下系统没啥作用,原因是在2004系统上 WMI_LOGGER_CONTEXT->GetCpuClock已经不是rdtsc()函数了,而是一个叫做 EtwpGetLoggerTimeStamp的函数。那我们试探下直接拉它看。
网上资料:EtwpGetLoggerTimeStamp函数按照WMI_LOGGER_CONTEXT->GetCpuClock的值有如下操作:
大于3抛异常
等于3用rdtsc
////等于2用off_140C00A30 这里是140C01e00
等于1用KeQueryPerformanceCounter
等于0用RtlGetSystemTimePrecise
3,1,0都好说,但是这个2的off_140C00A30 这里是140C01E00。
他是一个在data上,指向HalpTimerQueryHostPerformanceCounter的指针。请看下图:
这是来源
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中,往下看:
微软在栈上初始化了一个数组,然后依次给这个数组赋值,根据赋值的信息,我们可以逆向推导出函数名字:
HalpTimerInitSystem 140c61f80
第三个箭头在48的数组上没有截图到(就是追的数据其中之一)。
划重点:
微软在栈上初始化了一个数组,然后依次给这个数组赋值,根据赋值的信息,我们可以逆向推导出函数名字。
人家的有函数名字,上面的不知道怎么搞,希望有大佬能具体教一下。修复函数我直接重命名。
从而得知如下信息:
他会查询一个HvlpReferenceTscPage表,我们手动定位:
mov cs:HvlpReferenceTscPage,rdi
替换这个表地址
mov cs:HvlpReferenceTscPage,函数地址看雪ID:慢热型
https://bbs.pediy.com/user-home-837575.htm
*本文由看雪论坛 慢热型 原创,转载请注明来自看雪社区
文章来源: http://mp.weixin.qq.com/s?__biz=MjM5NTc2MDYxMw==&mid=2458487199&idx=2&sn=b4ab6eafa1a77b4d616c74566075a0a5&chksm=b18eb91586f9300351875a00c577613618d68bff9ef33ab80e316db7c21e914afdfc4e836851#rd
如有侵权请联系:admin#unsafe.sh