【正文】
的所有人。只有將防火墻軟件和讓病毒軟件整合起來才能更好的實(shí)現(xiàn)“安全”的意義。這次課題成功的實(shí)現(xiàn)了一個(gè)簡(jiǎn)單的個(gè)人防火墻的基本功能,使其可以根據(jù)應(yīng)用程序訪問規(guī)則可對(duì)應(yīng)用程序連網(wǎng)動(dòng)作進(jìn)行過濾;并且對(duì)應(yīng)用程序訪問規(guī)則具有一定自學(xué)習(xí)功能;同時(shí)實(shí)現(xiàn)了實(shí)時(shí)監(jiān)控、監(jiān)視網(wǎng)絡(luò)活動(dòng)。CAclSet::m_EnableComboApplication = TRUE。}CAcl *dlgAcl = (CAcl*)thisGetPage(2)。(5) 解決辦法:首先去掉通知 DLL 的代碼。利用白盒測(cè)試法進(jìn)行動(dòng)態(tài)測(cè)試時(shí),需要測(cè)試軟件產(chǎn)品的內(nèi)部結(jié)構(gòu)和處理過程,不需測(cè)試軟件產(chǎn)品的功能。第 26 頁 共 37 頁}FindAcl:根據(jù)應(yīng)用程序和名稱從控管規(guī)則中查找與之相匹配的記錄。if([iIndex].bRemoteNetType!=ACL_NET_TYPE_ALLamp。}}if(IsOne) IsOne = FALSE。BYTE bAction = ACL_ACTION_PASS。第 23 頁 共 37 頁開始調(diào)用 D L L 的進(jìn)程名是否為空 ?調(diào)用進(jìn)程是否為系統(tǒng)進(jìn)程 ?目的 I P 是否本地 I P ?檢查工作模式在控管規(guī)則中查找是否有關(guān)于這個(gè)進(jìn)程調(diào)用的規(guī)則 ?檢查這條控管規(guī)則的進(jìn)出方向和當(dāng)前連接的方向是否相同 ?檢查這條控管規(guī)則的協(xié)議和當(dāng)前連接的是否相同 ?檢查這條控管規(guī)則的 I P 和當(dāng)前連接的目的 I P 是否相同 ?檢查這條控管規(guī)則的 A c t i o n 是否為 P A S S ?檢查這條控管規(guī)則的端口和當(dāng)前連接的端口是否相同 ?返回 “ P A S S ”結(jié)束返回 “ P A S S ”返回 “ P A S S ”返回 “ P A S S ”返回 “ P A S S ”是否第一次查找 ?上一個(gè)找到的控管規(guī)則的A c t i o n 是否為 P A S S返回 “ Q U E R Y ”返回 “ D E N Y ”返回 “ P A S S ”返回 “ ” D E N Y返回 “ D E N Y ”否否否Q u e r y有相同相同相同相同是是是是P a s s A l lD e n y A l l沒有是否是否否不相同圖 控管規(guī)則比對(duì)流程圖int CCheckAcl::GetAccessFromAcl(SESSION *mSession)第 24 頁 共 37 頁{//下面的判斷語句表示:如果控管規(guī)則文件無效,進(jìn)程名無效,是本機(jī) IP或是超級(jí)進(jìn)程,則返回放行動(dòng)作。GetAccessInfo:得到訪問權(quán)限信息。CreateSession 創(chuàng)建一個(gè)新的網(wǎng)絡(luò)封包記錄。在服務(wù)提供者函數(shù)WSPSend 調(diào)用系統(tǒng)函數(shù) WSPSend 發(fā)送數(shù)據(jù)前,用 CheckSend 調(diào)用 SetSessionEx和 GetProtocolInfo 設(shè)置網(wǎng)絡(luò)封包信息,然后調(diào)用 GetAccessInfo 檢查是否允許這個(gè)發(fā)送操作通過。WSPStartup 是 Winsock 2 SPI 入口函數(shù),每個(gè)應(yīng)用程序連網(wǎng)時(shí)調(diào)用且僅調(diào)用一次這個(gè)函數(shù)。轉(zhuǎn)發(fā)后根據(jù)返回值判斷操作是否成功,如果成功,則調(diào)用控管函數(shù)對(duì)操作的合法性進(jìn)行判斷;否則直接返回。這個(gè)函數(shù)用來接收面向連接的數(shù)據(jù)。如果不放行,返回錯(cuò)誤;如果放行,調(diào)用底層 WSPConnect 函數(shù)進(jìn)行轉(zhuǎn)發(fā)。XfShutdown 調(diào)用系統(tǒng)服務(wù)提供者函數(shù) WSPShutdown,關(guān)閉一個(gè) Socket 連接。}XfIoControl 是供 EXE 調(diào)用的。lpProcTablelpWSPSend = WSPSend。 if( !lpProcTablelpWSPAccept ||!lpProcTablelpWSPAddressToString ||!lpProcTablelpWSPAsyncSelect ||!lpProcTablelpWSPBind ||!lpProcTablelpWSPCancelBlockingCall || !lpProcTablelpWSPCleanup ||!lpProcTablelpWSPCloseSocket ||!lpProcTablelpWSPConnect ||!lpProcTablelpWSPDuplicateSocket ||!lpProcTablelpWSPEnumNetworkEvents ||!lpProcTablelpWSPEventSelect ||!lpProcTablelpWSPGetOverlappedResult ||!lpProcTablelpWSPGetPeerName ||!lpProcTablelpWSPGetSockName ||!lpProcTablelpWSPGetSockOpt ||!lpProcTablelpWSPGetQOSByName ||!lpProcTablelpWSPIoctl ||!lpProcTablelpWSPJoinLeaf ||!lpProcTablelpWSPListen || !lpProcTablelpWSPRecv ||!lpProcTablelpWSPRecvDisconnect ||第 18 頁 共 37 頁!lpProcTablelpWSPRecvFrom ||!lpProcTablelpWSPSelect ||!lpProcTablelpWSPSend ||!lpProcTablelpWSPSendDisconnect ||!lpProcTablelpWSPSendTo ||!lpProcTablelpWSPSetSockOpt ||!lpProcTablelpWSPShutdown ||!lpProcTablelpWSPSocket ||!lpProcTablelpWSPStringToAddress )return WSAEINVALIDPROCTABLE。amp。是服務(wù)提供者的標(biāo)準(zhǔn)入口函數(shù)。不知道函數(shù)是干什么的。較長(zhǎng)的更為習(xí)慣的縮寫?!皠?dòng)作”用來確定符合這一條控管規(guī)則的網(wǎng)絡(luò)訪問動(dòng)作是放行還是拒絕。需要說明的是,應(yīng)用程序設(shè)置的優(yōu)先級(jí)高于控管規(guī)則設(shè)置,只是在應(yīng)用程序設(shè)置為詢問時(shí),下面的控管規(guī)則設(shè)置才有效。a. 封包監(jiān)視界面封包監(jiān)視界面用來顯示截獲的網(wǎng)絡(luò)封包。0:表示全部其他值:表示端口值 IP 地址記錄結(jié)構(gòu)授權(quán)訪問的遠(yuǎn)端網(wǎng)絡(luò) IP 地址結(jié)構(gòu)如表 1 所示。 控管規(guī)則文件需要存儲(chǔ)的內(nèi)容控管規(guī)則文件需要存儲(chǔ)的內(nèi)容如下:(1) 系統(tǒng)設(shè)置(2) 控管設(shè)置(3) 控管規(guī)則附加數(shù)據(jù),授權(quán)訪問的遠(yuǎn)端網(wǎng)絡(luò) IP 地址記錄(1) 規(guī)則編號(hào)字段是控管規(guī)則的唯一性編號(hào)。這時(shí)候如果這些模塊副本都需要讓同一個(gè)應(yīng)用程序做一件事時(shí),就不好處理,因?yàn)?DLL 的重要性和應(yīng)用程序保護(hù)機(jī)制導(dǎo)致這些模塊副本無法直接調(diào)用同一個(gè)應(yīng)用程序的執(zhí)行模塊。雖然不提倡使用,但是有些地方使用全局變量與是不可避免的,而且有時(shí)候可以減少很多麻煩。對(duì)于公有函數(shù)和變量,外部模塊可以直接調(diào)用;對(duì)于私有函數(shù)和變量,外部模塊則不能直接調(diào)用。 模塊接口定義模塊之間接口有 3 種方式:(1) 函數(shù)接口函數(shù)接口是最常用而且獨(dú)立性和封裝性最好的接口方式 [7]。(5) 模塊 :EXE 設(shè)置 DLL 的工作模式,設(shè)置工作模式單獨(dú)的函數(shù),調(diào)用模塊 讀寫控管規(guī)則模塊得到控管規(guī)則數(shù)據(jù),調(diào)用 DLL 的函數(shù) FloControl設(shè)置 DLL 的工作模式。 模塊結(jié)構(gòu)根據(jù) 節(jié)的功能定義和 節(jié)的工作流程圖,需要對(duì)模塊做進(jìn)一步細(xì)化,得出更詳細(xì)的模塊結(jié)構(gòu)。(4) 容易合并:容易將劃分的模塊進(jìn)行合并。 模塊劃分 模塊劃分原則模塊劃分是系統(tǒng)分析中非常重要的一部分,下面是模塊劃分時(shí)的基本原則。(2) 控管規(guī)則設(shè)置① 手工添加,刪除及修改控管規(guī)則。其中 Borland 使用的 VCL 類庫(kù)是為 Delphi 準(zhǔn)備的,并不是真正用C++實(shí)現(xiàn)的。根據(jù)不同的工程選擇不同的開發(fā)工具,可以有效地提高工作效率。Winsock 2 SPI 除了有完成網(wǎng)絡(luò)傳輸?shù)膫鬏敺?wù)提供者,還有提供友好名稱服務(wù)的名字空間服務(wù)提供者。 WINSOCK 2 SPI 基礎(chǔ)Winsock 是為上層應(yīng)用程序提供的一種標(biāo)準(zhǔn)網(wǎng)絡(luò)接口,上層應(yīng)用程序不用關(guān)心 Winsock 實(shí)現(xiàn)的細(xì)節(jié),它為上層應(yīng)用程序提供透明的服務(wù)。一個(gè)是完成應(yīng)用程序初始化的類第 2 頁 共 37 頁CPropertyApp,它繼承自 CWinApp,是 EXE 的入口,其實(shí)里面封裝了 WinMain函數(shù);另一個(gè)是主窗口模塊 CMainFrame,這個(gè)主窗口并不是 EXE 顯示出來的那個(gè)屬性頁窗口,而是一個(gè)隱藏的窗口,它繼承自 CMrameWnd,是一個(gè)無模式窗口,他隱藏顯示,充當(dāng)接受機(jī),用來接受 DLL 及其他模塊發(fā)送過來的消息,然后對(duì)消息進(jìn)行相應(yīng)的處理。 課題的研究方法本課題由兩大模塊構(gòu)成,分別為 DLL 模塊和 EXE 模塊。顧名思義,防火墻能