进程保护防止在任务管理器中结束【纯源码不用DLL不用驱动】
.版本 2.程序集 窗口程序集1
.程序集变量 ShellHook
.程序集变量 old_
.子程序 __启动窗口_创建完毕
开启 ()
.子程序 开启
.局部变量 hwnd
.局部变量 pid_anti
.局部变量 pid_pro
hwnd = FindWindow (“#32770”, “Windows 任务管理器”)
.如果真 (hwnd > 0)
GetWindowThreadProcessId (hwnd, pid_anti)
pid_pro = GetCurrentProcessId ()
.如果真 (At_OP (pid_anti, pid_pro))
标签1.标题 = “保护成功,现在可以尝试结束我,PID:” + 到文本 (pid_pro) + “,EXE:” + 取执行文件名 ()
.如果真结束
.如果真结束
ShellHook = RegisterWindowMessageA (“SHELLHOOK”)
RegisterShellHookWindow (取窗口句柄 ())
old_ = GetWindowLongA (取窗口句柄 (), -4)
SetWindowLong (取窗口句柄 (), -4, 到整数 (&窗口处理))
.子程序 窗口处理, 整数型
.参数 hwnd, 整数型
.参数 msg, 整数型
.参数 wParam, 整数型
.参数 lParam, 整数型
.局部变量 pid_ant
.局部变量 hwnd_, , 静态
.局部变量 pid_pro
.如果真 (msg = ShellHook)
.判断开始 (wParam = 1)
.如果真 (取窗口标题_ (lParam) = “Windows 任务管理器”)
hwnd_ = lParam
GetWindowThreadProcessId (lParam, pid_ant)
pid_pro = GetCurrentProcessId ()
.如果真 (At_OP (pid_ant, pid_pro))' pid_pro 可换成自己要保护的进程PID
标签1.标题 = “保护成功,现在可以尝试结束我,PID:” + 到文本 (pid_pro) + “,EXE:” + 取执行文件名 ()
.如果真结束
.如果真结束
.判断 (wParam = 2)
.如果真 (lParam = hwnd_)
标签1.标题 = “进程已退出”
.如果真结束
.默认
.判断结束
.如果真结束
返回 (CallWindowProcA (old_, hwnd, msg, wParam, lParam))
.子程序 取窗口标题_, 文本型
.参数 hWnd, 整数型
.局部变量 buf, 文本型
buf = 取空白文本 (256)
GetWindowText (hWnd, buf, 256)
返回 (buf)
.子程序 进程名取PID, 整数型
.参数 tx, 文本型
.局部变量 hSnapShot, 整数型
.局部变量 End, 整数型
.局部变量 buffer, PROCESSENTRY32
hSnapShot = CreateToolhelp32Snapshot (2, 0)
buffer.dwSize = 296
End = Process32First (hSnapShot, buffer)
.判断循环首 (End ≠ 0)
.如果真 (到小写 (tx) = 到小写 (到文本 (buffer.szExeFile)))
CloseHandle (hSnapShot)
返回 (buffer.th32ProcessID)
跳出循环 ()
.如果真结束
End = Process32Next (hSnapShot, buffer)
.判断循环尾 ()
CloseHandle (hSnapShot)
返回 (-1)
.子程序 At_OP, 逻辑型
.参数 pid_ant, 整数型
.参数 pid_pro_, 整数型
.局部变量 Asm_1, 字节集, , , 27
.局部变量 Asm_2, 字节集
.局部变量 tmp, 字节集
.局部变量 Asm, 字节集
.局部变量 Jmp, 字节集
.局部变量 addr_Func, 整数型
.局部变量 addr_buf, 整数型
.局部变量 hPro, 整数型
.局部变量 pid_pro
hPro = OpenProcess (2035711, 0, pid_ant)
.如果真 (hPro = 0)
返回 (假)
.如果真结束
pid_pro = pid_pro_
addr_Func = GetProcAddress (LoadLibraryA (“Kernel32”), “OpenProcess”)
.' 如果真 (addr_Func = 0)
' 返回 (假)
.如果真结束
addr_buf = VirtualAllocEx (hPro, 0, 27, 4096, 64)
.如果真 (addr_buf = 0)
返回 (假)
.如果真结束
tmp = 取空白字节集 (4)
RtlMoveMemory_字节集 (tmp, addr_buf - addr_Func - 5, 4)' 计算跳转偏移地址
Jmp = { 233 } + tmp
tmp = 取空白字节集 (4)
RtlMoveMemory_字节集 (tmp, pid_pro, 4)
Asm_1 = { 139, 255, 85, 139, 236, 129, 125, 16 } + tmp + { 15, 133 }
Asm_2 = { 184, 0, 0, 0, 0, 93, 194, 12, 0 }
tmp = 取空白字节集 (4)
RtlMoveMemory_字节集 (tmp, addr_Func - addr_buf - 13, 4)' 计算 回跳 偏移地址
Asm_2 = tmp + Asm_2
Asm = 取空白字节集 (27)
Asm = Asm_1 + Asm_2
WriteProcessMemory_字节集 (hPro, addr_buf, Asm, 27, 0)
WriteProcessMemory_字节集 (hPro, addr_Func, Jmp, 5, 0)
CloseHandle (hPro)
返回 (真)
' translate by 泆寒
.子程序 __启动窗口_将被销毁
SetWindowLong (取窗口句柄 (), -4, old_)
DeregisterShellHookWindow (取窗口句柄 ())
完整代码:
页:
[1]