鱼C论坛

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

[已解决]CBT Hook 不生效

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

你先看一看这个代码

老哥,你用的什么ide啊,vc++么,我的win10,vs2017打开报一堆错
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

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

你先看一看这个代码


我感觉我应该知道了,这样看来,ProcessExplorer应该是看不到dll的注入的,那应该是代码都没问题,应该就是软件看不到而已!!!
感谢老哥的帮助
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

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

vs2017
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

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

vs2017
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2019-4-20 15:15:19 | 显示全部楼层
我这边卡了,多发了一个
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2019-4-20 15:26:35 | 显示全部楼层
GIF.gif
GIF1.gif
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

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

我去,你那里居然真的能看到,那我之前的,你有试过么,能注入成功么,,,难道是我系统的问题,我win10,64位系统,看不到dll的注入!!
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

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

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

使用道具 举报

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

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

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

        switch(nCode)
        {
        case HCBT_ACTIVATE:
                hResult = StringCchCopy(szCode, 128 / sizeof(TCHAR), "HCBT_ACTIVATE");
                if(FAILED(hResult))
                {
                // TODO: write error handler
                }
                break;

        case HCBT_CLICKSKIPPED:
                hResult = StringCchCopy(szCode, 128 / sizeof(TCHAR), "HCBT_CLICKSKIPPED");
                if(FAILED(hResult))
                {
                // TODO: write error handler
                }
                break;

        case HCBT_CREATEWND:
                hResult = StringCchCopy(szCode, 128 / sizeof(TCHAR), "HCBT_CREATEWND");
                if(FAILED(hResult))
                {
                // TODO: write error handler
                }
                break;

        case HCBT_DESTROYWND:
                hResult = StringCchCopy(szCode, 128 / sizeof(TCHAR), "HCBT_DESTROYWND");
                if(FAILED(hResult))
                {
                // TODO: write error handler
                }
                break;

        case HCBT_KEYSKIPPED:
                hResult = StringCchCopy(szCode, 128 / sizeof(TCHAR), "HCBT_KEYSKIPPED");
                if(FAILED(hResult))
                {
                // TODO: write error handler
                }
                break;

        case HCBT_MINMAX:
                hResult = StringCchCopy(szCode, 128 / sizeof(TCHAR), "HCBT_MINMAX");
                if(FAILED(hResult))
                {
                // TODO: write error handler
                }
                break;

        case HCBT_MOVESIZE:
                hResult = StringCchCopy(szCode, 128 / sizeof(TCHAR), "HCBT_MOVESIZE");
                if(FAILED(hResult))
                {
                // TODO: write error handler
                }
                break;

        case HCBT_QS:
                hResult = StringCchCopy(szCode, 128 / sizeof(TCHAR), "HCBT_QS");
                if(FAILED(hResult))
                {
                // TODO: write error handler
                }
                break;

        case HCBT_SETFOCUS:
                hResult = StringCchCopy(szCode, 128 / sizeof(TCHAR), "HCBT_SETFOCUS");
                if(FAILED(hResult))
                {
                // TODO: write error handler
                }
                break;

        case HCBT_SYSCOMMAND:
                hResult = StringCchCopy(szCode, 128 / sizeof(TCHAR), "HCBT_SYSCOMMAND");
                if(FAILED(hResult))
                {
                // TODO: write error handler
                }
                break;

        default:
                hResult = StringCchCopy(szCode, 128 / sizeof(TCHAR), "Unknown");
                if(FAILED(hResult))
                {
                // TODO: write error handler
                }
                break;
        }
        hResult = StringCchPrintf(szBuf, 128 / sizeof(TCHAR), "CBT -  nCode: %s, tsk: %ld, %d times   ",
                szCode, wParam, c++);
        if(FAILED(hResult))
        {
        // TODO: write error handler
        }
        hResult = StringCchLength(szBuf, 128 / sizeof(TCHAR), &cch);
        if(FAILED(hResult))
        {
        // TODO: write error handler
        }
        std::string s(szBuf, szBuf + cch);
        SendMessage(FindWindowEx(FindWindow("Notepad", NULL), NULL, "Edit", NULL), WM_SETTEXT, 0, (LPARAM)s.c_str());

        return CallNextHookEx(m_hook, nCode, wParam, lParam);
}
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

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

notepad++有,理论上其他也应该有,这个应该有某种保护机制,我研究研究
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

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

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

什么是动态链接库,什么是动态链接?
这就是动态链接,只有用到了,才链接
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

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

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

使用道具 举报

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

应该是吧
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

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

嗯,我试了一下,编译成x64以后,系统的explorer也可以注入了
但是notepad++就不行了
想知道小甲鱼最近在做啥?请访问 -> 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位的程序
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

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

想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

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

本版积分规则

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

GMT+8, 2024-10-3 17:10

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

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