或者
问答详情页顶部banner图
您的位置:首页 >推广 > 其他 > 其他 > 如何hook文件拷贝实现数据拦截

如何hook文件拷贝实现数据拦截

提问者:浅吟流离  |   分类:其他  |   浏览139次  |   悬赏分:2积分 2017-03-28 08:22:24

我要回答

提 交

匿名

  • x***g

    先给不懂钩子的人简单介绍一下原理:所谓hook,既钩子。hook会在应用程序接到消息之前,拦截应用程序的信息,比如鼠标键盘钩子会拦截一个应用程序的鼠标键盘信息。要做盗号木马?用WH_KEYBOARD类型的hook 1.我们要跨进程使用钩子,要把hook函数写在DLL文件中,这是微软明确规定的。也有其他方法,这里不多叙述 2.在DLL文件中 设置钩子. 这里需要调用线程ID,threadId,我们会在下面调用DLL的调用端中写入 hhookGetMsg=::SetWindowsHookEx(WH_GETMESSAGE,GetMessageHookProc,::GetModuleHandle(TEXT("dll.dll")),threadId); //参数1:钩子类型 //参数2:钩子处理函数 //参数3:钩子所在的模块 //参数4:钩子要拦截的线程ID,如果要设置全局钩子,这里给0。 把这个SetWindowsHookEx()函数写在一个导出函数中,允许调用dll文件的程序调用 _declspec(dllexport) void SetHook(DWORD threadId) { hhookGetMsg=::SetWindowsHookEx(WH_GETMESSAGE,GetMessageHookProc,::GetModuleHandle(TEXT("dll.dll")),threadId); } SetHook()就是本dll的导出函数 3.在钩子处理函数中写入功能,当钩子截取到WM_NULL消息的时候,注入DLL文件。由于WM_NULL消息,是个没用的消息,应用程序一般不会收到这个消息,除非我们自己发送一个这个消息,所以我们在注入DLL的时候,只要给要注入的应用程序发一个WM_NULL消息,当钩子截取到WM_NULL的时候就注入钩子,就可以了。 LRESULT CALLBACK GetMessageHookProc(int nCode,WPARAM wParam,LPARAM lParam) { MSG* pMsg=(MSG*)lParam; if(WM_NULL==pMsg->message) ::LoadLibraryW(TEXT("D://MyDLL.dll")); } 好了,编译DLL项目,产生DLL文件。 4.编写调用端,调用钩子 首先获取窗口句柄 HWND FindWindow( LPCTSTR lpClassName, LPCTSTR lpWindowName ); 返回窗体句柄。hWnd. hWnd=FindWindow(0,要注入dll的窗体的名称(例如:千千静听)) 利用hWnd,查找窗体线程ID threadId=GetWindowThreadProcessId(hWnd,0); 好了,我们有了线程ID了,可以调用钩子了。 SetHook(threadId); 这时钩子已经加载到目标线程中了。 向目标窗体发送WM_NULL消息 SendMessage(hWnd,WM_NULL,0,0); 钩子会在目标窗体受到消息前受到WM_NULL消息。由于钩子处理函数中做了判断,当受到WM_NULL消息时,加载DLL文件。所以DLL文件就注入到目标线程中了。

    2017-03-28 14:56:22
    评论0  |   0
问答详情中间banner