首页
论坛
课程
招聘
InfinityHook 实践纪录武侠版
2022-11-9 13:51 15156

InfinityHook 实践纪录武侠版

2022-11-9 13:51
15156

网上资料1:

在我折腾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的指针
请看下图
图片描述
请看下图
图片描述
图片描述
追本溯源大概梳理下:
来源是这里写
图片描述
w 写入交叉引用,指出了修改变量内容的程序位置
图片描述

 

这是来源
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的数组上没有截图到(就是追的数据其中之一)
图片描述
划重点:
微软在栈上初始化了一个数组,然后依次给这个数组赋值,根据赋值的信息,我们可以逆向推导出函数名字:
微软在栈上初始化了一个数组,然后依次给这个数组赋值,根据赋值的信息,我们可以逆向推导出函数名字:
微软在栈上初始化了一个数组,然后依次给这个数组赋值,根据赋值的信息,我们可以逆向推导出函数名字:
人家的有函数名字,上面的不知道怎么搞有大佬叫我具体搞得么?修复函数我直接重命名
图片描述
不会搞 无法重塑 就来个原图 这个代码写的够烂的)
图片描述

 

从而得知如下信息:
图片描述
就从这个HvlGetQpcBias下手:
图片描述
他会查询一个HvlpReferenceTscPage表,我们手动定位:
图片描述

 

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

 

移魂大法走起

 

发现都是在出接口 hook

 

说白了就是绝世武功的练成,天下无敌!哈哈


[2022冬季班]《安卓高级研修班(网课)》月薪三万班招生中~

最后于 2022-11-9 17:53 被慢热型编辑 ,原因:
收藏
点赞8
打赏
分享
最新回复 (9)
雪    币: 1786
活跃值: 活跃值 (1633)
能力值: ( LV4,RANK:50 )
在线值:
发帖
回帖
粉丝
fengyunabc 活跃值 1 2022-11-9 14:05
2
0
感谢分享!
雪    币: 156
活跃值: 活跃值 (66)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
Hbruce 活跃值 2022-11-10 16:28
3
0
感谢分享!
雪    币: 5983
活跃值: 活跃值 (2295)
能力值: ( LV6,RANK:80 )
在线值:
发帖
回帖
粉丝
黑洛 活跃值 1 2022-11-10 18:10
4
0
牛逼
雪    币: 3743
活跃值: 活跃值 (3398)
能力值: ( LV6,RANK:80 )
在线值:
发帖
回帖
粉丝
0xC5 活跃值 1 2022-11-11 21:44
5
1
https://www.freebuf.com/articles/system/278857.html
雪    币: 732
能力值: ( LV1,RANK:0 )
在线值:
发帖
回帖
粉丝
RobertSS 活跃值 2022-11-14 18:29
6
0
感谢分享
雪    币: 623
活跃值: 活跃值 (254)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
一个懵懂的SB 活跃值 2022-11-15 09:04
7
0
https://github.com/FiYHer/InfinityHookPro
雪    币: 20
能力值: ( LV1,RANK:0 )
在线值:
发帖
回帖
粉丝
星谷白 活跃值 2022-11-26 01:19
8
0
你好,请问为什么我在虚拟机可用,在物理机就无效,同样的系统版本
雪    币: 703
活跃值: 活跃值 (3750)
能力值: ( LV3,RANK:20 )
在线值:
发帖
回帖
粉丝
慢热型 活跃值 6天前
9
0
星谷白 你好,请问为什么我在虚拟机可用,在物理机就无效,同样的系统版本
*g_GetCpuClock = (void*)1;  试试这个
雪    币: 20
能力值: ( LV1,RANK:0 )
在线值:
发帖
回帖
粉丝
星谷白 活跃值 6天前
10
0
慢热型 *g_GetCpuClock = (void*)1; 试试这个
也不行哈
游客
登录 | 注册 方可回帖
返回