這里要用到一個未公開的API——SfcFileException,其聲明如下:
代碼:
DWORD?WINAPI?SfcFileException(DWORD?dwUnknown0,?PWCHAR?pwszFile,?DWORD?dwUnknown1);?
參數說明:?dwUnknown0?未知,設為0?
pwszFile?文件名?
dwUnknown1?未知,設為-1?
從 參數可以看出SfcFileException只能對單個文件禁止Windows文件保護,注意pwszFile參數是UNICODE字符。函數成功返回 0,失敗返回1(一般是文件不受Windows文件保護保護)。在Windows?XP里SfcFileException位于SFC_OS.DLL中, 沒有被導出函數名,只導出了序號,序號為5。下面看代碼:
代碼:
.586
.model?flat,stdcall
option?casemap:none
include?\masm32\include\windows.inc
include?\masm32\include\kernel32.inc
include?\masm32\include\user32.inc
includelib?\masm32\lib\kernel32.lib
includelib?\masm32\lib\user32.lib
include?\masm32\macros\macros.asm
include?\masm32\macros\ucmacros.asm
ProtoDef????typedef?proto?:dword,:dword,:dword
lpProc????????typedef?ptr?ProtoDef
.data
????WSTR?szFile,"C:\Windows\Explorer.exe"
????
.data?
????SfcFileException????lpProc?????
.code
Main?proc
????
????invoke?LoadLibrary,SADD('SFC_OS.DLL')
????invoke?GetProcAddress,eax,5
????mov?SfcFileException,eax
????invoke?SfcFileException,0,offset?szFile,-1
????.if?eax
????????invoke?MessageBox,NULL,SADD('Err'),SADD('Err'),MB_OK
????.else
????????invoke?MessageBox,NULL,SADD('OK'),SADD('OK'),MB_OK
????.endif
????ret
Main?endp
end?Main?
代碼很簡單,就不多說。
參考文獻:
《Hacking?Windows?File?Protection》——http://www.bitsum.com/aboutwfp.asp
里面有些不錯的東西,建議看一下,英文的。
?
注意:程序需要開啟調試權限!