大學(xué)課件網(wǎng)絡(luò)安全編程基礎(chǔ)_第1頁(yè)
大學(xué)課件網(wǎng)絡(luò)安全編程基礎(chǔ)_第2頁(yè)
大學(xué)課件網(wǎng)絡(luò)安全編程基礎(chǔ)_第3頁(yè)
大學(xué)課件網(wǎng)絡(luò)安全編程基礎(chǔ)_第4頁(yè)
大學(xué)課件網(wǎng)絡(luò)安全編程基礎(chǔ)_第5頁(yè)
已閱讀5頁(yè),還剩58頁(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、大學(xué)課件網(wǎng)絡(luò)安全編程基礎(chǔ)第2頁(yè)內(nèi)容提要網(wǎng)絡(luò)安全編程主要涉及的是操作系統(tǒng)編程,在Windows平臺(tái)下,目前主要采用C/C+語(yǔ)言。本章將介紹Windows操作系統(tǒng)的基本原理以及C語(yǔ)言的四個(gè)發(fā)展階段,每一階段都用典型的案例說(shuō)明。詳細(xì)說(shuō)明在網(wǎng)絡(luò)安全領(lǐng)域如何使用C/C+語(yǔ)言實(shí)現(xiàn)Socket編程、注冊(cè)表編程、定時(shí)器編程、駐留程序編程和多線程編程。第3頁(yè)網(wǎng)絡(luò)安全編程概述 從理論上說(shuō),任何一門(mén)語(yǔ)言可以在任何一個(gè)操作系統(tǒng)上編程,C語(yǔ)言可以在Windows下編程,同樣也可以在Linux下編程。編程是一項(xiàng)比較綜合的工作,除了熟練使用編程工具以外,還要了解系統(tǒng)本身的內(nèi)部工作機(jī)理和編程語(yǔ)言。第4頁(yè)Windows內(nèi)部機(jī)制

2、 Windows是一個(gè)“基于事件的,消息驅(qū)動(dòng)的”操作系統(tǒng)。在Windows下執(zhí)行一個(gè)程序,只要用戶進(jìn)行了影響窗口的動(dòng)作(如改變窗口大小或移動(dòng)、單擊鼠標(biāo)等)該動(dòng)作就會(huì)觸發(fā)一個(gè)相應(yīng)的“事件”。系統(tǒng)每次檢測(cè)到一個(gè)事件時(shí),就會(huì)給程序發(fā)送一個(gè)“消息”,從而使程序可以處理該事件。每次檢測(cè)到一個(gè)用戶事件,程序就對(duì)該事件做出響應(yīng),處理完以后,再等待下一個(gè)事件的發(fā)生。第5頁(yè)八個(gè)基本概念與Windows系統(tǒng)密切相關(guān)的八個(gè)基本概念分別是:窗口、程序、進(jìn)程、線程消息、事件、句柄、API與SDK。第6頁(yè)1、窗口窗口是Windows本身以及Windows 環(huán)境下的應(yīng)用程序的基本界面單位,但是很多人都誤以為只有具有標(biāo)題欄、

3、狀態(tài)欄、最大化、最小化按鈕這樣標(biāo)準(zhǔn)的方框才叫窗口。其實(shí)窗口的概念很廣,例如按鈕和對(duì)話框等也是窗口哦,只不過(guò)是一種特殊的窗口罷了。第7頁(yè)2、程序通常說(shuō)的程序都是指一個(gè)能讓計(jì)算機(jī)識(shí)別的文件接觸得最多的是以exe或者com作為擴(kuò)展名的文件。第8頁(yè)3、進(jìn)程進(jìn)程就是應(yīng)用程序的執(zhí)行實(shí)例(或稱一個(gè)執(zhí)行程序),進(jìn)程是程序動(dòng)態(tài)的描述。一個(gè)以exe作為擴(kuò)展名的文件,在沒(méi)有被執(zhí)行的時(shí)候稱之為應(yīng)用程序,當(dāng)用鼠標(biāo)雙擊執(zhí)行以后,就被操作系統(tǒng)作為一個(gè)進(jìn)程執(zhí)行了。當(dāng)關(guān)機(jī)或者在任務(wù)欄的圖標(biāo)上單擊鼠標(biāo)右鍵選“退出”時(shí),進(jìn)程便消亡,徹底結(jié)束了生命。進(jìn)程經(jīng)歷了由“創(chuàng)建”到“消亡”的生命期,而程序自始至終存在于你的硬盤(pán)上,不管計(jì)算機(jī)是

4、否啟動(dòng)。第9頁(yè)4、線程線程是進(jìn)程的一個(gè)執(zhí)行單元,同一個(gè)進(jìn)程中的各個(gè)線程對(duì)應(yīng)于一組CPU指令、一組CPU寄存器以及一個(gè)堆棧。進(jìn)程本來(lái)就具有動(dòng)態(tài)的含義,是通過(guò)線程來(lái)體現(xiàn)的。第10頁(yè)5、消息消息是應(yīng)用程序和計(jì)算機(jī)交互的途徑,在計(jì)算機(jī)上幾乎做每一個(gè)動(dòng)作都會(huì)產(chǎn)生一個(gè)消息鼠標(biāo)被移動(dòng)會(huì)產(chǎn)生WM_MOUSEMOVE消息,鼠標(biāo)左鍵被按下會(huì)產(chǎn)生WM_LBUTTONDOWN的消息,鼠標(biāo)右鍵按下便產(chǎn)生WM_RBUTTONDOWN消息等等。第11頁(yè)事件 句柄:6、事件從字面意思就可以明白它的含義,如在程序運(yùn)行的過(guò)程中改變窗口的大小或者移動(dòng)窗口等,都會(huì)觸發(fā)相應(yīng)的“事件”,從而調(diào)用相關(guān)的事件處理函數(shù)。7、句柄:?jiǎn)螁我粋€(gè)“柄

5、”字便可以解釋它的意思了,句柄是一個(gè)指針,通過(guò)句柄就可以控制該句柄指向的對(duì)象。編寫(xiě)程序總是要和各種句柄打交道的,句柄是系統(tǒng)用來(lái)標(biāo)識(shí)不同對(duì)象類型的工具,如窗口、菜單等,這些東西在系統(tǒng)中被視為不同類型的對(duì)象,用不同的句柄將他們區(qū)分開(kāi)來(lái)。第12頁(yè)8、API與SDKAPI是英文Application Programming Interface 的縮寫(xiě),意思是“應(yīng)用程序接口”,泛指系統(tǒng)為應(yīng)用程序提供的一系列函數(shù)接口。在編程的時(shí)候可以直接調(diào)用,而不必知道其內(nèi)部實(shí)現(xiàn)的過(guò)程,只知道它的原型和返回值就可以了。SDK是英文Software Development Kit的縮寫(xiě),意思是“軟件開(kāi)發(fā)工具包”,微軟提供了

6、許多專門(mén)的SDK開(kāi)發(fā)包,比如DirectX開(kāi)發(fā)包和語(yǔ)音識(shí)別開(kāi)發(fā)包等等。第13頁(yè)學(xué)習(xí)Windows下編程學(xué)習(xí)語(yǔ)言,選擇語(yǔ)言和工具是第一步,而且是非常重要的一步工作,目前的編程語(yǔ)言那么多,有C、C+、C#、Java和匯編語(yǔ)言等等。雖然有很多語(yǔ)言,只要精通一門(mén)就夠了。從實(shí)用的角度來(lái)講,C/C+是最好的選擇,而微軟公司的Visual C+和Insprise公司(原Borland公司)的C+ Builder是其相應(yīng)開(kāi)發(fā)工具的兩大主流。第14頁(yè)開(kāi)發(fā)工具在開(kāi)發(fā)工具上,選擇比較流行的VC+6.0,而且最好是英文版本,主界面如圖3-2所示。第15頁(yè)學(xué)習(xí)編程需要經(jīng)歷三大步學(xué)習(xí)編程需要經(jīng)歷三大步:一、讀程序;二、寫(xiě)

7、程序;三、積累功能代碼段。1、讀程序在沒(méi)有閱讀過(guò)一份完整的源代碼之前,別指望能寫(xiě)出有多好的程序!讀程序必須具備一定的語(yǔ)言基礎(chǔ)知識(shí),基礎(chǔ)知識(shí)主要是指語(yǔ)法知識(shí),最起碼要能讀懂程序的每一行意思。有沒(méi)有程序的設(shè)計(jì)思想,在這個(gè)時(shí)期并不重要,只要具備一定的語(yǔ)法基礎(chǔ)就可以了。學(xué)一門(mén)語(yǔ)言并不需要刻意去記條條框框的語(yǔ)法,看代碼的時(shí)候,遇到了不明白的地方再去查相關(guān)的資料,補(bǔ)充基礎(chǔ)知識(shí)再配合源程序的思路,這時(shí)的理解才是最深刻的。2、寫(xiě)程序剛開(kāi)始寫(xiě)程序,不要奢望一下子寫(xiě)出很出色的程序來(lái),“萬(wàn)丈高樓平底起”,編程貴在動(dòng)手,只要?jiǎng)邮秩?xiě)就可以了。此外,還要依照自身的能力循序漸進(jìn)地寫(xiě),開(kāi)始的時(shí)候?qū)懸稽c(diǎn)功能簡(jiǎn)單的、篇幅短小的

8、代碼,力求簡(jiǎn)潔、完整,然后在此基礎(chǔ)上進(jìn)行擴(kuò)充,一點(diǎn)點(diǎn)的添加功能。3、積累功能代碼積累非常的重要,將平時(shí)自己寫(xiě)的和自己已經(jīng)讀通的程序分類保存起來(lái),建一個(gè)屬于自己的代碼庫(kù),需要相關(guān)功能的時(shí)候,就到代碼庫(kù)中找相關(guān)的代碼。這樣既提高編碼的效率又提高了正確率。第16頁(yè)選擇編程工具 目前流行兩大語(yǔ)法體系:Basic語(yǔ)系和C語(yǔ)系。同一個(gè)語(yǔ)系下語(yǔ)言的基本語(yǔ)法是一樣。兩大語(yǔ)系如圖3-3所示。C語(yǔ)系中,目前兩大語(yǔ)言如日中天:C+和Java。C+適宜做系統(tǒng)軟件的開(kāi)發(fā)、Java更適宜做網(wǎng)絡(luò)應(yīng)用開(kāi)發(fā)。雖然VC+.NET已經(jīng)面世很久了,但是C+的開(kāi)發(fā)工具目前主流依然是VC+6.0和C+ Builder6.0。Java流行

9、的開(kāi)發(fā)工具比較多,比如:IBM公司的Visual Age和Websphere Studio,Insprise公司JBuilder等等。第17頁(yè)VC+6.0VC+是基于C/C+的集成開(kāi)發(fā)工具,目前最常用的版本是VC+6.0。VC+有一套集成開(kāi)發(fā)工具,其中包括各種編輯器、編譯工具、集成調(diào)試器等等。在編寫(xiě)程序的過(guò)程中,各種操作都可以通過(guò)單擊相應(yīng)的菜單完成。第18頁(yè)新建的是一個(gè)控制臺(tái)程序可以看到許多工程類型,這里新建的是一個(gè)控制臺(tái)程序,選擇“Win32 Console Application”,選擇工程存放的路徑,然后輸入工程名“proj3_1”,然后點(diǎn)擊按鈕“OK”。出現(xiàn)的界面如圖3-5所示。在圖3

10、-5的界面下選擇創(chuàng)建工程的模板,選擇空模板“An empty project”,點(diǎn)擊按鈕“Finish”,出現(xiàn)工程總結(jié)窗口,如圖3-6所示。第19頁(yè)編程工具的使用案例名稱:編程工具的使用程序名稱:proj3_1.cpp#include void main()cout Hello C+endl;第20頁(yè)編程工具的使用程序proj3_1.cpp代碼包括三行第一行:“#include ”意思是引入C+的基本輸入輸出函數(shù)庫(kù),在C語(yǔ)言中引入的是“stdio.h”庫(kù)。在iostream.h文件中定義了cout的功能是輸出,endl的功能是回車換行。第二行:“void main()”,main()函數(shù)是C/

11、C+的主函數(shù),void表示該函數(shù)沒(méi)有返回值。第四行:“cout Hello C+endl;”,“cout”功能是向屏幕輸出。第21頁(yè)C語(yǔ)言發(fā)展的四個(gè)階段 C語(yǔ)言經(jīng)過(guò)不斷的發(fā)展,在編程體系中可以將其分成四個(gè)階段。1、面向過(guò)程的C語(yǔ)言。2、面向?qū)ο蟮腃+語(yǔ)言。3、SDK編程。4、MFC編程(Microsoft Foundation Class:微軟基類庫(kù))。第22頁(yè)面向過(guò)程的C語(yǔ)言 C語(yǔ)言功能非常強(qiáng)大,Linux/Unix操作系統(tǒng)就是用C語(yǔ)言寫(xiě)的, C語(yǔ)言直接調(diào)用操作系統(tǒng)提供的API函數(shù)可以編寫(xiě)非常前大的程序。C和C+的最主要區(qū)別是:C語(yǔ)言中沒(méi)有類的概念,C+在C的語(yǔ)法基礎(chǔ)上引入了類(Class)

12、,所以C+和C的語(yǔ)法是基本相同的。面向過(guò)程編程,最基本的程序用C語(yǔ)言編寫(xiě)如proj3_2.cpp所示。案例名稱:使用C語(yǔ)言編程程序名稱:proj3_2.cpp#include main()printf(Hello DOSn);第23頁(yè)案例3-1 讀取命令行參數(shù)main函數(shù)是程序的主函數(shù),程序執(zhí)行的時(shí)候先從main函數(shù)開(kāi)始。該函數(shù)可以帶參數(shù),第一個(gè)參數(shù)是int型的,第二個(gè)參數(shù)是字符指針,具體使用方法如proj3_3.cpp所示。案例名稱:讀取命令行參數(shù)程序名稱:proj3_3.cpp#include int main(int argc, char *argv )int i;for (i = 1;

13、 i argc; i+)printf(%sn, argvi);return 0;第24頁(yè)面向?qū)ο蟮腃+語(yǔ)言面向?qū)ο蟪绦蛟O(shè)計(jì)語(yǔ)言可以將一些變量和函數(shù)封裝到類(Class)中,當(dāng)變量被類封裝后,稱之為屬性或者數(shù)據(jù)成員,當(dāng)函數(shù)被類封裝后,稱之為方法或者成員函數(shù)。定義好的一個(gè)類,然后定義一個(gè)類的實(shí)例,這個(gè)實(shí)例就叫做對(duì)象,在C+中可以用類定義對(duì)象,使用方法如程序proj3_4.cpp所示。第25頁(yè)在C+中使用類案例名稱:在C+中使用類程序名稱:proj3_4.cpp#include class personpublic: int heart; char *name; int run()/定義成員函數(shù)ru

14、n()heart=heart+20;return heart;第26頁(yè)void main()int iRunStop;person ZhangSan;ZhangS = 張三;ZhangSan.heart = 72;cout姓名:ZhangS endl;cout跑步前心跳ZhangSan.heartendl;/run()為對(duì)象的方法iRunStop = ZhangSan.run();cout跑步后心跳iRunStopendl;第27頁(yè)SDK編程C庫(kù)提供了許多函數(shù),可以直接拿來(lái)使用。比如利用C庫(kù)提供的DeleteFile函數(shù)來(lái)刪除一個(gè)文件,如程序proj3_6.cpp所

15、示。案例名稱:調(diào)用C庫(kù)函數(shù)程序名稱:proj3_6.cpp#include #include int main()DeleteFile(C:test.txt);printf(刪除成功n);return 0;第28頁(yè)編寫(xiě)窗口應(yīng)用程序案例名稱:編寫(xiě)對(duì)話框程序名稱:proj3_7.cpp#include int WINAPI WinMain (HINSTANCE hInstance, HINSTANCE hPrevInstance, PSTR szCmdLine, int iCmdShow)MessageBox (NULL, TEXT (Hello, Windows!), TEXT (HelloMs

16、g), MB_OK) ;return 0 ;第29頁(yè)編寫(xiě)窗口應(yīng)用程序參數(shù)一:hInstance 是當(dāng)前實(shí)例的句柄。句柄是windows編程極其重要的概念。它是一個(gè)整數(shù),用于標(biāo)識(shí)程序、窗口和資源等。在這里hInstance表示應(yīng)用程序本身。參數(shù)二:hPrevInstance總是為NULL,在Windows早期版本中,當(dāng)多次同時(shí)運(yùn)行同一個(gè)程序時(shí),系統(tǒng)會(huì)創(chuàng)建該程序的多個(gè)“實(shí)例”,同一程序的所有實(shí)例共享代碼和內(nèi)存。程序需要檢查hPrevInstance來(lái)判斷自身的其他實(shí)例是否正在運(yùn)行,以便從已經(jīng)存在的實(shí)例中獲取數(shù)據(jù)。在32位版本中,統(tǒng)一程序運(yùn)行方式改變了,不在需要了!參數(shù)三:lpCmdLine是運(yùn)行程

17、序的命令行。用戶可以單擊”開(kāi)始”菜單中的”運(yùn)行“選項(xiàng),然后輸入命令來(lái)運(yùn)行一個(gè)程序,并且可以指定運(yùn)行程序所需的參數(shù),這里的命令由lpCmdLine傳入。參數(shù)四:nCmdShow用于指定程序窗口最初的顯示模式,可以正常顯示,也可以在初始化就最大化或者最小化。第30頁(yè)利用SDK函數(shù)創(chuàng)建窗口 #include WNDCLASS wc;HWND h_wnd;MSG msg;/* 消息處理函數(shù)wndProc的聲明*/long WINAPI WindowProc(HWND,UINT,WPARAM,LPARAM);/* winMain 函數(shù)的聲明*/int PASCAL WinMain(HINSTANCE h

18、_CurInstance,HINSTANCE h_PrevInstance,LPSTR p_CmdLine,int m_Show)/*初始化wndclass結(jié)構(gòu)變量*/wc.lpfnWndProc =WindowProc;wc.hInstance =h_CurInstance;wc.hbrBackground =(HBRUSH)GetStockObject(WHITE_BRUSH);wc.lpszClassName =TheMainClass;第31頁(yè)/* 注冊(cè)WndClass結(jié)構(gòu)變量*/RegisterClass(&wc);/* 創(chuàng)建窗口*/h_wnd=CreateWindow(TheMai

19、nClass,Our first Window,WS_OVERLAPPEDWINDOW,0,0,400,500,0,0,h_CurInstance,0);/* 顯示窗口*/ShowWindow(h_wnd,SW_SHOWMAXIMIZED);/*消息循環(huán)*/while(GetMessage(&msg,NULL,0,0)DispatchMessage(&msg);return (msg.wParam );/* 定義消息處理函數(shù)*/long WINAPI WindowProc(HWND h_wnd,UINT WinMsg,WPARAM w_param,LPARAM l_param)if(WinMs

20、g=WM_DESTROY)PostQuitMessage(0);return DefWindowProc(h_wnd,WinMsg,w_param,l_param);第32頁(yè)MFC編程 SDK的功能非常強(qiáng)大,需要記很多的函數(shù),當(dāng)面向?qū)ο缶幊坛蔀橹髁鞯臅r(shí)候,微軟將SDK的函數(shù)分類進(jìn)行封裝,這樣就誕生了MFC(Microsoft Foundation Class)。MFC程序的最基本的程序骨架如proj3_9.cpp所示。第33頁(yè)MFC編程#includeclass sample:public CFrameWndpublic:sample() /構(gòu)造函數(shù)Create(NULL,My Window)

21、;MessageBox(My Window,CFrame constructor); class App:public CWinApppublic:BOOL InitInstance();BOOL ExitInstance();第34頁(yè)/InitInstance函數(shù)的定義/BOOL App :InitInstance()MessageBox(0,My Window,InitInstance,MB_OK|MB_ICONASTERISK);sample *obj;obj=new sample;m_pMainWnd=obj;obj-ShowWindow(SW_SHOWMAXIMIZED);retur

22、n TRUE;/ExitInstance函數(shù)定義BOOL App:ExitInstance()MessageBox(0,My Window,ExitInstance, MB_OK|MB_ICONHAND);return TRUE;/創(chuàng)建應(yīng)用程序?qū)ο驛pp appobject;第35頁(yè)網(wǎng)絡(luò)安全編程 網(wǎng)絡(luò)安全基礎(chǔ)編程技術(shù)主要包括6個(gè)方面:Socket編程注冊(cè)表編程文件系統(tǒng)編程定時(shí)器編程駐留程序編程多線程編程。第36頁(yè)Socket編程談網(wǎng)絡(luò)安全編程離開(kāi)網(wǎng)絡(luò)編程就會(huì)大失其味,凡是基于網(wǎng)絡(luò)應(yīng)用的程序都離不開(kāi)Socket。Socket的意思是套接字,是計(jì)算機(jī)與計(jì)算機(jī)之間通信的接口。使用Winsock提供的

23、API函數(shù)是最基本的網(wǎng)絡(luò)編程技術(shù),程序proj3_11.cpp利用Socket獲得本機(jī)的IP地址和機(jī)器名。第37頁(yè)Socket編程案例名稱:使用Socket得到IP地址程序名稱:proj3_11.cpp#include #include void CheckIP(void) /CheckIP函數(shù),用于獲取本機(jī)IP地址WORD wVersionRequested;/WORD類型變量,用于存放Winsock版本的值WSADATA wsaData;char name255;/用于存放主機(jī)名PHOSTENT hostinfo;wVersionRequested = MAKEWORD( 2, 0 );/

24、調(diào)用MAKEWORD()函數(shù)獲得Winsock的版本,用于加載Winsock庫(kù)int main()CheckIP();/調(diào)用CheckIP()函數(shù)獲得并輸出IP地址return 0;第38頁(yè)if ( WSAStartup( wVersionRequested, &wsaData ) = 0 )/加載Winsock庫(kù),如果WSAStartup()函數(shù)的返回值為0,說(shuō)明加載成功if( gethostname ( name, sizeof(name) = 0) /判斷是否成功的將本地主機(jī)名存放入由name參數(shù)指定的緩沖區(qū)中if(hostinfo = gethostbyname(name) != NU

25、LL) /如果獲得主機(jī)名成功的話,調(diào)用inet_ntoa()函數(shù)取得IP地址LPCSTR ip = inet_ntoa (*(struct in_addr *)*hostinfo-h_addr_list);printf(本機(jī)的IP地址是:%sn,ip);/輸出IP地址 printf(本機(jī)的名稱是:%sn,name); WSACleanup( );/卸載Winsock庫(kù),并釋放所有資源第39頁(yè)注冊(cè)表編程 注冊(cè)表在計(jì)算機(jī)中由鍵名和鍵值組成,注冊(cè)表中存儲(chǔ)了Window操作系統(tǒng)的所有配置。黑客90%以上對(duì)Windows的攻擊手段都離不開(kāi)讀寫(xiě)注冊(cè)表。在運(yùn)行窗口中輸入“regedit”命令可以進(jìn)入注冊(cè)表,

26、注冊(cè)表的界面如圖3-37所示。 第40頁(yè)注冊(cè)表編程注冊(cè)表的句柄可以由調(diào)用RegOpenKeyEx()和RegCreateKeyEx()函數(shù)得到的,通過(guò)函數(shù)RegQueryValueEx()可以查詢注冊(cè)表某一項(xiàng)的值通過(guò)函數(shù)RegSetValueEx()可以設(shè)置注冊(cè)表某一項(xiàng)的值。RegCreateKeyEx()函數(shù)和RegSetValueEx()函數(shù)的使用方法如程序proj3_12.cpp所示。第41頁(yè)操作注冊(cè)表#include #include main() HKEY hKey1; DWORD dwDisposition; LONG lRetCode; /創(chuàng)建lRetCode = RegCrea

27、teKeyEx ( HKEY_LOCAL_MACHINE, SOFTWAREMicrosoftWindows NTCurrentVersionIniWebSecurity, 0, NULL, REG_OPTION_NON_VOLATILE, KEY_WRITE, NULL, &hKey1, &dwDisposition); /如果創(chuàng)建失敗,顯示出錯(cuò)信息 if (lRetCode != ERROR_SUCCESS) printf (Error in creating WebSecurity keyn); return (0) ; 第42頁(yè)/設(shè)置第一個(gè)鍵值lRetCode = RegSetValu

28、eEx ( hKey1, Hack_Name, 0, REG_SZ, (byte*)sixage, 100); /設(shè)置第二個(gè)鍵值lRetCode = RegSetValueEx ( hKey1, Hack_Hobby, 0, REG_SZ, (byte*)Running, 100); /如果創(chuàng)建失敗,顯示出錯(cuò)信息 if (lRetCode != ERROR_SUCCESS) printf ( Error in setting Section1 valuen); return (0) ; printf(注冊(cè)表編寫(xiě)成功!n);return(0); 第43頁(yè)判斷是否中了“冰河” 中了“冰河”的計(jì)算機(jī)

29、注冊(cè)表都將被修改了,修改了擴(kuò)展名為txt的文件的打開(kāi)方式,在注冊(cè)表中txt文件的打開(kāi)方式定義在HKEY_CLASSES_ROOT主鍵下的“txtopencommand”中,如圖3-40所示。第44頁(yè)案例3-6 更改登錄用戶名 當(dāng)用戶登錄系統(tǒng)以后,注冊(cè)表中就會(huì)自動(dòng)記下用戶名,下次登錄時(shí)再把登錄名顯示出來(lái),如圖3-42所示。第45頁(yè)案例3-6 更改登錄用戶名當(dāng)非法入侵計(jì)算機(jī)以后,同樣會(huì)留下非法登錄的用戶名,所以需要將用戶名修改會(huì)原來(lái)的值。該用戶名記錄在注冊(cè)表的HKEY_LOCAL_MACHINE主鍵下的SOFTWAREMicrosoftWindows NTCurrentVersionWinlogo

30、n子鍵中,鍵的名稱是:DefaultUserName,如圖3-43所示。第46頁(yè)更改系統(tǒng)登錄用戶案例名稱:更改系統(tǒng)登錄用戶程序名稱:proj3_14.cpp#include #include main() HKEY hKey1; LONG lRetCode; lRetCode = RegOpenKeyEx ( HKEY_LOCAL_MACHINE, SOFTWAREMicrosoftWindows NTCurrentVersionWinlogon, 0, KEY_WRITE, &hKey1); if (lRetCode != ERROR_SUCCESS) printf (Error in cr

31、eating appname.ini keyn); return (0) ; 第47頁(yè)lRetCode = RegSetValueEx ( hKey1, DefaultUserName, 0, REG_SZ, (byte*)Hacker_sixage, 20); if (lRetCode != ERROR_SUCCESS) printf ( Error in setting Section1 valuen); return (0) ; printf(已經(jīng)將登錄名該成Hacker_sixage);return(0); 第48頁(yè)文件系統(tǒng)編程文件系統(tǒng)編程非常的重要,可以在DOS命令行下執(zhí)行的操作都可

32、以使用程序?qū)崿F(xiàn)。在DOS命令行下使用命令“net user Hacker /add”添加一個(gè)用戶,同樣可以在程序中實(shí)現(xiàn),如程序proj3_15.cpp所示。案例名稱:添加系統(tǒng)用戶程序名稱:proj3_15.cpp第49頁(yè)#include #include main()char * szCMD = net user Hacker /add;BOOL bSuccess;PROCESS_INFORMATION piProcInfo;STARTUPINFO Info;Info.cb=sizeof(STARTUPINFO);Info.lpReserved=NULL;Info.lpDesktop=NULL

33、;Info.lpTitle=NULL;Info.cbReserved2=0;Info.lpReserved2=NULL;bSuccess=CreateProcess(NULL,szCMD,NULL,NULL,false,NULL,NULL,NULL,&Info,&piProcInfo);if(!bSuccess)printf(創(chuàng)建進(jìn)程失??!);return 1;第50頁(yè)文件拷貝和移動(dòng)案例名稱:文件拷貝和移動(dòng)程序名稱:proj3_16.cpp#include #include main()CopyFile(C:,C:,TRUE);MoveFile(C:,C:);return 1;第51頁(yè)系統(tǒng)時(shí)間

34、案例名稱:系統(tǒng)時(shí)間程序名稱:proj3_17.cpp#include #include main()SYSTEMTIME sysTime;GetLocalTime(&sysTime);printf(%d年%d月%d日%d時(shí)%d分%d秒n,sysTime.wYear,sysTime.wMonth,sysTime.wDay,sysTime.wHour,sysTime.wMinute,sysTime.wSecond);return 1;第52頁(yè)定時(shí)器編程 著名的“CIH病毒”每年定時(shí)發(fā)作,其中需要利用定時(shí)器來(lái)控制程序的執(zhí)行。定時(shí)器程序分成兩大類,一類是循環(huán)執(zhí)行另一類是根據(jù)條件只執(zhí)行一次。在程序中加載

35、定時(shí)器,如程序proj3_18所示。第53頁(yè)定時(shí)器編程案例名稱:定時(shí)器編程程序名稱:proj3_18.cpp#include WNDCLASS wc;HWND h_wnd;MSG msg;/* 消息處理函數(shù)wndProc的聲明*/long WINAPI WindowProc(HWND,UINT,WPARAM,LPARAM);/* winMain 函數(shù)的聲明*/int PASCAL WinMain(HINSTANCE h_CurInstance, HINSTANCE h_PrevInstance,LPSTR第54頁(yè)p_CmdLine,int m_Show)/*初始化wndclass結(jié)構(gòu)變量*/w

36、c.lpfnWndProc =WindowProc;wc.hInstance =h_CurInstance;wc.hbrBackground =(HBRUSH)GetStockObject(WHITE_BRUSH);wc.lpszClassName =TheMainClass;/* 注冊(cè)WndClass結(jié)構(gòu)變量*/RegisterClass(&wc);/* 創(chuàng)建窗口*/h_wnd=CreateWindow(TheMainClass,Our first Window,WS_OVERLAPPEDWINDOW,0,0,400,500,0,0,h_CurInstance,0);/* 顯示窗口*/Sho

37、wWindow(h_wnd,SW_SHOWMAXIMIZED);/*消息循環(huán)*/while(GetMessage(&msg,NULL,0,0)DispatchMessage(&msg);return (msg.wParam );#define ID_TIMER 1第55頁(yè)定時(shí)器編程/* 定義消息處理函數(shù)*/long WINAPI WindowProc(HWND h_wnd,UINT WinMsg, WPARAM w_param,LPARAM l_param)static BOOL fFlipFlop = FALSE ;HBRUSH hBrush ;HDC hdc ;PAINTSTRUCT ps

38、 ;RECT rc ;switch (WinMsg)case WM_CREATE:SetTimer (h_wnd, ID_TIMER, 1000, NULL) ;return 0 ;case WM_TIMER :MessageBeep (-1) ; fFlipFlop = !fFlipFlop ;InvalidateRect (h_wnd, NULL, FALSE) ;return 0 ;第56頁(yè)case WM_PAINT :hdc = BeginPaint (h_wnd, &ps) ;GetClientRect (h_wnd, &rc) ;hBrush = CreateSolidBrush (fFlipFlop ? RGB(255,0,0) : RGB(0,0,255) ;FillRect (hdc, &rc, hBrush) ;EndPaint (h_wnd, &ps) ;DeleteObject (hBrush) ;return 0 ;case WM

溫馨提示

  • 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ù)網(wǎng)僅提供信息存儲(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)論