如何禁止Windows文件保护

如何禁止Windows文件保护 2008-11-28 15:24:10
 
如何禁止Windows文件保护
2007-09-30 18:01
下面介绍如何禁止Windows文件保护(WFP)。
我们先来了解下WFP是如何工作的。相关的文件是sfc_os.dll(2000下是sfc.dll,在xp下也有sfc.dll文件,但都是调用sfc_os.dll的功能)和 Winlogon.exe 。
Winlogo进程通过调用sfc dll 导出的函数进行文件保护,后者通过FindFirstChangeNotification函数在用户态监视要保护的目录,然后通过WaitForSingleObject等待事件的发生。实际上如果你通过object viewer观察这个进程,会找到每个保护目录的句柄。这里我用Process Explorer观察得到:
EVENT \BaseNamedObjects\WFP_IDLE_TRIGGER
File D:\WINDOWS\system32\dllcache
File D:\WINDOWS\system32
……
那么,我们是可以通过FindCloseChangeNotification或CloseHandle(两个实际是相同的)来停止WFP监视系统目录。
简要步骤如下:
1.在管理员身份下运行程序,提升自已进程的SeDebugPrivileges权限
2.找到winlogo进程的ID
3.以PROCESS_DUP_HANDLE权限打开winlogo进程(后面要复制winlogo进程内的句柄)
4. 通过NtQuerySystemInformation函数,遍历winlogo进程内所有打开的句柄。
5. 通过NtQueryObject查询句柄对象的名称,如果名称是我们需要停止保护的目录,则用DuplicateHandle复制句柄到我们进程,
带DUPLICATE_CLOSE_SOURCE标志,然后调用CloseHandle关闭该句柄。
详细代码参考:[url]http://bbs.driverdevelop.com/htm_data/101/0705/101763.html[/url]
Sfc_os.dll导出的第5号函数(SetSfcFileException),也可用于禁止Windows文件保护。通常,这个函数使得由参数指定的被保护文件在60秒内可以修改替换,实际测试后,发现在xp下是没有这个时间限制的。函数原型:
SetSfcFileException (DWORD param1, PWCHAR param2, DWORD param3);
param1: Always set to 0
param2: The full path of the file to modify later
param3: Always set to –1
代码示范:
typedef DWORD(__stdcall *CPP) (DWORD param1, PWCHAR param2, DWORD param3);
void Disable_WFP()
{
HINSTANCE 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.
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值