C++ 获取Windows还原点列表(2)
来源:互联网 发布:淘宝客服可以用手机吗 编辑:程序博客网 时间:2024/06/05 06:54
上一节是获取了系统磁盘上系统还原点文件,成功解决了WMI和PowerShell无法获得系统还原点的问题,但是还原点多余的情况依然无法解决。这几天看了室友的《加密与解密 第三版》对逆向有了很浓厚的兴趣,练手就准备用这个程序。
系统还原点的程序是C:\Windows\System32\rstrui.exe
使用IDA和OD。
历时一周,终于有了头绪,rstrui.exe里面有一个类的静态函数(CSxFunctionTracer::CSxFunctionTracer()),感觉是用来打印日志的,每个函数里面都会调用该函数,并且写上调用函数的函数名。经过寻找,找到2个关键函数:
GetSystemId_FilterRestorePointsBySystemId
根据函数名看出来是获得系统ID后,根据系统ID进行判断,看样子上一篇文章中获取的文件里应该是有系统ID的,现在只要能获取系统ID就OK了。
看了看GetSystemId的实现,代码量不多,看样子就是一个COM接口:
下图代码是调用COM接口的函数:
___guard_check_icall_fptr这函数不认识,但是查了下资料,是用来检查函数。
然后看看大概扔了什么参数进去:
从右下角的堆栈区能看出来第二个参数是一个Unicode编码的字符串,内容是C:\Windows\,
根据上面IDA的分析代码,这个函数的三个参数第一个是查询到的接口指针,第二个是路径名,第三个是一个DWORD*类型的变量。看样子第三个 DWORD* 变量就是存放系统ID的地方,监视内存0x034568F4,然后执行该函数,发现数据有改动:
有16字节的数据被修改,可见这个就是系统ID,然而并不知道这个字符串代表的含义,自己写代码来试试这个接口能不能用:
很神奇,成功获取到了,然后VS居然还给出了函数原型:
CSpp::GetSystemId(unsigned short const *, struct _GUID*)
原来系统ID是GUID,妥妥的,我也来试试:
居然提示我找不到指定路径。。。好吧,参数明明扔的一样,居然给我说找不到,行,那我自己来。用OD单步进入。
在一个
call 6935833D
之后,拿到了系统ID,那应该就在这里面,于是继续跟进。
原来这个函数叫CSpp::_ReadSystemId,看来离结果不远了。
在不远处发现了CreateFileW和ReadFile,妥妥的,只需要看看CreateFileW第一个参数扔的什么就行了。
这个文件里面只有一行:
看来系统就是使用这个ID和还原点文件进行比较,
我们打开镜像文件和这个GUID在内存中的样子,进行对比:
- C++ 获取Windows还原点列表(2)
- C++ 获取Windows还原点列表
- windows 创建还原点
- C语言获取windows系统mac列表
- Windows还原点编程相关
- 获取windows 用户列表
- 还原点
- 还原点
- C#: Windows 窗体还原功能的实现
- 如何获取Windows应用程序列表
- 如何获取Windows应用程序列表
- C/C++,windows 和 linux 获取目录下文件列表的方法
- Windows XP 丢失还原点的终极解决办法
- 获取Sql服务器列表 (C#)
- 获取Sql服务器列表 (C#)
- Windows C获取hostname
- windows下使用WinPcap获取网卡列表
- 获取Windows已安装程序列表
- 7 个开源的TTS(文本转语音)系统推荐
- YOLO:Real-Time Object Detection学习笔记
- [cocos2d-x]关于屏幕适配
- Linux_系统延时及定时任务
- Aandroid开发如何把数据以pdf格式的形式倒出来
- C++ 获取Windows还原点列表(2)
- magento 搬家
- 猜数字
- 使用jQuery实现顺滑折叠面板
- hadoop里面的MapReduce和yarn的运行原理
- C++ UDP C/S 简单封装(转载)
- Romantic 比较基础的扩展欧几米得问题
- 写页面常用的css特性:calc() vh vw ch和ex
- druid连接池配置