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

下載本文檔

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

文檔簡介

1、第三章 網(wǎng)絡平安編程根底 .*內(nèi)容提要Windows的內(nèi)部機制C言語的四個開展階段實現(xiàn)Socket編程、注冊表編程、定時器編程駐留程序編程和多線程編程。.3.1 網(wǎng)絡平安編程概述 C言語可以在Windows下編程,同樣也可以在Linux下編程。編程是一項比較綜合的任務,除了熟練運用編程工具以外,還要了解系統(tǒng)本身的內(nèi)部任務機理和編程言語。.3.1.1 Windows內(nèi)部機制 Windows是一個“基于事件的,音訊驅(qū)動的操作系統(tǒng)。用戶進展了影響窗口的動作觸發(fā)“事件系統(tǒng)檢測到后發(fā)給運用程序“音訊處置.*八個根本概念與Windows系統(tǒng)親密相關的八個根本概念分別是:窗口、程序、進程、線程音訊、事件、句

2、柄、API與SDK。.*窗 口窗口是Windows本身以及Windows 環(huán)境下的運用程序的根本界面單位窗口是顯示在屏幕上的一個矩形區(qū)域具有標題欄、形狀欄、最大化、最小化按鈕的規(guī)范方框叫窗口,按鈕也是特殊窗口是用戶與生成該窗口的運用程序間的直觀接口窗口是受運用程序控制的一部分矩形屏幕區(qū)控制窗口的大小、風格、位置及內(nèi)容用戶角度運用程序角度.*程 序通常說的程序都是指一個能讓計算機識別的文件接觸得最多的是以exe或者com作為擴展名的文件。程序一組指令的集合例如:QQ程序, 主要包括 界面外觀控制指令集 socket網(wǎng)絡通訊指令集 數(shù)據(jù)信息存儲指令集可以任何言語方式表現(xiàn):高級言語、匯編言語、機器言

3、語.*進 程進程就是運用程序的執(zhí)行實例或稱一個執(zhí)行程序,進程是程序動態(tài)的描畫。一個以exe作為擴展名的文件,在沒有被執(zhí)行的時候稱之為運用程序,當用鼠標雙擊執(zhí)行以后,就被操作系統(tǒng)作為一個進程執(zhí)行了。當關機或者在義務欄的圖標上單擊鼠標右鍵選“退出時,進程便消亡,徹底終了了生命。進程閱歷了由“創(chuàng)建到“消亡的生命期,而程序自始至終存在于他的硬盤上,不論計算機能否啟動。查看當前進程如以下圖.*查看當前進程.*線 程線程是進程的一個執(zhí)行單元,同一個進程中的各個線程對應于一組CPU指令、一組CPU存放器以及一個堆棧??梢詮南螺d工具看出來原來的下載工具是單進程單線程目前的下載工具是單進程多線程.*消 息音訊是

4、運用程序和計算機交互的途徑,在計算機上幾乎做每一個動作都會產(chǎn)生一個音訊鼠標被挪動會產(chǎn)生WM_MOUSEMOVE音訊,鼠標左鍵被按下會產(chǎn)生WM_LBUTTONDOWN的音訊鼠標右鍵按下便產(chǎn)生WM_RBUTTONDOWN音訊.*事件 、 句柄事件如在程序運轉(zhuǎn)的過程中改動窗口的大小或者挪動窗口等,都會觸發(fā)相應的“事件,從而調(diào)用相關的事件處置函數(shù)。例如:BUTTONCLICK事件,觸發(fā)ONBUTTON CLICK()事件處置函數(shù)句柄句柄是一個指針,經(jīng)過句柄就可以控制該句柄指向的對象。編寫程序總是要和各種句柄打交道的句柄是系統(tǒng)用來標識不同對象類型的工具,如窗口、菜單等,這些東西在系統(tǒng)中被視為不同類型的對

5、象,用不同的句柄將他們區(qū)分開來。例如:HWND、HDC、HBRUSH、HMENU、HPEN等等.*API與SDKAPI是系統(tǒng)為運用程序提供的一系列函數(shù)接口。英文Application Programming Interface 的縮寫,意思是“運用程序接口,SDK是英文Software Development Kit的縮寫,意思是“軟件開發(fā)工具包,微軟提供了許多專門的SDK開發(fā)包,比如DirectX開發(fā)包和語音識別開發(fā)包等等。.3.1.2 學習Windows下編程學習言語,選擇言語和工具是第一步目前的編程言語有C、C+、C#、Java和匯編言語等等。從適用的角度來講,C/C+是最好的選擇,微軟

6、公司的Visual C+是其相應開發(fā)工具.*開發(fā)工具在開發(fā)工具上,選擇比較流行的VC+6.0,而且最好是英文版本,主界面如下圖.*學習編程需求閱歷三大步1、讀程序在沒有閱讀過一份完好的源代碼之前,別指望能寫出有多好的程序!2、寫程序“萬丈高樓平底起,編程貴在動手,只需動手去寫就可以了。還要按照本身的才干循序漸進地寫3、積累功能代碼將平常本人寫的和本人曾經(jīng)讀通的程序分類保管起來,建一個屬于本人的代碼庫.3.1.3 選擇編程工具 目前流行兩大語法體系:Basic語系和C語系。同一個語系下言語的根本語法是一樣。兩大語系如下圖。C語系中,目前兩大言語如日中天:C+和Java。C+適宜做系統(tǒng)軟件的開發(fā)、

7、Java更適宜做網(wǎng)絡運用開發(fā)。雖然VC+.NET曾經(jīng)面世很久了,但是C+的開發(fā)工具目前主流依然是VC+6.0和C+ Builder6.0。Java流行的開發(fā)工具比較多,比如:IBM公司的Visual Age和Websphere Studio、Eclipse,Insprise公司JBuilder等等。.*VC+6.0目前最常用的版本是VC+6.0。VC+有一套集成開發(fā)工具,其中包括各種編輯器、編譯工具、集成調(diào)試器等等下面經(jīng)過一個程序來闡明開發(fā)工具運用:File-New選擇project,輸入各項值,如圖:.新建的是一個控制臺程序在左圖的界面下選擇創(chuàng)建工程的模板,選擇空模板“An empty pr

8、oject,點擊按鈕“Finish,出現(xiàn)工程總結窗口,如右圖所示。.為工程新加一個程序文件:File-New-FILES選擇C+Source File,取名,后進入下面界面.選擇 BUILD-Execute執(zhí)行程序,出現(xiàn)結果.*闡明程序proj3_1.cpp代碼包括三行第一行:“#include 意思是引入C+的根本輸入輸出函數(shù)庫,在C言語中引入的是“stdio.h庫。在iostream.h文件中定義了cout的功能是輸出,endl的功能是回車換行。第二行:“void main(),main()函數(shù)是C/C+的主函數(shù),void表示該函數(shù)沒有前往值。第四行:“cout Hello C+endl;

9、,“cout功能是向屏幕輸出。.3.2 C言語開展的四個階段 C言語經(jīng)過不斷的開展,在編程體系中可以將其分成四個階段。1、面向過程的C言語。2、面向?qū)ο蟮腃+言語。3、SDK編程。4、MFC編程Microsoft Foundation Class:微軟基類庫。.3.2.1 面向過程的C言語 C言語功能非常強大Linux/Unix操作系統(tǒng)就是用C言語寫的, C言語直接調(diào)用操作系統(tǒng)提供的API函數(shù)可以編寫非常強大的程序。C和C+的最主要區(qū)別是:C言語中沒有類的概念,C+在C的語法根底上引入了類Class。面向過程編程,最根本的程序用C言語編寫如proj3_2.cpp所示。案例稱號:運用C言語編程程

10、序稱號:proj3_2.cpp#include main()printf(Hello DOSn);.*案例3-1 讀取命令行參數(shù)案例稱號:讀取命令行參數(shù)程序稱號:proj3_3.cpp#include int main(int argc, char *argv )int i;for (i = 1; i argc; i+)printf(%sn, argvi);return 0;參數(shù)個數(shù)參數(shù)的值.編譯后在命令行下運轉(zhuǎn)如下.3.2.2 面向?qū)ο蟮腃+言語面向?qū)ο蟪绦蛟O計言語可以將一些變量和函數(shù)封裝到類Class中當變量被類封裝后,稱之為屬性或者數(shù)據(jù)成員當函數(shù)被類封裝后,稱之為方法或者成員函數(shù)定義好的

11、一個類,然后定義一個類的實例,這個實例就叫做對象,在C+中可以用類定義對象,運用方法如程序proj3_4.cpp所示。類屬性方法.*在C+中定義類案例稱號:在C+中運用類程序稱號:proj3_4.cpp#include class person public: int heart; char *name; int run()/定義成員函數(shù)run()heart=heart+20;return heart;定義person類屬性方法private、protected.*在C+中運用類void main()int iRunStop;person ZhangSan;ZhangS = 張三

12、;ZhangSan.heart = 72;cout姓名: ZhangS endl;cout跑步前心跳 ZhangSan.heart endl;/run()為對象的方法iRunStop = ZhangSan.run();cout跑步后心跳iRunStopendl;編譯運轉(zhuǎn)輸出結果如圖.*將類定義與實現(xiàn)分別類的定義放在.h文件中,實現(xiàn)放在.cpp文件中,詳細如proj3_5所示在proj3_5.h中有class person public: int heart; char *name; int run();.*將類定義與實現(xiàn)分別在proj3_5.cpp中有#include #incl

13、ude “proj3_5.hint person: run() heart=heart+20; return heart;void main()int iRunStop;person ZhangSan;ZhangS = 張三;ZhangSan.heart = 72;cout姓名: ZhangS endl;cout跑步前心跳 ZhangSan.heart endl;iRunStop = ZhangSan.run();cout跑步后心跳iRunStopendl;.3.2.3 SDK編程C庫提供了許多函數(shù),可以直接拿來運用。比如利用C庫提供的DeleteFile函數(shù)來刪除

14、一個文件,如程序proj3_6.cpp所示。案例稱號:調(diào)用C庫函數(shù)程序稱號:proj3_6.cpp#include #include int main()DeleteFile(C:test.txt);printf(刪除勝利n);return 0;執(zhí)行結果如右圖C庫函數(shù)提供.*編寫窗口運用程序編寫對話框的語法如下面程序案例稱號:編寫對話框程序稱號:proj3_7.cpp#include int WINAPI WinMain (HINSTANCE hInstance, HINSTANCE hPrevInstance, PSTR szCmdLine, int iCmdShow)MessageBox

15、(NULL, TEXT (Hello, Windows!), TEXT (HelloMsg), MB_OK) ;return 0 ;編譯執(zhí)行結果如圖.*編寫窗口運用程序工程類型要改為WIN32 Application,如圖WIN32 Console Application主函數(shù)為main()WIN32 Application主函數(shù)為WinMain().*編寫窗口運用程序WinMain (HINSTANCE hInstance, HINSTANCE hPrevInstance, PSTR szCmdLine, int iCmdShow)參數(shù)一:hInstance 是當前實例的句柄。在這里hIns

16、tance表示運用程序本身。參數(shù)二: hPrevInstance總是為NULL,在Windows早期版本中運用,在32位版本中,一致程序運轉(zhuǎn)方式改動了,不在需求了!參數(shù)三: szCmdLine是運轉(zhuǎn)程序的命令行參數(shù)四:iCmdShow用于指定程序窗口最初的顯示方式,可以正常顯示,也可以在初始化就最大化或者最小化。.案例3-2 利用SDK函數(shù)創(chuàng)建窗口 程序稱號:proj3_8.cpp#include WNDCLASS wc;HWND h_wnd;MSG msg;/* 音訊處置函數(shù)wndProc的聲明*/long WINAPI WindowProc(HWND,UINT,WPARAM,LPARAM)

17、;窗口對象窗口句柄Windows音訊對象.案例3-2 利用SDK函數(shù)創(chuàng)建窗口/* winMain 函數(shù)的聲明*/int PASCAL WinMain(HINSTANCE h_CurInstance,HINSTANCE h_PrevInstance,LPSTR p_CmdLine,int m_Show) /*初始化wndclass構造變量*/ wc.lpfnWndProc =WindowProc; wc.hInstance =h_CurInstance;wc.hbrBackground=(HBRUSH)GetStockObject(WHITE_BRUSH);wc.lpszClassName =T

18、heMainClass;/* 注冊WndClass構造變量*/RegisterClass(&wc);.案例3-2 利用SDK函數(shù)創(chuàng)建窗口/* 創(chuàng)建窗口*/h_wnd=CreateWindow(TheMainClass,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.wPa

19、ram );注冊的窗口名窗口標題窗口款式窗口左上角的位置窗口寬度與高度程序當前句柄將音訊發(fā)送給Windowproc.案例3-2 利用SDK函數(shù)創(chuàng)建窗口/* 定義音訊處置函數(shù)*/long WINAPI WindowProc(HWND h_wnd,UINT WinMsg,WPARAM w_param,LPARAM l_param)if(WinMsg=WM_DESTROY)PostQuitMessage(0);return DefWindowProc(h_wnd,WinMsg,w_param,l_param);執(zhí)行結果如右圖.3.2.4 MFC編程 SDK的功能非常強大,需求記很多的函數(shù)微軟將SDK

20、的函數(shù)分類進展封裝,這樣就誕生了MFCMicrosoft Foundation Class。MFC程序的最根本的程序骨架如proj3_9.cpp所示。.3.2.4 MFC編程#includeclass sample:public CFrameWndpublic:sample() /構造函數(shù)Create(NULL,My Window);MessageBox(My Window,CFrame constructor); class App:public CWinApppublic:BOOL InitInstance();BOOL ExitInstance();類承繼.3.2.4 MFC編程/Ini

21、tInstance函數(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);return TRUE;/ExitInstance函數(shù)定義BOOL App:ExitInstance()MessageBox(0,My Window,ExitInstance, MB_OK|MB_ICONHAND);return TRUE;/創(chuàng)建運用程

22、序?qū)ο驛pp appobject;.3.2.4 MFC編程假設配置的執(zhí)行方式與前面一樣,那么會出錯.3.2.4 MFC編程兩種處理方法新建工程時選擇 MFC AppWizard(exe)在原來根底上,project-setting設置中修正,如圖.3.2.4 MFC編程程序首先執(zhí)行最一行:App appobject;聲明了一個App對象實例,將自動調(diào)用InitInstance()執(zhí)行第一句 MessageBox(0, My Window, InitInstance, MB_OK|MB_ICONASTERISK);彈出第一個對話框.3.2.4 MFC編程接著程序執(zhí)行 sample *obj; o

23、bj=new sample;當Sample類對象實例化時自動調(diào)用構造函數(shù) sample() /構造函數(shù)Create(NULL,My Window);MessageBox(My Window,CFrame constructor);彈出對話框.3.2.4 MFC編程接著程序執(zhí)行m_pMainWnd=obj;obj-ShowWindow(SW_SHOWMAXIMIZED);顯示主窗口(最大化).3.2.4 MFC編程當退出主窗口時,系統(tǒng)自動調(diào)用ExitInstance()執(zhí)行MessageBox(0,My Window,ExitInstance, MB_OK|MB_ICONHAND);彈出窗口如右

24、圖.案例3-3 MFC的事件處置機制#includeclass sample:public CFrameWndpublic:sample() /構造函數(shù)Create(NULL,My Window); void OnLButtonDown(UINT,CPoint) MessageBox(“You clicked the left Mouse Button,“Hello world“,0); void OnRButtonDown(UINT,CPoint) MessageBox(“You clicked the right Mouse Button,“Hello world“,0); DECLARE

25、_MESSAGE_MAP(); .案例3-3 MFC的事件處置機制BEGIN_MESSAGE_MAP(sample,CFrameWnd)ON_WM_LBUTTONDOWN()ON_WM_RBUTTONDOWN()END_MESSAGE_MAP()class App:public CWinApppublic:BOOL InitInstance();BOOL ExitInstance();/InitInstance函數(shù)的定義/BOOL App :InitInstance()sample *obj;obj=new sample;m_pMainWnd=obj;obj-ShowWindow(SW_SHO

26、WMAXIMIZED);return TRUE;.案例3-3 MFC的事件處置機制/ExitInstance函數(shù)定義BOOL App:ExitInstance()return TRUE;/創(chuàng)建運用程序?qū)ο驛pp appobject;編譯運轉(zhuǎn)會在按下左鍵,右鍵時彈出對話框.3.3 網(wǎng)絡平安編程 網(wǎng)絡平安根底編程技術主要包括6個方面:Socket編程注冊表編程文件系統(tǒng)編程定時器編程駐留程序編程多線程編程。.3.3.1 Socket編程談網(wǎng)絡平安編程分開網(wǎng)絡編程就會大失其味,凡是基于網(wǎng)絡運用的程序都離不開Socket。Socket的意思是套接字,是計算機與計算機之間通訊的接口。Socket網(wǎng)絡編程普

27、通采用效力器/客戶機方式,有兩種不同的套接字流套接字數(shù)據(jù)報套接字.流套接字的編程時序圖如下效力器 客戶機 Socket()bind()listen()accept()read()write()close()Socket()connect()read()write()close()銜接懇求數(shù)據(jù)懇求應對數(shù)據(jù).數(shù)據(jù)報套接字的編程時序圖如下效力器 客戶機 Socket()bind()readfrom()sendto()close()Socket()bind()readfrom()sendto()close()效力懇求效力應對.3.3.1 Socket編程運用Winsock提供的API函數(shù)是最根本的網(wǎng)絡

28、編程技術程序proj3_11.cpp利用Socket獲得本機的IP地址和機器名附加:利用socket編程實現(xiàn)掃描網(wǎng)站端口.3.3.1 Socket編程案例稱號:運用Socket得到IP地址程序稱號:proj3_11.cpp#include #include void CheckIP(void) /CheckIP函數(shù),用于獲取本機IP地址 WORD wVersionRequested;/用于存放Winsock版本的值 WSADATA wsaData;char name255;/用于存放主機名PHOSTENT hostinfo;wVersionRequested = MAKEWORD( 2, 0

29、);/調(diào)用MAKEWORD()函數(shù)獲得Winsock的版本,用于加載Winsock庫.3.3.1 Socket編程 if ( WSAStartup( wVersionRequested, &wsaData ) = 0 ) /加載Winsock庫,假設WSAStartup()函數(shù)的前往值為0,闡明加載勝利if( gethostname ( name, sizeof(name) = 0) /判別能否勝利的將本地主機名存放入由name參數(shù)指定的緩沖區(qū)中 if(hostinfo = gethostbyname(name) != NULL) /假設獲得主機名勝利的話,調(diào)用inet_ntoa()函數(shù)獲得I

30、P地址 LPCSTR ip = inet_ntoa ( *(struct in_addr *)*hostinfo-h_addr_list); printf(本機的IP地址是:%sn,ip);/輸出IP地址 printf(本機的稱號是:%sn,name); WSACleanup( );/卸載Winsock庫,并釋放一切資源 int main()CheckIP();/調(diào)用CheckIP()函數(shù)獲得并輸出IP地址return 0;.3.3.1 Socket編程由于采用main()函數(shù),所以工程采用“WIn32 Console Application編譯執(zhí)行,出現(xiàn)錯誤,如圖.3.3.1 Socket編

31、程消除錯誤的方法是在project-settings-link-Object/library modules,參與“WS_32.lib.3.3.1 Socket編程再編譯執(zhí)行就可得到.*利用Socket實現(xiàn)簡單掃描器程序清單如下:#include #include “stdio.h#progma comment(lib,ws2_32)#include #include void main()WSADATA ws; SOCKET s;struct sockaddr_in addr;int RESULT;long lRESULT;.*利用Socket實現(xiàn)簡單掃描器for (int i=1;i200

32、;i+) lRESULT=WSAStartup(0 x0101,&ws);s=socket(PF_INET,SOCK_STREAM,0); addr.sin_family=PF_INET; addr.sin_addr.s_addr=inet_addr(“58);addr.sin_port=htons(i); if (s=INVALID_SOCKET) break; RESULT=connect(s,(struct sockaddr*)&addr,sizeof(addr); if(RESULT!=0)/銜接失敗,闡明該端口沒開放 printf(“162.105.195.

33、158:%i inactiven,i); WSACleanup(); else printf(“58:%i activen,i); Closesocket(s); 這樣可以實現(xiàn)對某一網(wǎng)站的端口掃描建立銜接.3.3.2 注冊表編程 注冊表在計算機中由鍵名和鍵值組成,注冊表中存儲了Window操作系統(tǒng)的一切配置。黑客90%以上對Windows的攻擊手段都離不開讀寫注冊表。在運轉(zhuǎn)窗口中輸入“regedit命令可以進入注冊表,注冊表的界面如下圖。 .3.3.2 注冊表編程注冊表的句柄可以由調(diào)用RegOpenKeyEx()和RegCreateKeyEx()函數(shù)得到的經(jīng)過函數(shù)Re

34、gQueryValueEx()可以查詢注冊表某一項的值;經(jīng)過函數(shù)RegSetValueEx()可以設置注冊表某一項的值RegCreateKeyEx()函數(shù)和RegSetValueEx()函數(shù)的運用方法如程序proj3_12.cpp所示.案例稱號:操作注冊表#include #include main() HKEY hKey1; DWORD dwDisposition; LONG lRetCode; /創(chuàng)建 lRetCode = RegCreateKeyEx ( HKEY_LOCAL_MACHINE, SOFTWAREMicrosoftWindows NTCurrentVersionIniFil

35、eMappingWebSecurity, 0, NULL, REG_OPTION_NON_VOLATILE, KEY_WRITE, NULL, &hKey1, &dwDisposition); /假設創(chuàng)建失敗,顯示出錯信息 if (lRetCode != ERROR_SUCCESS) printf (Error in creating WebSecurity keyn); return (0) ; ./設置第一個鍵值lRetCode = RegSetValueEx ( hKey1, Hack_Name, 0, REG_SZ, (byte*)sixage, 100); /設置第二個鍵值lRetC

36、ode = RegSetValueEx ( hKey1, Hack_Hobby, 0, REG_SZ, (byte*)Running, 100); /假設創(chuàng)建失敗,顯示出錯信息 if (lRetCode != ERROR_SUCCESS) printf ( Error in setting Section1 valuen); return (0) ; printf(注冊表編寫勝利!n);return(0); .編譯運轉(zhuǎn)結果:.*判別能否中了“冰河 中了“冰河的計算機注冊表都將被修正了,修正了擴展名為txt的文件的翻開方式,在注冊表中txt文件的翻開方式定義在HKEY_CLASSES_ROOT主

37、鍵下的“txtfileshellopencommand中,如下圖。.*判別能否中了“冰河案例稱號:判別能否中了“冰河程序稱號:proj3_13.cpp#include #include main() HKEY hKEY; LPCTSTR data_Set = txtfileshellopencommand; long ret0 = (RegOpenKeyEx(HKEY_CLASSES_ROOT,data_Set, 0, KEY_READ,&hKEY); if(ret0 != ERROR_SUCCESS) /假設無法翻開hKEY,那么終止程序的執(zhí)行 return 0; .*判別能否中了“冰河/查

38、詢有關的數(shù)據(jù)LPBYTE owner_Get = new BYTE80; DWORD type_1 = REG_EXPAND_SZ ; DWORD cbData_1 = 80; long ret1=RegQueryValueEx(hKEY, NULL, NULL,&type_1, owner_Get, &cbData_1); if(ret1!=ERROR_SUCCESS) return 0; if(strcmp(const char *)owner_Get,%systemroot%system32notepad.exe %1) = 0)printf(沒有中冰河);elseprintf(能夠中了

39、冰河);printf(n);鍵名為默許看注冊表.編譯執(zhí)行結果:.*案例3-6 更改登錄用戶名 當用戶登錄系統(tǒng)以后,注冊表中就會自動記下用戶名,下次登錄時再把登錄名顯示出來,如下圖。.案例3-6 更改登錄用戶名當非法入侵計算機以后,同樣會留下非法登錄的用戶名,所以需求將用戶名修正回原來的值。該用戶名記錄在注冊表的HKEY_LOCAL_MACHINE主鍵下的SOFTWAREMicrosoftWindows NTCurrentVersionWinlogon子鍵中,鍵的稱號是:DefaultUserName,如下圖。.*程序更改系統(tǒng)登錄用戶案例稱號:更改系統(tǒng)登錄用戶程序稱號:proj3_14.cpp#

40、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 creating appname.ini keyn); return (0) ; lRetCode = RegSetValueEx ( hKey1, Defau

41、ltUserName, 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); .編譯執(zhí)行當我們重啟時,登錄界面為.3.3.3 文件系統(tǒng)編程文件系統(tǒng)編程非常的重要,可以在DOS命令行下執(zhí)行的操作都可以運用程序?qū)崿F(xiàn)。在DOS命令行下運用命令“net user Hacker /add添加一個用戶,同樣可以在程序中實現(xiàn),如程序

42、proj3_15.cpp所示編譯執(zhí)行后可看到,曾經(jīng)添加用戶HACKER源代碼如下頁.#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;Info.lpTitle=NULL;Info.cbReserved2=0;Info.lpReserved2=NULL;bSuccess

43、=CreateProcess(NULL,szCMD,NULL,NULL,false,NULL,NULL,NULL,&Info,&piProcInfo);if(!bSuccess)printf(創(chuàng)建進程失??!);return 1;.*文件拷貝和挪動案例稱號:文件拷貝和挪動程序稱號:proj3_16.cpp#include #include main()CopyFile(C:File1.txt,C:File2.txt,TRUE);MoveFile(C:File1.txt,C:File3.txt);return 1;編譯執(zhí)行后看到新的文件原有文件假設已存在file2.txt,那么覆蓋重命名.*系統(tǒng)時

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

45、行一次。在程序中加載定時器,如程序proj3_18所示。.3.3.4 定時器編程案例稱號:定時器編程程序稱號: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 p_CmdLine,int m_Show).3.3.4定時器編程

46、/*初始化wndclass構造變量*/wc.lpfnWndProc =WindowProc;wc.hInstance =h_CurInstance;wc.hbrBackground =(HBRUSH)GetStockObject(WHITE_BRUSH);wc.lpszClassName =TheMainClass;/* 注冊WndClass構造變量*/RegisterClass(&wc);/* 創(chuàng)建窗口*/h_wnd=CreateWindow(TheMainClass,Our first Window,WS_OVERLAPPEDWINDOW,0,0,400,500,0,0,h_CurInst

47、ance,0);/* 顯示窗口*/ShowWindow(h_wnd,SW_SHOWMAXIMIZED);/*音訊循環(huán)*/while(GetMessage(&msg,NULL,0,0) DispatchMessage(&msg);return (msg.wParam );.3.3.4定時器編程#define ID_TIMER 1/* 定義音訊處置函數(shù)*/long WINAPI WindowProc(HWND h_wnd,UINT WinMsg, WPARAM w_param,LPARAM l_param)static BOOL fFlipFlop = FALSE ;HBRUSH hBrush ;

48、HDC hdc ;PAINTSTRUCT ps ;RECT rc ;.3.3.4定時器編程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 ;case WM_PAINT :hdc = BeginPaint (h_wnd, &ps) ;GetClientRect (h_wnd, &r

49、c) ;hBrush = CreateSolidBrush (fFlipFlop ? RGB(255,0,0) : RGB(0,0,255) ;設置定時器觸發(fā).3.3.4定時器編程FillRect (hdc, &rc, hBrush) ;EndPaint (h_wnd, &ps) ;DeleteObject (hBrush) ;return 0 ;case WM_DESTROY :KillTimer (h_wnd, ID_TIMER) ;PostQuitMessage (0) ;return 0 ;return DefWindowProc(h_wnd,WinMsg,w_param,l_para

50、m);編譯執(zhí)行出現(xiàn)紅藍交替顯示窗口取消定時器.3.3.5 駐留程序編程 普通程序運轉(zhuǎn)時都有窗口普通后門或病毒程序是后臺運轉(zhuǎn)的即駐留程序其實編寫駐留程序很方便,在上述 proj3_18.cpp中將ShowWindow()函數(shù)的“SW_SHOWMAXMIZED改為“SW_HIDE即可。可參看proj3_19.cpp中 ShowWindow(h_wnd, SW_HIDE);.3.3.5 駐留程序編程編譯執(zhí)行沒有任何顯示,翻開義務管理器,可以看到proj3_19.exe正在運轉(zhuǎn).3.3.5 駐留程序編程程序運轉(zhuǎn)時不顯示界面,為了實現(xiàn)自動駐留,普通有兩種方法更改注冊表啟動項讓該程序與用戶的某一操作關聯(lián)比

51、如:“冰河木馬采用第二種方法當用戶雙擊擴展名為txt的文本文件時,自動加載“冰河程序.案例3-7 “冰河原型 第一種方法實現(xiàn)起來比較簡單,注冊表的自啟動項的鍵值在“HKEY_LOCAL_MACHINE主鍵下的“SOFTWAREMicrosoftWindowsCurrentVersion Run子鍵中,如下圖可手工可程序添加.案例3-7 “冰河原型第二種方法的實現(xiàn)是運用“HKEY_CLASSES_ROOT主鍵下“txtfileshellopencommand鍵程序?qū)崿F(xiàn)的功能是:當用戶雙擊翻開一個文本文件時,先啟動要駐留的程序,然后再啟動記事本翻開這個文本文件。關鍵:用戶雙擊的文本文件地址如何經(jīng)過

52、駐留程序傳送給記事本。.案例3-7 “冰河原型第一步,先修正注冊表關聯(lián)可手工可程序在“HKEY_CLASSES_ROOT主鍵下“txtfileshellopencommand鍵值改為駐留程序e:proj3_20.exe %1第二步就是實現(xiàn)關鍵部分,關鍵部分實現(xiàn)方法如proj3_20.cpp程序.案例3-7 “冰河原型proj3_20.cpp源程序如下:#include WNDCLASS wc;HWND h_wnd;MSG msg;/* 音訊處置函數(shù)wndProc的聲明*/long WINAPI WindowProc(HWND,UINT,WPARAM,LPARAM);/* winMain 函數(shù)的

53、聲明*/int PASCAL WinMain(HINSTANCE h_CurInstance, HINSTANCE h_PrevInstance,LPSTR p_CmdLine,int m_Show).案例3-7 “冰河原型BOOL bSuccess;PROCESS_INFORMATION piProcInfo;STARTUPINFO Info;Info.cb = sizeof(STARTUPINFO);Info.lpReserved = NULL;Info.lpDesktop = NULL;Info.lpTitle = NULL;Info.cbReserved2 = 0;Info.lpRes

54、erved2 = NULL;char lpAppName100;strcpy(lpAppName, notepad.exe );建立一個可以執(zhí)行DOS命令的對象.案例3-7 “冰河原型if(strcmp(p_CmdLine,)!=0) strcat(lpAppName, p_CmdLine);bSuccess=CreateProcess(NULL,lpAppName,NULL,NULL,false,NULL,NULL,NULL,&Info,&piProcInfo);/*初始化wndclass構造變量*/wc.lpfnWndProc =WindowProc;wc.hInstance =h_CurInstance;wc.hbrBackground =(HBRUSH)GetStockObject(WHITE_BRUSH);wc.lpszClassName =TheMainClass;實現(xiàn)記事本翻開文件以下就是本

溫馨提示

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

評論

0/150

提交評論