吾爱破解 - 52pojie.cn

 找回密码
 注册[Register]

QQ登录

只需一步,快速开始

查看: 1462|回复: 20
上一主题 下一主题
收起左侧

[系统底层] 各类还原软件/影子系统的穿透方法

  [复制链接]
跳转到指定楼层
楼主
YWFhYmJi 发表于 2024-12-12 22:09 回帖奖励
本帖最后由 YWFhYmJi 于 2024-12-12 22:16 编辑

要穿透还原软件,首先要了解还原软件的原理,下面以××还原8.63标准版为例分析还原软件(注意:只分析硬盘还原功能,忽略鼠标键盘的过滤器和解冻空间的驱动)

首先使用DeviceTree观察硬盘的设备树,发现还原软件在硬盘上层和下层分别附加了过滤器,分别是DeepFrz.sys和DfDiskLo.sys



通过看文件名和测试发现,DeepFrz.sys主要负责系统保护,DfDiskLo.sys主要负责MBR保护

发现可以通过进入内核直接向SCSI Miniport(本例中是设备\Device\0000006f驱动\Driver\stornvme)发送IRP_MJ_SCSI绕过还原软件直接读写硬盘,参考 这篇文章(https://www.cnblogs.com/robinh00d/archive/2010/01/17/1650135.html)

但同时也失去了partmgr和文件系统驱动,只能按扇区读写,需要自己解析硬盘分区和文件系统

FAT32的分区结构简单,很好解析,但现在的系统都使用NTFS文件系统作为系统分区,但NTFS的分区结构比较复杂,所以采用开源linux ntfs读写库 ntfs-3g(https://github.com/tuxera/ntfs-3g),使用cygwin把它移植到windows上(主要修改了libntfs-3g里的win32_io.c),这样就可以在硬盘保护模式中修改和读取任意文件

解除保护就可以直接把还原软件的保护驱动替换成自己的假驱动,重启后就可以解除还原(注意:不能直接利用系统api定位驱动文件存储扇区并修改,因为驱动需要数字签名,直接修改扇区会导致数字签名失效)

尝试修改MBR,用一样的方法修改扇区,提示成功,但重启后MBR没有被修改,猜测发送的IRP被钩子拦截

使用OpenARK工具查看stornvme的派遣函数,发现IRP_MJ_INTERNAL_DEVICE_CONTROL(IRP_MJ_SCSI)被挂钩(指向DfDiskLo.sys,正常的是指向storport.sys!RaDriverScsiIrp),恢复钩子后修改MBR成功



恢复IRP_MJ_SCSI的hook可以直接在storport.sys中搜索特征码定位函数地址

[C] 纯文本查看 复制代码
NTSTATUS FindScsiMajorRoutineAddress(PULONG64 FuncAddress)
{
        UCHAR sign[] = {
                0x48, 0x89, 0x74, 0x24, 0x18, 0x57, 0x48, 0x83, 0xEC, 0x30, 0x48, 0x89, 0x6C, 0x24, 0x48, 0x48
        };
        RTL_PROCESS_MODULE_INFORMATION DriverInfo = { 0 };
        NTSTATUS status = GetDriverInfo("storport.sys", &DriverInfo);
        if (!NT_SUCCESS(status))
                return status;
        ULONG NeedSize = DriverInfo.ImageSize;
        PVOID StartAddr = DriverInfo.ImageBase;
        for (ULONG i = 0; i < NeedSize - sizeof(sign); i++)
        {
                if (RtlEqualMemory((PUCHAR)StartAddr + i, sign, sizeof(sign)))
                {
                        *FuncAddress = i;
                        LogInfo("Found SCSI routine address: 0x%llX\n", *FuncAddress);
                        return STATUS_SUCCESS;
                }
        }
        return STATUS_NOT_FOUND;
}

NTSTATUS RestoreSCSIMajorRoutine(PDRIVER_OBJECT DriverObject, ULONG64 FuncAddress)
{
        RTL_PROCESS_MODULE_INFORMATION DriverInfo = { 0 };
        NTSTATUS status = GetDriverInfo("storport.sys", &DriverInfo);
        if (!NT_SUCCESS(status))
                return status;
        ULONG64 BaseAddress = (ULONG64)DriverInfo.ImageBase;
        ULONG64 NewFuncAddress = FuncAddress + BaseAddress;
        LogInfo("ScsiFunctionAddress=0x%llX\n", NewFuncAddress);
        if (!MmIsAddressValid((PVOID)NewFuncAddress))
                return STATUS_INVALID_PARAMETER;
        InterlockedExchange64((PLONG64)&DriverObject->MajorFunction[IRP_MJ_SCSI], (LONG64)NewFuncAddress);
        return STATUS_SUCCESS;
}



修改版ntfs-3g.7z (888.01 KB, 下载次数: 18)

完整代码.7z (1.15 MB, 下载次数: 21)

免费评分

参与人数 3吾爱币 +3 热心值 +3 收起 理由
zhczf + 1 + 1 用心讨论,共获提升!
princekin + 1 + 1 谢谢@Thanks!
Mickey01 + 1 + 1 我很赞同!

查看全部评分

本帖被以下淘专辑推荐:

发帖前要善用论坛搜索功能,那里可能会有你要找的答案或者已经有人发布过相同内容了,请勿重复发帖。

推荐
xxkz 发表于 2024-12-13 15:29
以前单机不装杀毒软件,只装冰点还原上网浪。反正中招之后重启机子就好了,结果某天碰到一个威金病毒,把所有可执行文件全感染了,一通杀毒下来,到现在还能记得1998个,后面再不敢这么浪了,哦。要问为什么装了冰点还能中招,那是因为冰点设置了只还原系统盘,其他盘不还原。
沙发
enze999 发表于 2024-12-13 11:23
3#
a7896513032 发表于 2024-12-13 12:03
4#
冥界3大法王 发表于 2024-12-13 12:26
然后呢。。。就可以干坏事,比如写病毒?
5#
kxzxw 发表于 2024-12-13 13:11
本帖最后由 kxzxw 于 2024-12-13 13:16 编辑

学习了!!!
6#
天使3号 发表于 2024-12-13 13:45
以前觉得影子系统安全,我小时候家里装了影子系统直接拔电源关机,心想反正是影子系统,伤害不到真实系统
7#
woaipo1 发表于 2024-12-13 13:50
了解了,谢谢
8#
yooyyo 发表于 2024-12-13 14:03
感谢大佬分享!!
10#
gqdsc 发表于 2024-12-13 17:34
高手就是高手
您需要登录后才可以回帖 登录 | 注册[Register]

本版积分规则

返回列表

RSS订阅|小黑屋|处罚记录|联系我们|吾爱破解 - LCG - LSG ( 京ICP备16042023号 | 京公网安备 11010502030087号 )

GMT+8, 2024-12-16 06:11

Powered by Discuz!

Copyright © 2001-2020, Tencent Cloud.

快速回复 返回顶部 返回列表