不学网

 找回密码
 立即注册

只需一步,快速开始

手机号码,快捷登录

查看: 316|回复: 3

[c/c++] 全局监控进程创建and禁止结束某进程

[复制链接]
BiaoGe 发表于 2018-4-4 22:46:34 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。

您需要 登录 才可以下载或查看,没有帐号?立即注册

x
32位系统直接传统Hook就Ok了,但是64位系统就不行了,需要改动一下汇编代码

64位系统Hook需求
1.目标进程64位
2.注入程序64位
3.dll64位
以上条件必须都满足方可Hook64程序

--------------------------------------------------------------------------------------------------------
全局监控进程创建思路
Hook组员管理器explorer.exe
因为用户点击软件启动时实际上是由资源管理器负责创建进程的
资源管理器调用的创建进程API:CreateProcessW
所以我们只需要Hook CreateProcessW即可
然后回调函数中添加过滤放行或禁止就好了
效果图
测试环境:Win7 64bit

当我们点击某个应用程序时
SKJBA$WC[JW`F58@MVD}UNX.png
当我们点击【是】,程序正常打开
但是当我们点击【否】,那么就嘿嘿了
]3GBIG67ZEK_@}E71QV[9NO.png


--------------------------------------------------------------------------------------------------------
进程保护思路
Hook任务管理就可以了
任务管理器结束进程调用的API:Openprocess,TerminateProcess
不过我们只需要Hook OpenProcess就OK了
因为OpenProcess有我们想要的参数dwProcessId,有了进程Id就在回调中过滤了
还有TerminateProcess第一个参数是个HANDLE
只要HANDLE错误,他就无法结束进程
而HANDLE是通过OpenProcess得到的

效果图
我准备好的保护目标
0$X@RW$VB4{)HQ2D19[(CJD.png
当我们试图结束它
[VJ[MY$%YP5L7_5M1BVCJ65.png
任务管理器就会提示
1JOFWR}8B(W78HLF$V@LOJN.png

--------------------------------------------------------------------------------------------------------
核心代码就是64位Hook
下面放出来APIHook64Class
APIHook64Class.h
  1. #ifndef APIHOOK64CLASS_H_
  2. #define APIHOOK64CLASS_H_
  3. #include <Windows.h>

  4. class APIHook64
  5. {
  6. private:
  7.         unsigned char code[12];
  8.         unsigned char oldcode[12];
  9.         FARPROC addr;

  10. public:
  11.         APIHook64();
  12.         BOOL Hook(char *dllName,char *apiName,long long callfunc,BOOL bHook=TRUE);
  13. };

  14. #endif
复制代码
APIHook64Class.cpp
  1. #include "APIHook64Class.h"

  2. APIHook64::APIHook64()
  3. {
  4.         /*
  5.                 mov eax,0x12345678
  6.                 push eax
  7.                 ret
  8.         */
  9.         unsigned char c[12] = { 0x48, 0xB8, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x50, 0xC3 };
  10.         RtlMoveMemory(APIHook64::code, c, 12);
  11.         memset(APIHook64::oldcode, 0, 12);
  12.         addr = NULL;
  13. }

  14. BOOL APIHook64::Hook(char *dllName, char *apiName, long long callfunc, BOOL bHook)
  15. {
  16.         BOOL bOk = FALSE;
  17.         DWORD dwOldProtect = 0;
  18.         long long api = callfunc;
  19.         HANDLE hPro = GetCurrentProcess();

  20.         if (!APIHook64::oldcode[0])
  21.         {
  22.                 addr = GetProcAddress(LoadLibrary(dllName), apiName);
  23.                 RtlMoveMemory(APIHook64::code+2, &api, 8);
  24.                 if (VirtualProtectEx(hPro, addr, 12, PAGE_EXECUTE_READWRITE, &dwOldProtect))
  25.                 {
  26.                         RtlMoveMemory(APIHook64::oldcode, addr, 12);
  27.                 }
  28.         }
  29.         if (bHook)
  30.         {
  31.                 bOk = WriteProcessMemory(hPro, addr, APIHook64::code, 12, NULL);
  32.         }
  33.         else {
  34.                 bOk = WriteProcessMemory(hPro, addr, APIHook64::oldcode, 12, NULL);
  35.         }
  36.         VirtualProtectEx(hPro, addr, 12, dwOldProtect, &dwOldProtect);
  37.         CloseHandle(hPro);
  38.         return bOk;
  39. }
复制代码


回复

使用道具 举报

admin 发表于 2018-4-6 11:06:05 来自手机 | 显示全部楼层
病毒或者安全程序必备技能啊
C842629D-84A5-474C-8C9E-392736181C8A.gif
回复

使用道具 举报

 楼主| BiaoGe 发表于 2018-4-6 13:56:30 | 显示全部楼层
admin 发表于 2018-4-6 11:06
病毒或者安全程序必备技能啊

就看怎么用啦
回复

使用道具 举报

admin 发表于 2018-4-6 15:52:02 来自手机 | 显示全部楼层
BiaoGe 发表于 2018-4-6 05:56
就看怎么用啦

是的,技术本无正邪之分
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

QQ|手机版|小黑屋|不学网

GMT+8, 2018-7-23 08:12

Powered by Discuz! X3.4

© 2001-2017 Comsenz Inc.

快速回复 返回顶部 返回列表