鱼C论坛

 找回密码
 立即注册
12
返回列表 发新帖

[已解决]CBT Hook 不生效

[复制链接]
 楼主| 发表于 2019-4-20 14:22:59 | 显示全部楼层
人造人 发表于 2019-4-19 21:06
我成功了,虽然说我也不知道我是怎么成功的^_^

你先看一看这个代码

老哥,你用的什么ide啊,vc++么,我的win10,vs2017打开报一堆错
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2019-4-20 14:30:27 | 显示全部楼层
人造人 发表于 2019-4-19 21:06
我成功了,虽然说我也不知道我是怎么成功的^_^

你先看一看这个代码


我感觉我应该知道了,这样看来,ProcessExplorer应该是看不到dll的注入的,那应该是代码都没问题,应该就是软件看不到而已!!!
感谢老哥的帮助
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2019-4-20 15:13:35 | 显示全部楼层
灬DanE「`私はキ 发表于 2019-4-20 14:22
老哥,你用的什么ide啊,vc++么,我的win10,vs2017打开报一堆错

vs2017
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2019-4-20 15:13:19 | 显示全部楼层
灬DanE「`私はキ 发表于 2019-4-20 14:22
老哥,你用的什么ide啊,vc++么,我的win10,vs2017打开报一堆错

vs2017
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2019-4-20 15:15:19 | 显示全部楼层
我这边卡了,多发了一个
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2019-4-20 15:26:35 | 显示全部楼层
GIF.gif
GIF1.gif
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2019-4-20 19:34:05 | 显示全部楼层

我去,你那里居然真的能看到,那我之前的,你有试过么,能注入成功么,,,难道是我系统的问题,我win10,64位系统,看不到dll的注入!!
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2019-4-20 19:48:54 | 显示全部楼层

哦,我看了,notepad++里面确实有,不过还有个疑问, WH_CBT,不是号称全局注册么,为啥只有notepad++里面有这个dll,其他的我看了下,除了mfc本身的程序外,其他的地方都没有这个dll嘞
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2019-4-20 20:06:34 | 显示全部楼层
灬DanE「`私はキ 发表于 2019-4-20 19:48
哦,我看了,notepad++里面确实有,不过还有个疑问, WH_CBT,不是号称全局注册么,为啥只有notepad++里 ...

你的代码无法成功注入应该是CBTProc中没有代码,我添加了下面的代码就能成功注入了
  1. LRESULT CALLBACK CBTProc(int nCode, WPARAM wParam, LPARAM lParam)
  2. {
  3.         CHAR szBuf[128];
  4.         CHAR szCode[128];
  5.         static int c = 0;
  6.         size_t cch;
  7.         HRESULT hResult;

  8.         if(nCode < 0)  // do not process message
  9.                 return CallNextHookEx(m_hook, nCode, wParam,
  10.                         lParam);

  11.         switch(nCode)
  12.         {
  13.         case HCBT_ACTIVATE:
  14.                 hResult = StringCchCopy(szCode, 128 / sizeof(TCHAR), "HCBT_ACTIVATE");
  15.                 if(FAILED(hResult))
  16.                 {
  17.                 // TODO: write error handler
  18.                 }
  19.                 break;

  20.         case HCBT_CLICKSKIPPED:
  21.                 hResult = StringCchCopy(szCode, 128 / sizeof(TCHAR), "HCBT_CLICKSKIPPED");
  22.                 if(FAILED(hResult))
  23.                 {
  24.                 // TODO: write error handler
  25.                 }
  26.                 break;

  27.         case HCBT_CREATEWND:
  28.                 hResult = StringCchCopy(szCode, 128 / sizeof(TCHAR), "HCBT_CREATEWND");
  29.                 if(FAILED(hResult))
  30.                 {
  31.                 // TODO: write error handler
  32.                 }
  33.                 break;

  34.         case HCBT_DESTROYWND:
  35.                 hResult = StringCchCopy(szCode, 128 / sizeof(TCHAR), "HCBT_DESTROYWND");
  36.                 if(FAILED(hResult))
  37.                 {
  38.                 // TODO: write error handler
  39.                 }
  40.                 break;

  41.         case HCBT_KEYSKIPPED:
  42.                 hResult = StringCchCopy(szCode, 128 / sizeof(TCHAR), "HCBT_KEYSKIPPED");
  43.                 if(FAILED(hResult))
  44.                 {
  45.                 // TODO: write error handler
  46.                 }
  47.                 break;

  48.         case HCBT_MINMAX:
  49.                 hResult = StringCchCopy(szCode, 128 / sizeof(TCHAR), "HCBT_MINMAX");
  50.                 if(FAILED(hResult))
  51.                 {
  52.                 // TODO: write error handler
  53.                 }
  54.                 break;

  55.         case HCBT_MOVESIZE:
  56.                 hResult = StringCchCopy(szCode, 128 / sizeof(TCHAR), "HCBT_MOVESIZE");
  57.                 if(FAILED(hResult))
  58.                 {
  59.                 // TODO: write error handler
  60.                 }
  61.                 break;

  62.         case HCBT_QS:
  63.                 hResult = StringCchCopy(szCode, 128 / sizeof(TCHAR), "HCBT_QS");
  64.                 if(FAILED(hResult))
  65.                 {
  66.                 // TODO: write error handler
  67.                 }
  68.                 break;

  69.         case HCBT_SETFOCUS:
  70.                 hResult = StringCchCopy(szCode, 128 / sizeof(TCHAR), "HCBT_SETFOCUS");
  71.                 if(FAILED(hResult))
  72.                 {
  73.                 // TODO: write error handler
  74.                 }
  75.                 break;

  76.         case HCBT_SYSCOMMAND:
  77.                 hResult = StringCchCopy(szCode, 128 / sizeof(TCHAR), "HCBT_SYSCOMMAND");
  78.                 if(FAILED(hResult))
  79.                 {
  80.                 // TODO: write error handler
  81.                 }
  82.                 break;

  83.         default:
  84.                 hResult = StringCchCopy(szCode, 128 / sizeof(TCHAR), "Unknown");
  85.                 if(FAILED(hResult))
  86.                 {
  87.                 // TODO: write error handler
  88.                 }
  89.                 break;
  90.         }
  91.         hResult = StringCchPrintf(szBuf, 128 / sizeof(TCHAR), "CBT -  nCode: %s, tsk: %ld, %d times   ",
  92.                 szCode, wParam, c++);
  93.         if(FAILED(hResult))
  94.         {
  95.         // TODO: write error handler
  96.         }
  97.         hResult = StringCchLength(szBuf, 128 / sizeof(TCHAR), &cch);
  98.         if(FAILED(hResult))
  99.         {
  100.         // TODO: write error handler
  101.         }
  102.         std::string s(szBuf, szBuf + cch);
  103.         SendMessage(FindWindowEx(FindWindow("Notepad", NULL), NULL, "Edit", NULL), WM_SETTEXT, 0, (LPARAM)s.c_str());

  104.         return CallNextHookEx(m_hook, nCode, wParam, lParam);
  105. }
复制代码
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2019-4-20 20:08:09 | 显示全部楼层
灬DanE「`私はキ 发表于 2019-4-20 19:48
哦,我看了,notepad++里面确实有,不过还有个疑问, WH_CBT,不是号称全局注册么,为啥只有notepad++里 ...

notepad++有,理论上其他也应该有,这个应该有某种保护机制,我研究研究
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2019-4-20 20:24:20 | 显示全部楼层
我试了,的确有一些程序无法注入,但是大部分可以注入(应该是大部分吧,vs2017可以,吞食鱼可以,notepad++可以),貌似是普通应用程序就可以,像操作系统的explorer就不行,操作系统自带的看图软件也不行,至于这类软件为什么不行,那就是你之后需要研究的内容了

还有
举个例子,你打开了notepad++,打开了MFC_Hook,按下了Hook按钮,这时操作系统并不会把Game.dll注入到notepad++进程,只有你返回notepad++进行操作(例如点了一下鼠标,或者按了一下键盘),这时操作系统才把Game.dll加载到notepad++进程

什么是动态链接库,什么是动态链接?
这就是动态链接,只有用到了,才链接
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2019-4-20 21:40:39 | 显示全部楼层
人造人 发表于 2019-4-20 20:24
我试了,的确有一些程序无法注入,但是大部分可以注入(应该是大部分吧,vs2017可以,吞食鱼可以,notepad+ ...

我突然间发现,当我把之前我的代码,编译成x64 平台的时候,记事本是能注入的,但是notepad++就没办法了,不知道是不是因为和x86 和  x64有关
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2019-4-20 21:44:50 | 显示全部楼层
灬DanE「`私はキ 发表于 2019-4-20 21:40
我突然间发现,当我把之前我的代码,编译成x64 平台的时候,记事本是能注入的,但是notepad++就没办法了 ...

应该是吧
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2019-4-20 21:52:09 | 显示全部楼层
灬DanE「`私はキ 发表于 2019-4-20 21:40
我突然间发现,当我把之前我的代码,编译成x64 平台的时候,记事本是能注入的,但是notepad++就没办法了 ...

嗯,我试了一下,编译成x64以后,系统的explorer也可以注入了
但是notepad++就不行了
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2019-4-20 21:56:03 | 显示全部楼层
人造人 发表于 2019-4-20 21:52
嗯,我试了一下,编译成x64以后,系统的explorer也可以注入了
但是notepad++就不行了

嗯,他应该和有用程序的版本有关吧,可能notepad++是X86 的,explorer是x64的,所以 64位的注入dll,只能注入64位的程序,32位的dll只能注入32位的程序
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2019-4-20 22:00:18 | 显示全部楼层
灬DanE「`私はキ 发表于 2019-4-20 21:56
嗯,他应该和有用程序的版本有关吧,可能notepad++是X86 的,explorer是x64的,所以 64位的注入dll,只能 ...

小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

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

本版积分规则

小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备18085999号-1 | 粤公网安备 44051102000585号)

GMT+8, 2025-7-16 08:47

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

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