|  | 
 
| .版本 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 (取窗口句柄 ())
 
 
 完整代码:
  进程保护.rar
(4.36 KB, 下载次数: 4) 
 
 
 | 
 |