首页
社区
课程
招聘
[讨论][讨论]注入技术——消息钩子注入
发表于: 2020-9-22 15:50 3142

[讨论][讨论]注入技术——消息钩子注入

2020-9-22 15:50
3142

最近在学习几种注入技术,消息钩子注入可把我难到了,希望大佬能够指点一下。

首先本人(新手小白)对于消息钩子注入的理解:消息钩子函数(SetWindowsHookEx)是微软提供的实现消息拦截的API,当然它还可以用做DLL注入。下面是实现Dll注入的核心代码:

       //利用Windows API SetWindowsHookEx 实现注入DLL
       BOOL SetWinHKInject(char * pszDllPatn, char * pszProcess)
       {
       //加载待注入的Dll到本进程空间
       hMod = LoadLibrary(pszDllPath);
       if(!hMod)
       {
            OutputDebugString("[+] LoadLibrary error !\n");
            goto Exit;
       }
       //  获取待注入的Dll中常导出的消息钩子过程函数的地址
       lpFunc = (DWROD)GetProcAddress(hMod, "MyMessageProc");
       if (!lpFunc)
       {
           OutputDebugString("[+] GetProcAddress error!\n");
           goto Exit;
       }
       //获取待注入进程的线程ID
       dwThreadId = GetTargetThreadIdFromProcname(pszProcess);
       if (!dwThreadId)
         goto Exit;
       //调用SetWindowsHookEx实现消息钩子注入
       g_hHook = SetWindowsHookEx(
       WH_GETMESSAGE,  //WH_KEYBOARD, //WH_CALLWNDPROC.
       (HOOKPROC)lpFunc,
       hMod,
       dwThreadId
       );
  Exit:
       if (hMod)
          FreeLibrary(hMod);
       return bSuccess;
         
       }
       
          
          
      // DLL.CPP        
        BOOL  _stdcall DllMain( HANDLE hModule,
                               DWORD  ul_reason_for_call,
                               LPVOID lpReserved )
        {
          if( ul_reason_for_call == DLL_PROCESS_ATTACH )
         {
         //
         //加入你想在目标进程空间HOOK的代码
         //
           MessageBox(NULL, "SetWindowsHookEx inject success", "dll inject", MB_OK);
         }    
            return TRUE;
        }
          
        __declspec(dllexport)LRESULT MyMessageProc(int code, WPARAM wParam, LPARAM lParam)
        {
          //
          //你自己对消息的处理
          //
          return CallNextHookEx(g_hhook, code, wParam, lParam);
        }

针对上述注入代码我有以下几个问题:

  1. 为何需要加载待注入的Dll到本进程空间?

  2. 消息钩子的过程函数中的CallNextHookEx()原理是什么?(一些资料中解释它用作向下传递消息,如何向下传递?传递给谁?)

  3. 开发人员在消息钩子过程函数中具体消息能进行哪些处理?(能否用代码体现?)

  4. //加入你想在目标进程中Hook的代码  是什么意思?(用代码体现),它   与  //你自己对消息的处理    有和区别?

注:本人菜鸟一枚,希望论坛大佬能够不吝赐教,带带小弟。


[招生]科锐逆向工程师培训(2024年11月15日实地,远程教学同时开班, 第51期)

收藏
免费 0
支持
分享
最新回复 (0)
游客
登录 | 注册 方可回帖
返回
//