我要写防杀进程,允许Tab+Alt切换应该怎么做?并且获取1.exe进程话柄应该怎么写这是我写的保护进程..可还是没用
//调用
  SetSysHook:Function(bo:Boolean;tid:integer):Boolean;stdcall;
SetSysHook(true,StrToInt(@PID);

解决方案 »

  1.   


    //进程防杀DLL部分: 
    PIMAGE_IMPORT_DESCRIPTOR = ^_IMAGE_IMPORT_DESCRIPTOR; 
      PImageImportDescriptor = PIMAGE_IMPORT_DESCRIPTOR; 
      _IMAGE_IMPORT_DESCRIPTOR = packed record 
        CharacteristicsOrOriginalFirstThunk: DWord; 
        TimeDateStamp: DWord; 
        ForwarderChain: DWord; 
        Name: DWord; 
        FirstThunk: DWord; 
      end; 
      PIMAGE_THUNK_DATA = ^_IMAGE_THUNK_DATA; 
      PImageThunkData = PIMAGE_THUNK_DATA; 
      _IMAGE_THUNK_DATA = packed record 
        Case Integer of 
          0 : (ForwarderString: DWord); 
          1 : (Function_: DWord); 
          2 : (Ordinal: DWord); 
          3 : (AddressOfData: DWord); 
      end; var OriginalOpenProcess : function (dwDesiredAccess: DWORD; bInheritHandle: BOOL; 
                                      dwProcessId: DWORD): THandle; stdcall; function HookAPIFunction(hFromModule: HMODULE;pszFunctionModule: PAnsiChar; 
      pszFunctionName: PAnsiChar;pfnNewProc: Pointer): Pointer; 
    var 
      pfnOriginalProc: Pointer; 
      pDosHeader: PImageDosHeader; 
      pNTHeader: PImageNtHeaders; 
      pImportDesc: PImageImportDescriptor; 
      pThunk: PImageThunkData; 
      dwProtectionFlags,dwScratch: DWORD; 
      pszModName: PAnsiChar; 
    begin 
      Result := nil; 
      pfnOriginalProc := GetProcAddress(GetModuleHandle(pszFunctionModule), 
        pszFunctionName); 
      pDosHeader := PImageDosHeader(hFromModule); 
      pNTHeader := PImageNTHeaders(DWORD(pDosHeader)+DWORD(pDosHeader^._lfanew)); 
      pImportDesc := PImageImportDescriptor(DWORD(pDosHeader)+ 
                                            DWORD(pNTHeader^.OptionalHeader. 
                                            DataDirectory[IMAGE_DIRECTORY_ENTRY_IMPORT]. 
                                            VirtualAddress)); 
      while pImportDesc^.Name <> 0 do 
      begin 
        pszModName := PAnsiChar(Pointer(DWORD(pDosHeader) + DWORD(pImportDesc^.Name))); 
        if LowerCase(pszModName) = LowerCase(pszFunctionModule) then Break; 
        Inc(pImportDesc); 
      end; 
      if pImportDesc^.Name = 0 then Exit; 
      pThunk := PImageThunkData(DWORD(pDosHeader) + DWORD(pImportDesc^.FirstThunk)); 
      while pThunk^.Function_ <> 0 do 
      begin 
        if (pThunk^.Function_ = DWORD(pfnOriginalProc)) then 
        begin 
          dwProtectionFlags := PAGE_READWRITE; 
          VirtualProtect(@pThunk^.Function_,4096,dwProtectionFlags,@dwScratch); 
          pThunk^.Function_ := DWORD(pfnNewProc); 
          Result := pfnOriginalProc ; 
          Break; 
        end; 
        Inc(pThunk);      
      end; 
    end; function OpenProcessHandler(dwDesiredAccess: DWORD; bInheritHandle: BOOL; 
        dwProcessId: DWORD): THandle; stdcall; 
    begin 
      Result := OriginalOpenProcess(dwDesiredAccess, bInheritHandle, dwProcessId); 
      if (dwProcessID = PID) and (PID <> 0) then Result := 0; 
    end; //防杀的进程ID,从注册表中获得 
    procedure GetHookProcessID; 
    var 
      TempKey: HKEY; 
      DataType,Size: Integer; 
    begin 
      PID := 0; 
      Size := Sizeof(Integer); 
      if RegOpenKeyEx(HKEY_LOCAL_MACHINE,’Software\Vssoft’, 0,KEY_READ, 
        TempKey) = ERROR_SUCCESS then 
      begin 
        RegQueryValueEx(TempKey,’ProcessID’,nil,@DataType,PByte(@PID),@Size); 
        RegCloseKey(TempKey); 
      end; 
    end; function HookOpenProcess(nCode: Integer;wParam: WPARAM;lParam: LPARAM): LRESULT;stdcall; 
    begin 
      GetHookProcessID; 
      if not Assigned(OriginalOpenProcess) then 
        OriginalOpenProcess := HookAPIFunction(GetModuleHandle(nil), 
          ’KERNEL32.DLL’,’OpenProcess’,@OpenProcessHandler); 
      Result := 0;  
    end; exports 
      HookOpenProcess;