Visual C++ 7.1Visual C++ 8.0Visual C++ 7.0Visual Studio .NET 2003Windows 2003Visual Studio 2005Windows 2000Visual C++ 6.0Windows XPMFC中级开发Visual StudioWindowsC++
一种使用 SetSfcFileException 未记录函数来破解 Windows 文件保护 (WFP) 的简单方法






3.29/5 (20投票s)
如何在不被操作系统保护检测到的情况下删除/修改受 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
:始终设置为 0param2
:要稍后修改的文件的完整路径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.
}