網(wǎng)絡(luò)安全編程基礎(chǔ)_第1頁
網(wǎng)絡(luò)安全編程基礎(chǔ)_第2頁
網(wǎng)絡(luò)安全編程基礎(chǔ)_第3頁
網(wǎng)絡(luò)安全編程基礎(chǔ)_第4頁
網(wǎng)絡(luò)安全編程基礎(chǔ)_第5頁
已閱讀5頁,還剩60頁未讀, 繼續(xù)免費閱讀

下載本文檔

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

文檔簡介

第三章網(wǎng)絡(luò)安全編程基礎(chǔ)3.1網(wǎng)絡(luò)安全編程概述3.2C語言發(fā)展的4個階段3.3網(wǎng)絡(luò)安全編程

第1頁內(nèi)容提要網(wǎng)絡(luò)安全編程主要涉及的是操作系統(tǒng)編程,在Windows平臺下,目前主要采用C/C++語言。本章將介紹Windows操作系統(tǒng)的基本原理以及C語言的四個發(fā)展階段,每一階段都用典型的案例說明。詳細說明在網(wǎng)絡(luò)安全領(lǐng)域如何使用C/C++語言實現(xiàn)Socket編程、注冊表編程、定時器編程、駐留程序編程和多線程編程。2網(wǎng)絡(luò)安全編程概述從理論上說,任何一門語言可以在任何一個操作系統(tǒng)上編程,C語言可以在Windows下編程,同樣也可以在Linux下編程。編程是一項比較綜合的工作,除了熟練使用編程工具以外,還要了解系統(tǒng)本身的內(nèi)部工作機理和編程語言。3Windows內(nèi)部機制Windows是一個“基于事件的,消息驅(qū)動的”操作系統(tǒng)。在Windows下執(zhí)行一個程序,只要用戶進行了影響窗口的動作(如改變窗口大小或移動、單擊鼠標等)該動作就會觸發(fā)一個相應(yīng)的“事件”。系統(tǒng)每次檢測到一個事件時,就會給程序發(fā)送一個“消息”,從而使程序可以處理該事件。每次檢測到一個用戶事件,程序就對該事件做出響應(yīng),處理完以后,再等待下一個事件的發(fā)生。4八個基本概念與Windows系統(tǒng)密切相關(guān)的八個基本概念分別是:窗口、程序、進程、線程消息、事件、句柄、API與SDK。51、窗口窗口是Windows本身以及Windows環(huán)境下的應(yīng)用程序的基本界面單位,但是很多人都誤以為只有具有標題欄、狀態(tài)欄、最大化、最小化按鈕這樣標準的方框才叫窗口。其實窗口的概念很廣,例如按鈕和對話框等也是窗口哦,只不過是一種特殊的窗口罷了。62、程序通常說的程序都是指一個能讓計算機識別的文件接觸得最多的是以exe或者com作為擴展名的文件。73、進程進程就是應(yīng)用程序的執(zhí)行實例(或稱一個執(zhí)行程序),進程是程序動態(tài)的描述。一個以exe作為擴展名的文件,在沒有被執(zhí)行的時候稱之為應(yīng)用程序,當用鼠標雙擊執(zhí)行以后,就被操作系統(tǒng)作為一個進程執(zhí)行了。當關(guān)機或者在任務(wù)欄的圖標上單擊鼠標右鍵選“退出”時,進程便消亡,徹底結(jié)束了生命。進程經(jīng)歷了由“創(chuàng)建”到“消亡”的生命期,而程序自始至終存在于你的硬盤上,不管計算機是否啟動。84、線程線程是進程的一個執(zhí)行單元,同一個進程中的各個線程對應(yīng)于一組CPU指令、一組CPU寄存器以及一個堆棧。進程本來就具有動態(tài)的含義,是通過線程來體現(xiàn)的。95、消息消息是應(yīng)用程序和計算機交互的途徑,在計算機上幾乎做每一個動作都會產(chǎn)生一個消息鼠標被移動會產(chǎn)生WM_MOUSEMOVE消息,鼠標左鍵被按下會產(chǎn)生WM_LBUTTONDOWN的消息,鼠標右鍵按下便產(chǎn)生WM_RBUTTONDOWN消息等等。10事件句句柄::6、事件件從字面面意思思就可可以明明白它它的含含義,,如在在程序序運行行的過過程中中改變變窗口口的大大小或或者移移動窗窗口等等,都都會觸觸發(fā)相相應(yīng)的的“事事件””,從從而調(diào)調(diào)用相相關(guān)的的事件件處理理函數(shù)數(shù)。7、句柄柄:單單一一個““柄””字便便可以以解釋釋它的的意思思了,,句柄柄是一一個指指針,,通過過句柄柄就可可以控控制該該句柄柄指向向的對對象。。編寫寫程序序總是是要和和各種種句柄柄打交交道的的,句句柄是是系統(tǒng)統(tǒng)用來來標識識不同同對象象類型型的工工具,,如窗窗口、、菜單單等,,這些些東西西在系系統(tǒng)中中被視視為不不同類類型的的對象象,用用不同同的句句柄將將他們們區(qū)分分開來來。118、API與SDKAPI是英文文ApplicationProgrammingInterface的縮寫寫,意意思是是“應(yīng)應(yīng)用程程序接接口””,泛泛指系系統(tǒng)為為應(yīng)用用程序序提供供的一一系列列函數(shù)數(shù)接口口。在編程程的時時候可可以直直接調(diào)調(diào)用,,而不不必知知道其其內(nèi)部部實現(xiàn)現(xiàn)的過過程,,只知知道它它的原原型和和返回回值就就可以以了。。SDK是英文文SoftwareDevelopmentKit的縮寫寫,意意思是是“軟軟件開開發(fā)工工具包包”,,微軟軟提供供了許許多專專門的的SDK開發(fā)包包,比比如DirectX開發(fā)包包和語語音識識別開開發(fā)包包等等等。12學(xué)習(xí)Windows下編程學(xué)習(xí)語言,,選擇語言言和工具是是第一步,,而且是非非常重要的的一步工作作,目前的的編程語言言那么多,,有C、C++、C#、Java和匯匯編語言等等等。雖然有很多多語言,只只要精通一一門就夠了了。從實用用的角度來來講,C/C++是是最好的選選擇,而微微軟公司的的VisualC++和Insprise公公司(原Borland公司司)的C++Builder是其相相應(yīng)開發(fā)工工具的兩大大主流。13開發(fā)工具在開發(fā)工具具上,選擇擇比較流行行的VC++6.0,而且最最好是英文文版本,主主界面如圖圖3-2所所示。14學(xué)習(xí)編程需需要經(jīng)歷三三大步學(xué)習(xí)編程需需要經(jīng)歷三三大步:一一、讀程序序;二、寫寫程序;三三、積累功功能代碼段段。1、讀程序在沒有閱讀讀過一份完完整的源代代碼之前,,別指望能能寫出有多多好的程序序!讀程序序必須具備備一定的語語言基礎(chǔ)知知識,基礎(chǔ)礎(chǔ)知識主要要是指語法法知識,最最起碼要能能讀懂程序序的每一行行意思。有有沒有程序序的設(shè)計思思想,在這這個時期并并不重要,,只要具備備一定的語語法基礎(chǔ)就就可以了。。學(xué)一門語言言并不需要要刻意去記記條條框框框的語法,,看代碼的的時候,遇遇到了不明明白的地方方再去查相相關(guān)的資料料,補充基基礎(chǔ)知識再再配合源程程序的思路路,這時的的理解才是是最深刻的的。2、寫程序剛開始寫程程序,不要要奢望一下下子寫出很很出色的程程序來,““萬丈高樓樓平底起””,編程貴貴在動手,,只要動手手去寫就可可以了。此此外,還要要依照自身身的能力循循序漸進地地寫,開始始的時候?qū)憣懸稽c功能能簡單的、、篇幅短小小的代碼,,力求簡潔潔、完整,,然后在此此基礎(chǔ)上進進行擴充,,一點點的的添加功能能。3、積累功能能代碼積累非常的的重要,將將平時自己己寫的和自自己已經(jīng)讀讀通的程序序分類保存存起來,建建一個屬于于自己的代代碼庫,需需要相關(guān)功功能的時候候,就到代代碼庫中找找相關(guān)的代代碼。這樣樣既提高編編碼的效率率又提高了了正確率。。15選擇編程工工具目前流行兩兩大語法體體系:Basic語系和C語系。同一一個語系下下語言的基基本語法是是一樣。兩兩大語系如如圖3-3所示。C語系中,目目前兩大語語言如日中中天:C++和Java。C++適宜做系統(tǒng)統(tǒng)軟件的開開發(fā)、Java更適宜做網(wǎng)網(wǎng)絡(luò)應(yīng)用開開發(fā)。雖然VC++.NET已經(jīng)面世很很久了,但但是C++的開發(fā)工具具目前主流流依然是VC++6.0和C++Builder6.0。Java流行的開發(fā)發(fā)工具比較較多,比如如:IBM公司的VisualAge和WebsphereStudio,Insprise公司JBuilder等等。16VC++6.0VC++是基于C/C++的集成開發(fā)發(fā)工具,目目前最常用用的版本是是VC++6.0。VC++有一套集成成開發(fā)工具具,其中包包括各種編編輯器、編編譯工具、、集成調(diào)試試器等等。。在編寫程程序的過程程中,各種種操作都可可以通過單單擊相應(yīng)的的菜單完成成。17新建的是一一個控制臺臺程序可以看到許許多工程類類型,這里里新建的是是一個控制制臺程序,,選擇“Win32ConsoleApplication””,選選擇擇工工程程存存放放的的路路徑徑,,然然后后輸輸入入工工程程名名““proj3_1””,然然后后點點擊擊按按鈕鈕““OK””。出出現(xiàn)現(xiàn)的的界界面面如如圖圖3-5所示示。。在圖圖3-5的界界面面下下選選擇擇創(chuàng)創(chuàng)建建工工程程的的模模板板,,選選擇擇空空模模板板““Anemptyproject””,點點擊擊按按鈕鈕““Finish””,出出現(xiàn)現(xiàn)工工程程總總結(jié)結(jié)窗窗口口,,如如圖圖3-6所示示。18編程程工工具具的的使使用用案例例名名稱稱::編編程程工工具具的的使使用用程序序名名稱稱::proj3_1.cpp#include<iostream.h>voidmain(){cout<<"HelloC++"<<endl;}19編程程工工具具的的使使用用程序序proj3_1.cpp代碼碼包包括括三三行行第一一行行::““#include<iostream.h>””意思思是是引引入入C++的基基本本輸輸入入輸輸出出函函數(shù)數(shù)庫庫,,在在C語言言中中引引入入的的是是““stdio.h””庫。。在在iostream.h文件件中中定定義義了了cout的功功能能是是輸輸出出,,endl的功能是回車車換行。第二行:“voidmain()”,main()函數(shù)是C/C++的主函數(shù),void表示該函數(shù)沒沒有返回值。。第四行:“cout<<"HelloC++"<<endl;””,“cout<<”功能是向屏幕幕輸出。20C語言發(fā)展的的四個階段C語言經(jīng)過不斷斷的發(fā)展,在在編程體系中中可以將其分分成四個階段段。1、面向過程的的C語言。2、面向?qū)ο蟮牡腃++語言。3、SDK編程。4、MFC編程(MicrosoftFoundationClass:微軟基類庫庫)。21面向過程的C語言C語言功能非常常強大,Linux/Unix操作系統(tǒng)就是是用C語言寫的,C語言直接調(diào)用用操作系統(tǒng)提提供的API函數(shù)可以編寫寫非常前大的的程序。C和C++的最主要區(qū)別別是:C語言中沒有類類的概念,C++在C的語法基礎(chǔ)上上引入了類((Class),所以C++和C的語法是基本本相同的。面面向過程編程程,最基本的的程序用C語言編寫如proj3_2.cpp所示。案例名稱:使使用C語言編程程序名稱:proj3_2.cpp#include<stdio.h>main(){printf("HelloDOS\n");}22案例3-1讀讀取命令行行參數(shù)main函數(shù)是程序的的主函數(shù),程程序執(zhí)行的時時候先從main函數(shù)開始。該函數(shù)可以帶帶參數(shù),第一一個參數(shù)是int型的,第二個個參數(shù)是字符符指針,具體體使用方法如如proj3_3.cpp所示。案例名稱:讀讀取命令行參參數(shù)程序名稱:proj3_3.cpp#include<stdio.h>intmain(intargc,char*argv[]){inti;for(i=1;i<argc;i++){printf("%s\n",argv[i]);}return0;}23面向?qū)ο蟮腃++語言面向?qū)ο蟪绦蛐蛟O(shè)計語言可可以將一些變變量和函數(shù)封封裝到類(Class)中,當變量量被類封裝后后,稱之為屬屬性或者數(shù)據(jù)據(jù)成員,當函函數(shù)被類封裝裝后,稱之為為方法或者成成員函數(shù)。定義好的一個個類,然后定定義一個類的的實例,這個個實例就叫做做對象,在C++中可以用類定定義對象,使使用方法如程程序proj3_4.cpp所示。24在C++中使使用類案例名稱:在在C++中使用類程序名稱:proj3_4.cpp#include<iostream.h>classperson{public:intheart;char*name;intrun()//定義成員函數(shù)數(shù)run(){heart=heart+20;returnheart;}};25voidmain(){intiRunStop;personZhangSan;ZhangS="張三";ZhangSan.heart=72;cout<<"姓名:"<<ZhangS<<endl;cout<<"跑步前心跳"<<ZhangSan.heart<<endl;//run()為對象的方法法iRunStop=ZhangSan.run();cout<<"跑步后心跳"<<iRunStop<<endl;}26SDK編程C庫提供了許多多函數(shù),可以以直接拿來使使用。比如利利用C庫提供的DeleteFile函數(shù)來刪除一一個文件,如如程序proj3_6.cpp所示。案例名稱:調(diào)調(diào)用C庫函數(shù)程序名稱:proj3_6.cpp#include<stdio.h>#include<windows.h>intmain(){DeleteFile("C:\\test.txt");printf("刪除成功\n");return0;}27編寫窗口應(yīng)用用程序案例名稱:編編寫對話框程序名稱:proj3_7.cpp#include<windows.h>intWINAPIWinMain(HINSTANCEhInstance,HINSTANCEhPrevInstance,PSTRszCmdLine,intiCmdShow){MessageBox(NULL,TEXT("Hello,Windows!"),TEXT("HelloMsg"),MB_OK);return0;}28編寫窗口應(yīng)用用程序參數(shù)一:hInstance是當前實例的的句柄。句柄柄是windows編程極其重要要的概念。它它是一個整數(shù)數(shù),用于標識識程序、窗口口和資源等。。在這里hInstance表示應(yīng)用程序序本身。參數(shù)二:hPrevInstance總是為NULL,在Windows早期版本中,,當多次同時時運行同一個個程序時,系系統(tǒng)會創(chuàng)建該該程序的多個個“實例”,,同一程序的的所有實例共共享代碼和內(nèi)內(nèi)存。程序需需要檢查hPrevInstance來判斷自身的的其他實例是是否正在運行行,以便從已已經(jīng)存在的實實例中獲取數(shù)數(shù)據(jù)。在32位版本中,統(tǒng)統(tǒng)一程序運行行方式改變了了,不在需要要了!參數(shù)三:lpCmdLine是運行程序的的命令行。用用戶可以單擊擊”開始”菜菜單中的”運運行“選項,,然后輸入命命令來運行一一個程序,并并且可以指定定運行程序所所需的參數(shù),,這里的命令令由lpCmdLine傳入。參數(shù)四:nCmdShow用于指定程序序窗口最初的的顯示模式,,可以正常顯顯示,也可以以在初始化就就最大化或者者最小化。29利用SDK函函數(shù)創(chuàng)建窗口口#include<windows.h>WNDCLASSwc;HWNDh_wnd;MSGmsg;/*消息處理函數(shù)數(shù)wndProc的聲明*/longWINAPIWindowProc(HWND,UINT,WPARAM,LPARAM);/*winMain函數(shù)的聲明*/intPASCALWinMain(HINSTANCEh_CurInstance,HINSTANCEh_PrevInstance,LPSTRp_CmdLine,intm_Show){/*初始化wndclass結(jié)構(gòu)變量*/wc.lpfnWndProc=WindowProc;wc.hInstance=h_CurInstance;wc.hbrBackground=(HBRUSH)GetStockObject(WHITE_BRUSH);wc.lpszClassName="TheMainClass";30/*注冊WndClass結(jié)構(gòu)變量*/RegisterClass(&wc);/*創(chuàng)建窗口*/h_wnd=CreateWindow("TheMainClass","OurfirstWindow",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ù)*/longWINAPIWindowProc(HWNDh_wnd,UINTWinMsg,WPARAMw_param,LPARAMl_param){if(WinMsg==WM_DESTROY)PostQuitMessage(0);returnDefWindowProc(h_wnd,WinMsg,w_param,l_param);}31MFC編程SDK的功能能非常強大,,需要記很多多的函數(shù),當當面向?qū)ο缶幘幊坛蔀橹髁髁鞯臅r候,微微軟將SDK的函數(shù)分類類進行封裝,,這樣就誕生生了MFC((MicrosoftFoundationClass)。MFC程序的的最基本的程程序骨架如proj3_9.cpp所示。32MFC編程程#include<afxwin.h>classsample:publicCFrameWnd{public:sample()//構(gòu)造函函數(shù){Create(NULL,"MyWindow");MessageBox("MyWindow","CFrameconstructor");}};classApp:publicCWinApp{public:BOOLInitInstance();BOOLExitInstance();};33//InitInstance函數(shù)的的定義義//BOOLApp::InitInstance(){MessageBox(0,"MyWindow","InitInstance",MB_OK|MB_ICONASTERISK);sample*obj;obj=newsample;m_pMainWnd=obj;obj->ShowWindow(SW_SHOWMAXIMIZED);returnTRUE;}//ExitInstance函數(shù)定定義BOOLApp::ExitInstance(){MessageBox(0,"MyWindow","ExitInstance",MB_OK|MB_ICONHAND);returnTRUE;}//創(chuàng)建應(yīng)應(yīng)用程程序?qū)ο驛ppappobject;34網(wǎng)絡(luò)安安全編編程網(wǎng)絡(luò)安安全基基礎(chǔ)編編程技技術(shù)主主要包包括6個方面面:Socket編程注冊表表編程程文件系系統(tǒng)編編程定時器器編程程駐留程程序編編程多線程程編程程。35Socket編編程談網(wǎng)絡(luò)絡(luò)安全全編程程離開開網(wǎng)絡(luò)絡(luò)編程程就會會大失失其味味,凡凡是基基于網(wǎng)網(wǎng)絡(luò)應(yīng)應(yīng)用的的程序序都離離不開開Socket。Socket的意思思是套套接字字,是是計算算機與與計算算機之之間通通信的的接口口。使用Winsock提供的的API函數(shù)是是最基基本的的網(wǎng)絡(luò)絡(luò)編程程技術(shù)術(shù),程程序proj3_11.cpp利用Socket獲得本本機的的IP地址和和機器器名。。36Socket編編程案例名稱稱:使使用Socket得到IP地址程序名名稱::proj3_11.cpp#include<winsock.h>#include<stdio.h>voidCheckIP(void)//CheckIP函數(shù),,用于于獲取取本機機IP地址{WORDwVersionRequested;//WORD類型變變量,,用于于存放放Winsock版本的的值WSADATAwsaData;charname[255];//用于存存放主主機名名PHOSTENThostinfo;wVersionRequested=MAKEWORD(2,0);//調(diào)用MAKEWORD()函數(shù)獲獲得Winsock的版本本,用用于加加載Winsock庫intmain(){CheckIP();//調(diào)用CheckIP()函數(shù)獲獲得并并輸出出IP地址return0;}37if(WSAStartup(wVersionRequested,&wsaData)==0){//加載Winsock庫,如如果WSAStartup()函數(shù)的的返回回值為為0,說明明加載載成功功if(gethostname(name,sizeof(name))==0){//判斷是是否成成功的的將本本地主主機名名存放放入由由name參數(shù)指指定的的緩沖沖區(qū)中中if((hostinfo=gethostbyname(name))!=NULL){//如果果獲獲得得主主機機名名成成功功的的話話,,調(diào)調(diào)用用inet_ntoa()函數(shù)數(shù)取取得得IP地址址LPCSTRip=inet_ntoa(*(structin_addr*)*hostinfo->h_addr_list);printf("本機機的的IP地址址是是::%s\n",ip);//輸出出IP地址址printf("本機機的的名名稱稱是是::%s\n",name);}}WSACleanup();//卸載載Winsock庫,,并并釋釋放放所所有有資資源源}}38注冊冊表表編編程程注冊冊表表在在計計算算機機中中由由鍵鍵名名和和鍵鍵值值組組成成,,注注冊冊表表中中存存儲儲了了Window操作作系系統(tǒng)統(tǒng)的的所所有有配配置置。。黑黑客客90%以上上對對Windows的攻攻擊擊手手段段都都離離不不開開讀讀寫寫注注冊冊表表。。在運運行行窗窗口口中中輸輸入入““regedit””命令令可可以以進進入入注注冊冊表表,,注注冊冊表表的的界界面面如如圖圖3-37所示示。。39注冊冊表表編編程程注冊表的的句柄可可以由調(diào)調(diào)用RegOpenKeyEx()和RegCreateKeyEx()函數(shù)得到到的,通通過函數(shù)數(shù)RegQueryValueEx()可以查詢詢注冊表表某一項項的值通過函數(shù)數(shù)RegSetValueEx()可以設(shè)置置注冊表表某一項項的值。。RegCreateKeyEx()函數(shù)和RegSetValueEx()函數(shù)的使使用方法法如程序序proj3_12.cpp所示。40操作注冊冊表#include<stdio.h>#include<windows.h>main(){HKEYhKey1;DWORDdwDisposition;LONGlRetCode;//創(chuàng)建lRetCode=RegCreateKeyEx(HKEY_LOCAL_MACHINE,"SOFTWARE\\Microsoft\\WindowsNT\\CurrentVersion\\IniFileMapping\\WebSecurity",0,NULL,REG_OPTION_NON_VOLATILE,KEY_WRITE,NULL,&hKey1,&dwDisposition);//如果創(chuàng)建建失敗,,顯示出出錯信息息if(lRetCode!=ERROR_SUCCESS){printf("ErrorincreatingWebSecuritykey\n");return(0);}41//設(shè)置第一一個鍵值值lRetCode=RegSetValueEx(hKey1,"Hack_Name",0,REG_SZ,(byte*)"sixage",100);//設(shè)置第二二個鍵值值lRetCode=RegSetValueEx(hKey1,"Hack_Hobby",0,REG_SZ,(byte*)"Running",100);//如果創(chuàng)建建失敗,,顯示出出錯信息息if(lRetCode!=ERROR_SUCCESS){printf("ErrorinsettingSection1value\n");return(0);}printf("注冊表編編寫成功功!\n");return(0);}42判斷是否否中了““冰河””中了“冰冰河”的的計算機機注冊表表都將被被修改了了,修改改了擴展展名為txt的文件的的打開方方式,在在注冊表表中txt文件的打打開方式式定義在在HKEY_CLASSES_ROOT主鍵下的的“txtfile\shell\open\command”中,如圖圖3-40所示。43案例3-6更更改登錄錄用戶名名當用戶登登錄系統(tǒng)統(tǒng)以后,,注冊表表中就會會自動記記下用戶戶名,下下次登錄錄時再把把登錄名名顯示出出來,如如圖3-42所示。44案例3-6更更改登錄錄用戶名名當非法入入侵計算算機以后后,同樣樣會留下下非法登登錄的用用戶名,,所以需需要將用用戶名修修改會原原來的值值。該用戶名名記錄在在注冊表表的HKEY_LOCAL_MACHINE主鍵下的的SOFTWARE\Microsoft\WindowsNT\CurrentVersion\Winlogon子鍵中,,鍵的名名稱是::DefaultUserName,如圖3-43所示。45更改系統(tǒng)統(tǒng)登錄用用戶案例名稱稱:更改改系統(tǒng)登登錄用戶戶程序名稱稱:proj3_14.cpp#include<stdio.h>#include<windows.h>main(){HKEYhKey1;LONGlRetCode;lRetCode=RegOpenKeyEx(HKEY_LOCAL_MACHINE,"SOFTWARE\\Microsoft\\WindowsNT\\CurrentVersion\\Winlogon",0,KEY_WRITE,&hKey1);if(lRetCode!=ERROR_SUCCESS){printf("Errorincreatingappname.inikey\n");return(0);}46lRetCode=RegSetValueEx(hKey1,"DefaultUserName",0,REG_SZ,(byte*)"Hacker_sixage",20);if(lRetCode!=ERROR_SUCCESS){printf("ErrorinsettingSection1value\n");return(0);}printf("已經(jīng)將登登錄名該該成Hacker_sixage");return(0);}47文件系統(tǒng)統(tǒng)編程文件系統(tǒng)統(tǒng)編程非非常的重重要,可可以在DOS命令行下下執(zhí)行的的操作都都可以使使用程序序?qū)崿F(xiàn)。。在DOS命令行下下使用命命令“netuserHacker/add”添加一個個用戶,,同樣可可以在程程序中實實現(xiàn),如如程序proj3_15.cpp所示。案例名稱稱:添加加系統(tǒng)用用戶程序名稱稱:proj3_15.cpp48#include<stdio.h>#include<windows.h>main(){char*szCMD="netuserHacker/add";BOOLbSuccess;PROCESS_INFORMATIONpiProcInfo;STARTUPINFOInfo;Info.cb=sizeof(STARTUPINFO);Info.lpReserved=NULL;Info.lpDesktop=NULL;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)建進程程失?。?!");return1;}49文件拷貝貝和移動動案例名稱稱:文件件拷貝和和移動程序名稱稱:proj3_16.cpp#include<stdio.h>#include<windows.h>main(){CopyFile("C:\\File1.txt","C:\\File2.txt",TRUE);MoveFile("C:\\File1.txt","C:\\File3.txt");return1;}50系統(tǒng)時間間案例名稱稱:系統(tǒng)統(tǒng)時間程序名稱稱:proj3_17.cpp#include<windows.h>#include<stdio.h>main(){SYSTEMTIMEsysTime;GetLocalTime(&sysTime);printf("%d年%d月%d日%d時%d分%d秒\n",sysTime.wYear,sysTime.wMonth,sysTime.wDay,sysTime.wHour,sysTime.wMinute,sysTime.wSecond);return1;}51定時器編程程著名的“CIH病毒”每年年定時發(fā)作作,其中需需要利用定定時器來控控制程序的的執(zhí)行。定定時器程序序分成兩大大類,一類是循環(huán)環(huán)執(zhí)行另一類是根根據(jù)條件只只執(zhí)行一次次。在程序序中加載定定時器,如如程序proj3_18所示。52定時器編程程案例名稱::定時器編編程程序名稱::proj3_18.cpp#include<windows.h>WNDCLASSwc;HWNDh_wnd;MSGmsg;/*消息處理函函數(shù)wndProc的聲明*/longWINAPIWindowProc(HWND,UINT,WPARAM,LPARAM);/*winMain函數(shù)的聲明明*/intPASCALWinMain(HINSTANCEh_CurInstance,HINSTANCEh_PrevInstance,LPSTR53p_CmdLine,intm_Show){/*初始化wndclass結(jié)構(gòu)變量*/wc.lpfnWndProc=WindowProc;wc.hInstance=h_CurInstance;wc.hbrBackground=(HBRUSH)GetStockObject(WHITE_BRUSH);wc.lpszClassName="TheMainClass";/*注冊WndClass結(jié)構(gòu)變量*/RegisterClass(&wc);/*創(chuàng)建窗口*/h_wnd=CreateWindow("TheMainClass","OurfirstWindow",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);}#defineID_TIMER154定時器編程程/*定義消息處處理函數(shù)*/longWINAPIWindowProc(HWNDh_wnd,UINTWinMsg,WPARAMw_param,LPARAMl_param){staticBOOLfFlipFlop=FALSE;HBRUSHhBrush;HDChdc;PAINTSTRUCTps;RECTrc;switch(WinMsg){caseWM_CREATE:SetTimer(h_wnd,ID_TIMER,1000,NULL);return0;caseWM_TIMER:MessageBeep(-1);fFlipFlop=!fFlipFlop;InvalidateRect(h_wnd,NULL,FALSE);return0;55caseWM_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);return0;caseWM_DESTROY:KillTimer(h_wnd,ID_TIMER);PostQuitMessage(0);return0;}returnDefWindowProc(h_wnd,WinMsg,w_param,l_param);}56案例3-7“冰河河”原型第一種方法法實現(xiàn)起來來比較簡單單,注冊表表的自啟動動項的鍵值值在“HKEY_LOCAL_MACHINE”主鍵下的““SOFTWARE\Microsoft\Windows\CurrentVersion\Run”子鍵中,如如圖3-51所示。57多線程編程程用多線程技技術(shù)編程有有兩大優(yōu)點點:1

溫馨提示

  • 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. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負責。
  • 6. 下載文件中如有侵權(quán)或不適當內(nèi)容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

最新文檔

評論

0/150

提交評論