该楼层疑似违规已被系统折叠 隐藏此楼查看此楼
最近看到一个关于"进程保护"的问题,无聊就研究了一下,总共得出了2种比较可行的方法,第一种就是进程隐藏(任务管理器看不到进程),第2种就是进程守护(任务管理器不能关闭进程).代码发出来,希望大家可以互相学习......
进程守护:http://hi.baidu.com/ciw%5Fblue/blog/item/edd5ff457062603b869473a1.html
进程隐藏:http://hi.baidu.com/ciw%5Fblue/blog/item/bcb8b0c4ad66e9cf38db49f3.html
;********************************************************
原创作者: CIW_BLUE
个人主页: http://user.qzone.qq.com/281011131
;********************************************************
进程守护的代码:
.386
.model stdcall, flat
option casemap:none
include kernel32.inc
include user32.inc
include windows.inc
includelib kernel32.lib
includelib user32.lib
.data
szError db '找不到任务管理器',0
szFormat db '%d',0
szBuf db 100 dup (?)
szWndName db 'Windows 任务管理器',0
dwID dd ? ;要 HOOK 的进程ID
lpMemory dd ? ;远程进程代码申请的空间
hProcess dd ? ;远程进程句柄
dwTerminateProcessFunAddr dd 7C801E16h ;TerminateProcess函数的地址
szJmp db 0e9h
dwMyOpenProcessFunAddr dd ? ;Hook OpenProcess 地址
szOldText db 5 dup(0)
dwMyProcessID dd ?
szManagerPath db 'C:\WINDOWS\system32\taskmgr.exe',0
szMyText db 'CIW_BLUE 进程守护',0
szMyCaption db '进程保护',0
.code
include MyCode.asm
start:
invoke WinExec, offset szManagerPath , SW_SHOW
invoke Sleep, 1000
invoke FindWindow, NULL, offset szWndName
invoke GetWindowThreadProcessId, eax, offset dwID
invoke OpenProcess, PROCESS_ALL_ACCESS, FALSE, dwID ;打开进程
mov hProcess, eax ;进程句柄
.if !eax
invoke MessageBox, NULL, offset szError, NULL, MB_OK
invoke ExitProcess, 0
.endif
invoke VirtualAllocEx, hProcess, NULL, offset My_Code_End - offset My_Code_Start, MEM_COMMIT, PAGE_EXECUTE_READWRITE
mov lpMemory, eax
invoke WriteProcessMemory, hProcess, lpMemory, offset My_Code_Start, offset My_Code_End - offset My_Code_Start, NULL
mov eax, lpMemory
mov ecx, offset _MyEntry
sub ecx, offset My_Code_Start
add eax, ecx
sub eax, dwTerminateProcessFunAddr
sub eax, 5
mov dwMyOpenProcessFunAddr, eax
;获取当前进程的ID
invoke GetCurrentProcessId
mov dwMyProcessID, eax