希望有高手可以帮忙修改防杀进程 ( 积分: 200 )

  • 主题发起人 主题发起人 aaee_1980
  • 开始时间 开始时间
A

aaee_1980

Unregistered / Unconfirmed
GUEST, unregistred user!
各位朋友,小弟想防止自己的程序被用户通过按Ctrl+Alt+Del而结束,下面的代码是在网上搜索的,但由于自己水平有限,虽然有了现成的代码,但具体的操作步聚却不知道,希望有朋友能将详细的步聚告知,假如自己新建了一个应用程序,接着怎样做,将下面的代码加入到自己的程序中,才能防止自己的程序被任务管理器结束呢?请各位大虾赐教,万分感谢!!!<br><br><br><br><br>自己程序中的一段代码,进程防杀。根据网上面流传的进程防杀的C++代码改编。&nbsp;<br><br>DLL部分:&nbsp;<br>PIMAGE_IMPORT_DESCRIPTOR&nbsp;=&nbsp;^_IMAGE_IMPORT_DESCRIPTOR;&nbsp;<br>&nbsp;&nbsp;PImageImportDescriptor&nbsp;=&nbsp;PIMAGE_IMPORT_DESCRIPTOR;&nbsp;<br>&nbsp;&nbsp;_IMAGE_IMPORT_DESCRIPTOR&nbsp;=&nbsp;packed&nbsp;record&nbsp;<br>&nbsp;&nbsp;&nbsp;&nbsp;CharacteristicsOrOriginalFirstThunk:&nbsp;DWord;&nbsp;<br>&nbsp;&nbsp;&nbsp;&nbsp;TimeDateStamp:&nbsp;DWord;&nbsp;<br>&nbsp;&nbsp;&nbsp;&nbsp;ForwarderChain:&nbsp;DWord;&nbsp;<br>&nbsp;&nbsp;&nbsp;&nbsp;Name:&nbsp;DWord;&nbsp;<br>&nbsp;&nbsp;&nbsp;&nbsp;FirstThunk:&nbsp;DWord;&nbsp;<br>&nbsp;&nbsp;end;&nbsp;<br>&nbsp;&nbsp;PIMAGE_THUNK_DATA&nbsp;=&nbsp;^_IMAGE_THUNK_DATA;&nbsp;<br>&nbsp;&nbsp;PImageThunkData&nbsp;=&nbsp;PIMAGE_THUNK_DATA;&nbsp;<br>&nbsp;&nbsp;_IMAGE_THUNK_DATA&nbsp;=&nbsp;packed&nbsp;record&nbsp;<br>&nbsp;&nbsp;&nbsp;&nbsp;Case&nbsp;Integer&nbsp;of&nbsp;<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;0&nbsp;:&nbsp;(ForwarderString:&nbsp;DWord);&nbsp;<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;1&nbsp;:&nbsp;(Function_:&nbsp;DWord);&nbsp;<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;2&nbsp;:&nbsp;(Ordinal:&nbsp;DWord);&nbsp;<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;3&nbsp;:&nbsp;(AddressOfData:&nbsp;DWord);&nbsp;<br>&nbsp;&nbsp;end;&nbsp;<br><br>var&nbsp;<br><br>OriginalOpenProcess&nbsp;:&nbsp;function&nbsp;(dwDesiredAccess:&nbsp;DWORD;&nbsp;bInheritHandle:&nbsp;BOOL;&nbsp;<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;dwProcessId:&nbsp;DWORD):&nbsp;THandle;&nbsp;stdcall;&nbsp;<br><br>function&nbsp;HookAPIFunction(hFromModule:&nbsp;HMODULE;pszFunctionModule:&nbsp;PAnsiChar;&nbsp;<br>&nbsp;&nbsp;pszFunctionName:&nbsp;PAnsiChar;pfnNewProc:&nbsp;Pointer):&nbsp;Pointer;&nbsp;<br>var&nbsp;<br>&nbsp;&nbsp;pfnOriginalProc:&nbsp;Pointer;&nbsp;<br>&nbsp;&nbsp;pDosHeader:&nbsp;PImageDosHeader;&nbsp;<br>&nbsp;&nbsp;pNTHeader:&nbsp;PImageNtHeaders;&nbsp;<br>&nbsp;&nbsp;pImportDesc:&nbsp;PImageImportDescriptor;&nbsp;<br>&nbsp;&nbsp;pThunk:&nbsp;PImageThunkData;&nbsp;<br>&nbsp;&nbsp;dwProtectionFlags,dwScratch:&nbsp;DWORD;&nbsp;<br>&nbsp;&nbsp;pszModName:&nbsp;PAnsiChar;&nbsp;<br>begin&nbsp;<br>&nbsp;&nbsp;Result&nbsp;:=&nbsp;nil;&nbsp;<br>&nbsp;&nbsp;pfnOriginalProc&nbsp;:=&nbsp;GetProcAddress(GetModuleHandle(pszFunctionModule),&nbsp;<br>&nbsp;&nbsp;&nbsp;&nbsp;pszFunctionName);&nbsp;<br>&nbsp;&nbsp;pDosHeader&nbsp;:=&nbsp;PImageDosHeader(hFromModule);&nbsp;<br>&nbsp;&nbsp;pNTHeader&nbsp;:=&nbsp;PImageNTHeaders(DWORD(pDosHeader)+DWORD(pDosHeader^._lfanew));&nbsp;<br>&nbsp;&nbsp;pImportDesc&nbsp;:=&nbsp;PImageImportDescriptor(DWORD(pDosHeader)+&nbsp;<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;DWORD(pNTHeader^.OptionalHeader.&nbsp;<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;DataDirectory[IMAGE_DIRECTORY_ENTRY_IMPORT].&nbsp;<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;VirtualAddress));&nbsp;<br>&nbsp;&nbsp;while&nbsp;pImportDesc^.Name&nbsp;&lt;&gt;&nbsp;0&nbsp;do&nbsp;<br>&nbsp;&nbsp;begin&nbsp;<br>&nbsp;&nbsp;&nbsp;&nbsp;pszModName&nbsp;:=&nbsp;PAnsiChar(Pointer(DWORD(pDosHeader)&nbsp;+&nbsp;DWORD(pImportDesc^.Name)));&nbsp;<br>&nbsp;&nbsp;&nbsp;&nbsp;if&nbsp;LowerCase(pszModName)&nbsp;=&nbsp;LowerCase(pszFunctionModule)&nbsp;then&nbsp;Break;&nbsp;<br>&nbsp;&nbsp;&nbsp;&nbsp;Inc(pImportDesc);&nbsp;<br>&nbsp;&nbsp;end;&nbsp;<br>&nbsp;&nbsp;if&nbsp;pImportDesc^.Name&nbsp;=&nbsp;0&nbsp;then&nbsp;Exit;&nbsp;<br>&nbsp;&nbsp;pThunk&nbsp;:=&nbsp;PImageThunkData(DWORD(pDosHeader)&nbsp;+&nbsp;DWORD(pImportDesc^.FirstThunk));&nbsp;<br>&nbsp;&nbsp;while&nbsp;pThunk^.Function_&nbsp;&lt;&gt;&nbsp;0&nbsp;do&nbsp;<br>&nbsp;&nbsp;begin&nbsp;<br>&nbsp;&nbsp;&nbsp;&nbsp;if&nbsp;(pThunk^.Function_&nbsp;=&nbsp;DWORD(pfnOriginalProc))&nbsp;then&nbsp;<br>&nbsp;&nbsp;&nbsp;&nbsp;begin&nbsp;<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;dwProtectionFlags&nbsp;:=&nbsp;PAGE_READWRITE;&nbsp;<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;VirtualProtect(@pThunk^.Function_,4096,dwProtectionFlags,@dwScratch);&nbsp;<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;pThunk^.Function_&nbsp;:=&nbsp;DWORD(pfnNewProc);&nbsp;<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Result&nbsp;:=&nbsp;pfnOriginalProc&nbsp;;&nbsp;<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Break;&nbsp;<br>&nbsp;&nbsp;&nbsp;&nbsp;end;&nbsp;<br>&nbsp;&nbsp;&nbsp;&nbsp;Inc(pThunk);&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br>&nbsp;&nbsp;end;&nbsp;<br>end;&nbsp;<br><br>function&nbsp;OpenProcessHandler(dwDesiredAccess:&nbsp;DWORD;&nbsp;bInheritHandle:&nbsp;BOOL;&nbsp;<br>&nbsp;&nbsp;&nbsp;&nbsp;dwProcessId:&nbsp;DWORD):&nbsp;THandle;&nbsp;stdcall;&nbsp;<br>begin&nbsp;<br>&nbsp;&nbsp;Result&nbsp;:=&nbsp;OriginalOpenProcess(dwDesiredAccess,&nbsp;bInheritHandle,&nbsp;dwProcessId);&nbsp;<br>&nbsp;&nbsp;if&nbsp;(dwProcessID&nbsp;=&nbsp;PID)&nbsp;and&nbsp;(PID&nbsp;&lt;&gt;&nbsp;0)&nbsp;then&nbsp;Result&nbsp;:=&nbsp;0;&nbsp;<br>end;&nbsp;<br><br>//防杀的进程ID,从注册表中获得&nbsp;<br>procedure&nbsp;GetHookProcessID;&nbsp;<br>var&nbsp;<br>&nbsp;&nbsp;TempKey:&nbsp;HKEY;&nbsp;<br>&nbsp;&nbsp;DataType,Size:&nbsp;Integer;&nbsp;<br>begin&nbsp;<br>&nbsp;&nbsp;PID&nbsp;:=&nbsp;0;&nbsp;<br>&nbsp;&nbsp;Size&nbsp;:=&nbsp;Sizeof(Integer);&nbsp;<br>&nbsp;&nbsp;if&nbsp;RegOpenKeyEx(HKEY_LOCAL_MACHINE,’Software/Vssoft’,&nbsp;0,KEY_READ,&nbsp;<br>&nbsp;&nbsp;&nbsp;&nbsp;TempKey)&nbsp;=&nbsp;ERROR_SUCCESS&nbsp;then&nbsp;<br>&nbsp;&nbsp;begin&nbsp;<br>&nbsp;&nbsp;&nbsp;&nbsp;RegQueryValueEx(TempKey,’ProcessID’,nil,@DataType,PByte(@PID),@Size);&nbsp;<br>&nbsp;&nbsp;&nbsp;&nbsp;RegCloseKey(TempKey);&nbsp;<br>&nbsp;&nbsp;end;&nbsp;<br>end;&nbsp;<br><br>function&nbsp;HookOpenProcess(nCode:&nbsp;Integer;wParam:&nbsp;WPARAM;lParam:&nbsp;LPARAM):&nbsp;LRESULT;stdcall;&nbsp;<br>begin&nbsp;<br>&nbsp;&nbsp;GetHookProcessID;&nbsp;<br>&nbsp;&nbsp;if&nbsp;not&nbsp;Assigned(OriginalOpenProcess)&nbsp;then&nbsp;<br>&nbsp;&nbsp;&nbsp;&nbsp;OriginalOpenProcess&nbsp;:=&nbsp;HookAPIFunction(GetModuleHandle(nil),&nbsp;<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;’KERNEL32.DLL’,’OpenProcess’,@OpenProcessHandler);&nbsp;<br>&nbsp;&nbsp;Result&nbsp;:=&nbsp;0;&nbsp;&nbsp;<br>end;&nbsp;<br><br>exports&nbsp;<br>&nbsp;&nbsp;HookOpenProcess;
 
设置全局钩子,一旦发现是需要保护的PID进程就禁止OPENPROCESS<br>因为一般终止进程的操作都是先OPENPROCESS取得进程句柄和权限才可以terminate&nbsp;process
 
后退
顶部