Windows 系统文件保护


Windows 从 2000 开始就引入了系统文件保护功能(WFP),今天先看看如何列出被保护的系统文件。

代码很简单,只调用了一个 api 函数:SfcGetNextProtectedFile


DECLARE Long
SfcGetNextProtectedFile IN sfc Long RpcHandle, String @ ProtFileData

CREATE CURSOR pfiles ( fname C(128) )

m.cPFD = REPLICATE( CHR(0), 260*2+4 )
DO WHILE .T.
  IF ( 0 == SfcGetNextProtectedFile( 0, @ m.cPFD ))
    EXIT
  ELSE
    INSERT INTO
pfiles ( fname ) VALUES ( ;
      RTRIM( STRCONV( LEFT( m.cPFD, 260*2 ), 6 ), CHR(0)) )
    m.cPFD = REPLICATE( CHR(0), 260*2 ) + RIGHT( m.cPFD, 4 )
  ENDIF
ENDDO

LOCATE
BROWSE NAME
m.oBrowser NOWAIT
WITH
m.oBrowser AS Grid
 
.AllowCellSelection = .F.
  .HighlightBackColor = RGB(49,106,197)
  .HighlightForeColor = RGB(255,255,255)
  WITH .Columns(1)
    .FontName = 'Tahoma'
    WITH .Header1
      .Caption = '被保护的文件'
      .FontName = 'Tahoma'
    ENDWITH
  ENDWITH
ENDWITH

MESSAGEBOX
( '总计有 ' + TRANSFORM(RECCOUNT()) + ' 个文件受到保护。' )


接下来看看如何关闭这个保护功能

按照国外大侠们找到方法,大概有 5 种,参见这里:http://www.bitsum.com/aboutwfp.asp

先看看第 5 种方法,它采用修改保护文件列表 SfcFiles.dll 的方法,而且需要纠正检查和并在重启之后生效,不好
再看看第 4 种方法,它使用了注册表中的一个后门方法,不过 MS 已用补丁关闭了它,所以要改动补丁后的 sfc_os.dll 文件,也不好
剩下的三种方法中,第 2/3 种都采用了调用 sfc_os.dll 中未公开接口的方法,这在 C/Delphi 中都很容易实现,但在 vfp 中要调用一个 dll 中未导出的函数比较困难,我们只能用 LoadLibrary 装入这个 dll,然后用 GetProcessAddress 得到这个未公开函数d 地址指针,但 vfp 没有办法直接调用函数指针
这样看来就只有第一种方法可以比较容易的实现了,研究中...


另外,是否存在简单的方法添加我们自己的程序到这个保护列表中,从而享受这免费的保护呢?

评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值