欧美性猛交XXXX免费看蜜桃,成人网18免费韩国,亚洲国产成人精品区综合,欧美日韩一区二区三区高清不卡,亚洲综合一区二区精品久久

打開(kāi)APP
userphoto
未登錄

開(kāi)通VIP,暢享免費電子書(shū)等14項超值服

開(kāi)通VIP
給msn messager裝個(gè)鉤子 - 笨笨歷險記

最近研究怎么樣使用HOOK攔截其他應用程序的消息,于是就動(dòng)手寫(xiě)了一個(gè)鉤子程序來(lái)掛到最常用的通訊及時(shí)通訊工具M(jìn)SN,雖然沒(méi)有什么實(shí)際意義,但作為學(xué)習研究卻能夠幫助我們理解利用HOOK是怎么樣將自己編寫(xiě)的DLL注入已經(jīng)存在的程序空間中的。

我們需要做的是通過(guò)我們自己編寫(xiě)的應用程序去攔截別人寫(xiě)好的應用程序消息,實(shí)際上這是在兩個(gè)進(jìn)程之間進(jìn)行的,難度就在這里,如果是同一個(gè)進(jìn)程什么都好辦,只要將系統響應WINDOWS消息的處理函數修改為我們自己編寫(xiě)的函數就可以,但現在不能這么做,因為兩個(gè)進(jìn)程有各自的進(jìn)程地址空間,理論上你沒(méi)有辦法直接去訪(fǎng)問(wèn)別的進(jìn)程的地址空間,那么怎么辦來(lái)?辦法還是很多的,這里僅僅介紹通過(guò)HOOK來(lái)達到目的。

需要攔截別的應用程序的消息,需要利用將自己編寫(xiě)的DLL注入到別人的DLL地址空間中才可以達到攔截別人消息的目的。只有將我們的DLL插入到別的應用程序的地址空間中才能夠對別的應用程序進(jìn)行操作,HOOK幫助我們完成了這些工作,我們只需要使用HOOK來(lái)攔截指定的消息,并提供必要的處理函數就行了。我們這里介紹攔截在MSN聊天對話(huà)框上的鼠標消息,對應的HOOK類(lèi)型是WH_MOUSE。

首先我們要建立一個(gè)用來(lái)HOOK的DLL。這個(gè)DLL的建立和普通的DLL建立沒(méi)有什么具體的區別,不過(guò)我們這里提供的方法有寫(xiě)不同。這里使用隱式導入DLL的方法。代碼如下:

頭文件

#pragma once
#ifndef MSNHOOK_API
#define MSNHOOK_API __declspec(dllimport)
#endif

MSNHOOK_API BOOL WINAPI SetMsnHook(DWORD dwThreadId);//安裝MSN鉤子函數
MSNHOOK_API void WINAPI GetText(int &x,int &y,char ** ptext);//安裝MSN鉤子函數
MSNHOOK_API HWND WINAPI GetMyHwnd();//安裝MSN鉤子函數

==================================================

DLL 的CPP文件

#include "stdafx.h"
#include "MSNHook.h"
#include <stdio.h>

// 下面幾句的含義是告訴編譯器將各變量放入它自己的數據共享節中

#pragma data_seg("Shared")
HHOOK g_hhook = NULL;
DWORD g_dwThreadIdMsn = 0;
POINT  MouseLoc={0,0};
char text[256]={0};
HWND g_Hwnd  = NULL;
#pragma data_seg()

//告訴編譯器設置共享節的訪(fǎng)問(wèn)方式為:讀,寫(xiě),共享

#pragma comment(linker,"/section:Shared,rws")

HINSTANCE g_hinstDll = NULL;

BOOL APIENTRY DllMain( HANDLE hModule,
                       DWORD  ul_reason_for_call,
                       LPVOID lpReserved
      )
{
 switch (ul_reason_for_call)
 {
 case DLL_PROCESS_ATTACH:
  g_hinstDll = (HINSTANCE)hModule;
  break;
 case DLL_THREAD_ATTACH:
 case DLL_THREAD_DETACH:
 case DLL_PROCESS_DETACH:
  break;
 }
    return TRUE;
}

LRESULT WINAPI GetMsgProc(int nCode,WPARAM wParam, LPARAM lParam);

 BOOL WINAPI SetMsnHook(DWORD dwThreadId)
{
 OutputDebugString("SetMsnHook");
 BOOL fOK = FALSE;
 if(dwThreadId != 0)
 {
  OutputDebugString("SetMsnHook dwThreadId != 0");
  g_dwThreadIdMsn = GetCurrentThreadId();

//安裝WM_MOUSE鉤子和處理函數GetMsgProc
  g_hhook = SetWindowsHookEx(WH_MOUSE,GetMsgProc,g_hinstDll,dwThreadId);
  fOK = (g_hhook != NULL);
  if(fOK)
  {
   fOK = PostThreadMessage(dwThreadId,WM_NULL,0,0);
  }
  else
  {
   fOK = UnhookWindowsHookEx(g_hhook);
   g_hhook = NULL;
  }
 }
 return(fOK);
}

LRESULT WINAPI GetMsgProc(int nCode,WPARAM wParam, LPARAM lParam)
{

 char temp[20];
 sprintf(temp,"%d\n",nCode);
 OutputDebugString("temp");
 if (nCode==HC_ACTION)
 {
  MOUSEHOOKSTRUCT *l=(MOUSEHOOKSTRUCT *)lParam;
  MouseLoc=l->pt;   //送鼠標位置
  
  //char text[256] = "";
  HWND hWnd = WindowFromPoint(l->pt);
  if(hWnd)
  {
   //GetWindowText(hWnd,text,256);
   SendMessage(hWnd,WM_GETTEXT,256,(LPARAM)(LPCTSTR)text);
//   strcpy(text,"123455555");
   SendMessage(hWnd,WM_SETTEXT,256,(LPARAM)(LPCTSTR)text);
   g_Hwnd =  hWnd;
  }
  //SendMessage(WindowFromPoint(l->pt),WM_GETTEXT,256,(LPARAM)(LPCTSTR)psw);
 }

 return(CallNextHookEx(g_hhook,nCode,wParam,lParam));
}

void WINAPI GetText(int &x,int &y,char ** ptext)
{
 x = MouseLoc.x;
 y = MouseLoc.y;
 *ptext = text;
}

HWND WINAPI GetMyHwnd()
{
 return g_Hwnd;
}

上面是處理鉤子的DLL代碼,下面我們要讓這個(gè)DLL起作用還需要一個(gè)啟動(dòng)部分,通過(guò)這個(gè)啟動(dòng)部分我們才能讓我們的鉤子函數真正的注入到系統其他函數中。我們這里使用個(gè)對話(huà)框的程序,程序非常簡(jiǎn)單:一個(gè)按鈕用來(lái)啟動(dòng)鉤子,一個(gè)用來(lái)停止,一個(gè)TIMER用來(lái)刷新顯示,還有一個(gè)EDITBOX用來(lái)接受信息。

程序如下:

//包含DLL函數導出的頭文件
#include "MSNHook.h"

//隱式導入

#pragma comment(lib,"MSNHook.lib")

//聲明導入函數

__declspec(dllimport) BOOL WINAPI SetMsnHook(DWORD dwThreadId);
__declspec(dllimport) void WINAPI GetText(int &x,int &y,char ** ptext);
__declspec(dllimport) HWND WINAPI GetMyHwnd();//安裝MSN鉤子函數

void CTestMSNHookDlg::OnBnClickedOk()
{

//通過(guò)SPY++可以看到MSN聊天對話(huà)框窗口類(lèi)是IMWindowClass,通過(guò)這個(gè)得到該窗口句柄
 CWnd *pMsnWin = FindWindow(TEXT("IMWindowClass"),NULL);
 if(pMsnWin == NULL) return ;

//通過(guò)窗口句柄得到對應的線(xiàn)程的ID
 SetMsnHook(GetWindowThreadProcessId(pMsnWin->GetSafeHwnd(),NULL));
 MSG msg;
 GetMessage(&msg,NULL,0,0);
 SetTimer(101,100,NULL);
 
}

void CTestMSNHookDlg::OnTimer(UINT_PTR nIDEvent)
{

//刷新消息
 char * pText = NULL;
 int x = 0,y = 0;
 GetText(x,y,&pText);
 if(x ==0 && y ==0) return ;
 m_Edit.Format("%d:%d:%s",x,y,pText);
 //m_Edit = pText;
 UpdateData(FALSE);

 HWND hWnd = GetMyHwnd();
 CWnd * pWnd = CWnd::FromHandle(hWnd);
 pWnd->GetWindowText(m_Edit);
 CDialog::OnTimer(nIDEvent);
}

void CTestMSNHookDlg::OnBnClickedButton1()
{

//關(guān)閉
 KillTimer(101);
 SetMsnHook(0); 
 OnCancel();
}

好了,基本上就這些了。這里有個(gè)問(wèn)題,我本想得到MSN用戶(hù)聊天時(shí)輸入的聊天信息,這里通過(guò)WM_GETTEXT消息的不到,如果有知道的朋友告訴一聲。

本站僅提供存儲服務(wù),所有內容均由用戶(hù)發(fā)布,如發(fā)現有害或侵權內容,請點(diǎn)擊舉報。
打開(kāi)APP,閱讀全文并永久保存 查看更多類(lèi)似文章
猜你喜歡
類(lèi)似文章
API Hook 原理
Windows消息攔截技術(shù)的應用
鉤子技術(shù)
WinAPI: 鉤子回調函數之 JournalRecordProc
delphi 調用Call 的例子
在Windows系統中用VC 實(shí)現鉤子機制
更多類(lèi)似文章 >>
生活服務(wù)
分享 收藏 導長(cháng)圖 關(guān)注 下載文章
綁定賬號成功
后續可登錄賬號暢享VIP特權!
如果VIP功能使用有故障,
可點(diǎn)擊這里聯(lián)系客服!

聯(lián)系客服

欧美性猛交XXXX免费看蜜桃,成人网18免费韩国,亚洲国产成人精品区综合,欧美日韩一区二区三区高清不卡,亚洲综合一区二区精品久久