众所周知,X大师的硬件检测功能很强,于是有了想分析下原理的想法。


经过分析,X大师分析硬件的方法有些复杂,要还原其功能,然后自己重写,工作量很大。所以采用调用X大师二进制文件接口的方法,获取硬件信息。下面着重介绍分析思路:
老规矩,先看X大师的日志文件,找到下面的信息:

有关键字GetOverviewJson,下面的信息是CPU、主板、供应商,说明是”硬件总览信息”对应的日志信息。
然后分析X大师的进程和文件,发现有下面几个进程:

其中ComputerZ_CN.exe是界面进程,ComputerZService.exe是个服务进程:

猜测ComputerZService.exe调用一些dll进行实际的硬件检测等功能,ComputerZ_CN.exe负责展示。
再看文件:

看名字ComputerZ_HardwareDll.dll像是实现硬件检测功能的DLL,需重点分析。
基于前面的日志文件,上IDA打开ComputerZ_HardwareDll.dll,搜索GetOverviewJson字符串:

找到引用的地方:

可以看到Machine、OS、CPU、Motherboard等字符串。说明此处正是”硬件总览信息”对应的代码位置。
首先想到的是直接构造参数调用此函数。但经过尝试,程序各种报错。想到是X大师在调用此函数前做了些初始化工作,而直接调用是没有经过初始化的。后面也分析出了好多初始化操作,补上后,程序还是报错。
于是尝试调用X大师靠上层的一些函数接口,也就是一开始扫描硬件就会调用的函数。
看ComputerZ_HardwareDll.dll的导出函数:

看名称,就一个CreateHdwInfo函数是创建硬件信息的,应该是扫描硬件前调用的。并没有扫描的函数。
ComputerZ_HardwareDll.dll找不到,我们就去调用ComputerZ_HardwareDll.dll的exe,也就是ComputerZService.exe中去找。看它调用了 ComputerZ_HardwareDll.dll哪些函数。IDA中搜“ComputerZ_HardwareDll.dll”关键字:

可以看到并未搜索到,但是这个字符串是存在的:


看到是调用了dll的CreateHdwInfo和hardware_info_main函数。hardware_info_main函数在dll中如下:

我们调用hardware_info_main时,第一个参数需要传this指针,至于this指针应该填充什么,也是在IDA中分析调用的上下文得出的。下图是分析出填充的this指针内容:

ComputerZService.exe最后调用了:


在sub_34D680函数中调用了ComputerZ_HardwareDll.dll扫描函数。为什么是
(*(*v14 + 0x1C))(); 这里调用了扫描函数呢?答案是在ComputerZ_HardwareDll.dll的g_GetOverviewJson(识别出来后重命名的)处下断点,然后栈回溯到ComputerZService.exe的调用空间:

于是写代码依次调用这3个函数,并在g_GetOverviewJson中Hook一下,就能拿到"硬件总览信息”了:


拿到本机的信息如下:

最简单、最直接的方法是使用Cheat Engine搜索数值,然后对数值下硬件写入断点,就能定位到代码位置。
因为GPU的使用率和温度数值是变化的:

用CE的First Scan、Next Scan可以搜索到变化的值。所以是最简单的方法:

搜索到后定位到下图的代码处:

于是Hook就可以拿到GPU的使用率和温度数据了。
在CE搜索CPU使用率时,刚开始对搜索结果进行了排除,只留了一个数据。导致定位时没找到地方,只找到了ComputerZService.exe对数据的处理部分:

其实是3个数据:

依次查看这3条数据:在数据位置点击右键->find out what writes to this address.

[培训]Windows内核深度攻防:从Hook技术到Rootkit实战!
最后于 2025-6-20 16:29
被yirucandy编辑
,原因: