65.9K
CodeProject 正在变化。 阅读更多。
Home

一种使用 SetSfcFileException 未记录函数来破解 Windows 文件保护 (WFP) 的简单方法

starIconstarIconstarIcon
emptyStarIcon
starIcon
emptyStarIcon

3.29/5 (20投票s)

2006年7月25日

CPOL
viewsIcon

79738

如何在不被操作系统保护检测到的情况下删除/修改受 Windows 保护的系统文件。

引言

有很多方法可以禁用 WFP。 其中一种是在“HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows NT\CurrentVersion\Winlogon”处设置注册表值 SFCDisable 为 2,或者修补 sfc.dll

但是,本文将讨论另一种方法。 这就是使用 Win32 API 函数 SetSfcFileException

SetSfcFileException 函数

此函数由 sfc_os.dll 导出。 通常,它使 Windows 允许在 60 秒内修改参数中给定的任何受保护的文件。 但是,我在 WinXP 下对其进行了测试,并且发现它的效果是无限的!

当然,此函数是在特权会话中使用的! 其主要作用是禁用在修改受保护文件时 Windows 警告对话框;这比终止/修补服务或更改注册表值更隐蔽。

SetSfcFileException 函数的原型是

SetSfcFileException(DWORD param1 , PWCHAR param2 , DWORD param3);
  • param1:始终设置为 0
  • param2:要稍后修改的文件的完整路径
  • param3:始终设置为 -1

一个简单的演示程序

让我们尝试禁用有关“c:\windows\system32\calc.exe”文件的 WFP

typedef DWORD(__stdcall *CPP) (DWORD param1, PWCHAR param2, DWORD param3);

void Disable_WFP() {
    hmod=LoadLibrary("sfc_os.dll");
    CPP SetSfcFileException;
    // the function is stored at the fifth ordinal in sfc_os.dll
    SetSfcFileException=(CPP)GetProcAddress(hmod,(LPCSTR)5);
    SetSfcFileException(0, L"c:\\windows\\system32\\calc.exe",-1);
    // Now we can modify the system file in a complete stealth.
}
© . All rights reserved.