首页
社区
课程
招聘
[原创]编程禁止Windows文件保护
发表于: 2007-6-5 19:27 10848

[原创]编程禁止Windows文件保护

2007-6-5 19:27
10848
这里要用到一个未公开的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
里面有些不错的东西,建议看一下,英文的。

[注意]传递专业知识、拓宽行业人脉——看雪讲师团队等你加入!

收藏
免费 0
支持
分享
最新回复 (17)
雪    币: 158
活跃值: (263)
能力值: ( LV10,RANK:170 )
在线值:
发帖
回帖
粉丝
2
不错,收藏了
2007-6-5 20:55
0
雪    币: 268
活跃值: (40)
能力值: ( LV10,RANK:170 )
在线值:
发帖
回帖
粉丝
3
不错,收下了,学习ing .....
2007-6-5 21:28
0
雪    币: 189
活跃值: (56)
能力值: ( LV6,RANK:90 )
在线值:
发帖
回帖
粉丝
4
2k下sfc.dll也一样吗?

我在XP和2K下测试了,都返回IO_PEND错误~~~,用管理员帐户测试的,怎么搞??
2007-6-5 21:58
0
雪    币: 202
活跃值: (77)
能力值: ( LV6,RANK:90 )
在线值:
发帖
回帖
粉丝
5
需要提升到debug权限
2007-6-6 01:12
0
雪    币: 202
活跃值: (77)
能力值: ( LV6,RANK:90 )
在线值:
发帖
回帖
粉丝
6
或者在nt服务里面执行这些代码
2007-6-6 01:12
0
雪    币: 189
活跃值: (56)
能力值: ( LV6,RANK:90 )
在线值:
发帖
回帖
粉丝
7
这个还需要DEBUG权限啊,那和以前哪个老办法也没差~~~~
2007-6-6 10:20
0
雪    币: 2134
活跃值: (14)
能力值: (RANK:170 )
在线值:
发帖
回帖
粉丝
8
这个改c怎么改?
我改的这个好像UNICODE有问题,我太搞得清楚,那位大虾看看

#include <windows.h>
#pragma comment(lib,"user32")
typedef DWORD WINAPI SfcFileException(DWORD dwUnknown0, PWCHAR pwszFile, DWORD dwUnknown1);

int WINAPI WinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance, LPSTR pszCmdLine, int cmdShow)
{
    DWORD result = 0;
    HMODULE hLib = LoadLibrary("SFC_OS.DLL");
    SfcFileException *se = GetProcAddress(hLib,5);
    result = se(0,L"C:\\Windows\\Explorer.exe",-1);
   
    if (result)
        MessageBox(NULL,"err","err",MB_OK);
    else MessageBox(NULL,"success","success",MB_OK);
   
    FreeLibrary(hLib);
    return 1;
}
2007-6-6 13:36
0
雪    币: 2134
活跃值: (14)
能力值: (RANK:170 )
在线值:
发帖
回帖
粉丝
9
为什么我这样定义函数指针出错?
typedef DWORD WINAPI (*PSfcFileException)(DWORD dwUnknown0, PWCHAR pwszFile, DWORD dwUnknown1);

。。。

PSfcFileException se = ...
2007-6-6 14:13
0
雪    币: 2134
活跃值: (14)
能力值: (RANK:170 )
在线值:
发帖
回帖
粉丝
10
typedef那一行提示:
语法错误 : “(”
2007-6-6 14:16
0
雪    币: 424
活跃值: (1829)
能力值: ( LV3,RANK:30 )
在线值:
发帖
回帖
粉丝
11
XP SP2测试通过,2K我没测试,你可以在《Hacking Windows File Protection》——http://www.bitsum.com/aboutwfp.asp
找找资料~~
2007-6-6 15:55
0
雪    币: 424
活跃值: (1829)
能力值: ( LV3,RANK:30 )
在线值:
发帖
回帖
粉丝
12
似乎不用~~~
2007-6-6 15:55
0
雪    币: 424
活跃值: (1829)
能力值: ( LV3,RANK:30 )
在线值:
发帖
回帖
粉丝
13
偶对C不熟,爱莫能助....
2007-6-6 15:56
0
雪    币: 716
活跃值: (162)
能力值: ( LV9,RANK:250 )
在线值:
发帖
回帖
粉丝
14
学习一下!!!
2007-6-6 22:56
0
雪    币: 189
活跃值: (56)
能力值: ( LV6,RANK:90 )
在线值:
发帖
回帖
粉丝
15
进程需要提高到DEBUG权限吗?我测试不通过,总是返回IO_PEND
2007-6-7 00:28
0
雪    币: 200
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
16
支持WIN32汇编
2007-6-7 08:22
0
雪    币: 2134
活跃值: (14)
能力值: (RANK:170 )
在线值:
发帖
回帖
粉丝
17
#include <windows.h>
#pragma comment(lib,"user32")

typedef DWORD WINAPI SfcFileException(DWORD dwUnknown0, PWCHAR pwszFile, DWORD dwUnknown1);

int WINAPI WinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance, LPSTR pszCmdLine, int cmdShow)
{
    DWORD result = 0;
    WCHAR szW[100] = L"C:\\Windows\\Explorer.exe";     
           
    HMODULE hLib = LoadLibrary("SFC_OS.DLL");
    SfcFileException *se = GetProcAddress(hLib,5);
   
    result = se(0,szW,-1);
   
    if (result)
        MessageBox(NULL,"err","err",MB_OK);
    else MessageBox(NULL,"success","success",MB_OK);
   
    FreeLibrary(hLib);
    return 1;
}
xp sp2中这个可以
2007-6-7 17:13
0
雪    币: 207
活跃值: (10)
能力值: ( LV4,RANK:50 )
在线值:
发帖
回帖
粉丝
18
这个方法好像好早在29a7号的的电子杂志里就有了....Ratter大大的~
2007-6-7 22:39
0
游客
登录 | 注册 方可回帖
返回
//