C++ 获取Windows还原点列表(2)

上一节是获取了系统磁盘上系统还原点文件,成功解决了WMI和PowerShell无法获得系统还原点的问题,但是还原点多余的情况依然无法解决。这几天看了室友的《加密与解密 第三版》对逆向有了很浓厚的兴趣,练手就准备用这个程序。

系统还原点的程序是C:\Windows\System32\rstrui.exe

使用IDA和OD。

历时一周,终于有了头绪,rstrui.exe里面有一个类的静态函数(CSxFunctionTracer::CSxFunctionTracer()),感觉是用来打印日志的,每个函数里面都会调用该函数,并且写上调用函数的函数名。经过寻找,找到2个关键函数:

GetSystemId
_FilterRestorePointsBySystemId

根据函数名看出来是获得系统ID后,根据系统ID进行判断,看样子上一篇文章中获取的文件里应该是有系统ID的,现在只要能获取系统ID就OK了。

看了看GetSystemId的实现,代码量不多,看样子就是一个COM接口:
C++ 获取Windows还原点列表(2)_第1张图片

下图代码是调用COM接口的函数:
IDA

___guard_check_icall_fptr这函数不认识,但是查了下资料,是用来检查函数。

然后看看大概扔了什么参数进去:

你可能感兴趣的:(Windows)