專利名稱:一種軟件探測(cè)系統(tǒng)的工作方法
技術(shù)領(lǐng)域:
本發(fā)明涉及一種軟件探測(cè)技術(shù)和軟件探測(cè)裝置和軟件探測(cè)的網(wǎng)絡(luò)系統(tǒng),具體是一種對(duì)軟件運(yùn)行中流程信息進(jìn)行探測(cè)的軟件探測(cè)方法和應(yīng)用該方法的軟件探測(cè)器及軟件探測(cè)系統(tǒng)。
背景技術(shù):
計(jì)算機(jī)系統(tǒng)和網(wǎng)絡(luò)的大量普及使用使全球跨入了信息化時(shí)代。但是,正由于現(xiàn)代社會(huì)中幾乎一切都在“計(jì)算機(jī)化”,如經(jīng)濟(jì)活動(dòng)(生產(chǎn)、流通、交換、消費(fèi))過(guò)程中的管理都已完全基于計(jì)算機(jī)系統(tǒng)在運(yùn)行,而計(jì)算機(jī)系統(tǒng)的核心是“軟件”,也就是說(shuō)都是基于“軟件(程序)”在運(yùn)行,所以從技術(shù)層面來(lái)看,如果對(duì)這些軟件的運(yùn)行不能進(jìn)行有效地檢測(cè)和監(jiān)控,那么監(jiān)管就會(huì)“缺失”,給國(guó)家或全球的金融和社會(huì)安全造成隱患。在國(guó)內(nèi),重要的法制監(jiān)管領(lǐng)域有十幾個(gè),如金融(銀監(jiān)、證監(jiān)、保監(jiān)),國(guó)資,稅務(wù),財(cái)政,審計(jì),安監(jiān)、電監(jiān)、環(huán)境……等。如果對(duì)這些法制監(jiān)管領(lǐng)域的軟件運(yùn)行不能有效地檢測(cè)、監(jiān)控,后果不堪設(shè)想。在質(zhì)檢計(jì)量系統(tǒng)中,與人民群眾生活密切相關(guān)的加油機(jī)、計(jì)價(jià)秤、出租車計(jì)價(jià)器等法制計(jì)量產(chǎn)品作弊事件頻頻發(fā)生。一方面,由于受到軟件技術(shù)手段的制約,質(zhì)量技術(shù)監(jiān)督行政執(zhí)法人員無(wú)法有效獲取相關(guān)作弊證據(jù),對(duì)不法商販和經(jīng)營(yíng)者的處罰缺少依據(jù),在一定程度上損害了廣大消費(fèi)者的利益;另一方面,由于不法制造商可以通過(guò)對(duì)軟件進(jìn)行惡意修改或在軟件中留有“后門”來(lái)擴(kuò)大市場(chǎng)銷路,嚴(yán)重違反了公平競(jìng)爭(zhēng)的原則。法制計(jì)量監(jiān)管網(wǎng)絡(luò)的目標(biāo)是監(jiān)管使用過(guò)程中面上的作弊的情況,主要是要突破和掌握軟件作弊探測(cè)(或稱“軟件探頭”或“軟件探測(cè)傳感器”)的核心技術(shù)。所以,它是從廣度來(lái)進(jìn)行的實(shí)時(shí)監(jiān)控和動(dòng)態(tài)監(jiān)管,好比是現(xiàn)在已經(jīng)在道路交通、治安防范方面普遍使用的視頻攝像探測(cè)監(jiān)控系統(tǒng),使得程序的運(yùn)行由不可見(jiàn)、不可控變成可見(jiàn)又可控。因此在法制計(jì)量監(jiān)管領(lǐng)域,如何探測(cè)電子衡器軟件中的“后門程序”和“作弊口令”等特定目標(biāo),是本領(lǐng)域的技術(shù)難題。在“軟件測(cè)試”領(lǐng)域,國(guó)內(nèi)外現(xiàn)有的軟件自動(dòng)化測(cè)試工具,一般都是在程序內(nèi)部進(jìn)行故障跟蹤和檢測(cè),沒(méi)有將跟蹤、檢測(cè)的信息對(duì)外傳輸和發(fā)送。在“無(wú)線傳感網(wǎng)”領(lǐng)域,現(xiàn)有的傳感器往往只能感知常規(guī)的“物理量”或“化學(xué)量”,不能感知計(jì)算機(jī)中軟件運(yùn)行的信息。因此,監(jiān)管部門無(wú)法對(duì)軟件進(jìn)行實(shí)時(shí)監(jiān)視。法制計(jì)量軟件探測(cè)器開(kāi)發(fā)的特點(diǎn)和要求有I、要能采集并發(fā)送計(jì)量器具軟件標(biāo)識(shí)信息和傳感器節(jié)點(diǎn)標(biāo)識(shí)信息計(jì)量器具軟件標(biāo)識(shí)信息,相當(dāng)于計(jì)價(jià)秤軟件的電子身份信息(ID-O);軟件探測(cè)傳感器節(jié)點(diǎn)標(biāo)識(shí)信息也就是標(biāo)志軟件傳感器本身的電子身份信息(ID-I)。通過(guò)比對(duì)可以識(shí)別計(jì)量器具軟件和軟件探測(cè)傳感器節(jié)點(diǎn)本身的真?zhèn)巍?br>
2、要跟蹤并發(fā)送計(jì)量器具使用時(shí)的作弊信息,包括+作弊的時(shí)間及數(shù)量作弊時(shí)間包括年、月、日、時(shí)、分、秒;作弊數(shù)量、超差比例、等;+作弊的金額包括每次作弊的金額和累計(jì)作弊的金額。為執(zhí)法提供依據(jù);+作弊的口令通過(guò)跟蹤分析可以鎖定作弊的密碼;+作弊的責(zé)任人包括監(jiān)控對(duì)象的空間坐標(biāo)點(diǎn)(省、市、區(qū)、場(chǎng)所)、身份(組織機(jī)構(gòu)代碼、身份證號(hào)),等;+作弊的歷史記錄作弊信息可以全部記錄在案;+實(shí)時(shí)在線監(jiān)控如果計(jì)量器具脫機(jī)(停機(jī)、關(guān)機(jī)、移機(jī),等)、更換芯片或主板,都能立即跟蹤檢測(cè)到,并留下記錄。3、要具有計(jì)量監(jiān)控傳感網(wǎng)軟件探測(cè)傳感器節(jié)點(diǎn)自身的管理、保護(hù)和安全功能。
發(fā)明內(nèi)容
本發(fā)明所要解決的技術(shù)問(wèn)題是提供一種用于對(duì)電子衡器軟件或金融監(jiān)管軟件中的“后門程序”和“作弊口令”等特定目標(biāo)進(jìn)行探測(cè)、并將探測(cè)得的信息對(duì)外傳輸和發(fā)送,以使監(jiān)管部門能實(shí)時(shí)監(jiān)視的軟件探測(cè)方法和應(yīng)用該方法的軟件探測(cè)器及軟件探測(cè)系統(tǒng)。為解決上述技術(shù)問(wèn)題,本發(fā)明的軟件探測(cè)方法,包括如下步驟A、啟動(dòng)代碼插裝步驟,該步驟包括虛擬執(zhí)行被測(cè)軟件,即對(duì)被測(cè)軟件的程序源代碼進(jìn)行詞法分析和語(yǔ)法分析,以識(shí)別出特征代碼,該特征代碼包括變量、函數(shù)、子程序和面向?qū)ο蟮念悾蝗缓髮?duì)所述程序源代碼的程序流程按數(shù)據(jù)塊進(jìn)行劃分,以得到表述所述被測(cè)軟件的程序結(jié)構(gòu)和靜態(tài)流程的劃分?jǐn)?shù)據(jù)并存入一靜態(tài)數(shù)據(jù)庫(kù)中,同時(shí)該靜態(tài)數(shù)據(jù)庫(kù)預(yù)存有根據(jù)被測(cè)軟件的功能說(shuō)明書得到的正常程序結(jié)構(gòu)和靜態(tài)流程;然后在所述程序源代碼中插入對(duì)應(yīng)于所述特征代碼的探測(cè)代碼;最后把插入了所述探測(cè)代碼的程序源代碼編譯鏈接成可執(zhí)行程序;所述探測(cè)代碼為一段代碼或函數(shù),用于收集所述可執(zhí)行程序運(yùn)行時(shí)生成的動(dòng)態(tài)數(shù)據(jù);該動(dòng)態(tài)數(shù)據(jù)包括函數(shù)、子程序的調(diào)用記錄,面向?qū)ο蟮念惖南鬟f,以及由所述函數(shù)、子程序的調(diào)用記錄和面向?qū)ο蟮念惖南鬟f構(gòu)成的所述被測(cè)軟件運(yùn)行時(shí)的程序結(jié)構(gòu)和控制流程;B、執(zhí)行模式識(shí)別步驟,該步驟用于對(duì)所述可執(zhí)行程序執(zhí)行模型檢測(cè),即將所述靜態(tài)數(shù)據(jù)庫(kù)中預(yù)存的正常程序結(jié)構(gòu)和靜態(tài)流程與所述探測(cè)代碼獲取的被測(cè)軟件運(yùn)行時(shí)的程序結(jié)構(gòu)和控制流程進(jìn)行比較;若二者一致,則判斷所述可執(zhí)行程序正常;否則,則判斷所述可執(zhí)行程序中存在“特殊的結(jié)構(gòu)”或“漏洞”;所述“特殊的結(jié)構(gòu)”是指與被測(cè)軟件的功能說(shuō)明書不相關(guān)的變量、函數(shù)、子程序或類的消息傳遞;所述“漏洞”是指根據(jù)被測(cè)軟件的功能說(shuō)明書被測(cè)軟件中缺少應(yīng)有的變量、函數(shù)、子程序或 類的消息傳遞;C、當(dāng)發(fā)現(xiàn)存在“特殊的結(jié)構(gòu)”或“漏洞”后,執(zhí)行模式分析步驟,該步驟用于分析所述可執(zhí)行程序的控制流程,以找出并上報(bào)引起“特殊的結(jié)構(gòu)”或“漏洞”的代碼執(zhí)行軌跡;該代碼執(zhí)行軌跡是由引起執(zhí)行“特殊的結(jié)構(gòu)”或“漏洞”的一系列代碼的集合所構(gòu)成的程序流程;D、執(zhí)行數(shù)據(jù)處理與傳輸步驟,該步驟用于根據(jù)所述代碼執(zhí)行軌跡,得出被測(cè)軟件存在“特殊的結(jié)構(gòu)”和/或“漏洞”的信息、及其運(yùn)行的時(shí)間信息和運(yùn)行次數(shù),然后通過(guò)無(wú)線或有線的方式,傳輸?shù)奖O(jiān)管節(jié)點(diǎn)和/或監(jiān)管網(wǎng)絡(luò)。所述探測(cè)代碼用于程序模塊的結(jié)構(gòu)化分析;故障跟蹤和錯(cuò)誤處理;多線程分析(例如判斷死鎖和共享沖突等);程序執(zhí)行效率分析(例如瓶頸分析等);初始化節(jié)點(diǎn)、構(gòu)造鏈表,形成被測(cè)程序運(yùn)行所需要的數(shù)據(jù)結(jié)構(gòu)。所述控制流程是指虛擬執(zhí)行被測(cè)軟件,即對(duì)被測(cè)軟件的程序源代碼進(jìn)行詞法分析和語(yǔ)法分析,識(shí)別出特征代碼,然后對(duì)所述程序源代碼的控制流按塊進(jìn)行劃分,得到所述被測(cè)軟件的程序劃分?jǐn)?shù)據(jù)的流程。所述靜態(tài)流程是指把插入了所述探測(cè)代碼的程序源代碼編譯鏈接成可執(zhí)行程序;運(yùn)行該可執(zhí)行程序得到的被測(cè)軟件運(yùn)行時(shí)的程序流程。所述程序流程也即靜態(tài)流程。為解決上述技術(shù)問(wèn)題,本發(fā)明的應(yīng)用上述軟件探測(cè)方法的軟件探測(cè)器,包括與用于執(zhí)行所述可執(zhí)行程序的處理器相連的探測(cè)控制器、與探測(cè)控制器相連的無(wú)線數(shù)據(jù)收發(fā)器和/或有線數(shù)據(jù)收發(fā)器;當(dāng)所述探測(cè)控制器發(fā)現(xiàn)存在“特殊的結(jié)構(gòu)”和/或“漏洞”后,執(zhí)行所述模式分析步驟,然后將被測(cè)軟件存在“特殊的結(jié)構(gòu)”和/或“漏洞”的信息、及該“特殊的結(jié)構(gòu)”和/或“漏洞”運(yùn)行的時(shí)間信息和運(yùn)行次數(shù)經(jīng)所述無(wú)線數(shù)據(jù)收發(fā)器和/或有線數(shù)據(jù)收發(fā)器傳送至所述監(jiān)管節(jié)點(diǎn)和/或監(jiān)管網(wǎng)絡(luò)。為解決上述技術(shù)問(wèn)題,本發(fā)明的應(yīng)用上述軟件探測(cè)器的軟件探測(cè)系統(tǒng),包括作為所述監(jiān)管節(jié)點(diǎn)的上位機(jī)、與分布于不同地域的多個(gè)所述上位機(jī)相連的監(jiān)管服務(wù)器系統(tǒng);所述上位機(jī)用于與同地域內(nèi)的多個(gè)所述軟件探測(cè)器通過(guò)無(wú)線和/或有線的方式通信連接。為解決上述技術(shù)問(wèn)題,本發(fā)明的軟件探測(cè)系統(tǒng)的軟件平臺(tái)總體設(shè)計(jì)采用層次模型,把軟件系統(tǒng)分層,從而限制系統(tǒng)變化帶來(lái)的影響。每一層可以單獨(dú)的設(shè)計(jì),單獨(dú)的演進(jìn)、升級(jí)。這就大大提高了系統(tǒng)的靈活和穩(wěn)定性,可以應(yīng)付廣泛的需求變化。層次模型最基本的是三層模型,包含展示層、邏輯層和數(shù)據(jù)層。展示層是一個(gè)消息通道,邏輯層提供的應(yīng)該是一個(gè)現(xiàn)實(shí)映像,數(shù)據(jù)層提供現(xiàn)實(shí)系統(tǒng)的測(cè)量。應(yīng)用系統(tǒng)的邏輯模型同樣體現(xiàn)這樣的特點(diǎn),它包含了展示、數(shù)據(jù)和應(yīng)用邏輯的大的層次。一般而言,典型的軟件系統(tǒng)的分層自下向上依次是數(shù)據(jù)層、數(shù)據(jù)維護(hù)層、數(shù)據(jù)語(yǔ)義層、通信層、應(yīng)用邏輯層、展示邏輯層、展示層。這樣的系統(tǒng)體現(xiàn)了層次模型的靈活性和穩(wěn)定性。數(shù)據(jù)層可以使用各種格式的數(shù)據(jù);數(shù)據(jù)維護(hù)層則需要對(duì)每一種數(shù)據(jù)的邏輯存儲(chǔ)形式進(jìn)行維護(hù),保證數(shù)據(jù)的質(zhì)量;數(shù)據(jù)語(yǔ)義層則非常的靈活,可以從多個(gè)數(shù)據(jù)源進(jìn)行數(shù)據(jù)的抽取,拼合和處理,來(lái)共同完成語(yǔ)義的要求。通信層通信控制模塊控制應(yīng)用對(duì)于數(shù)據(jù)的訪問(wèn),也支持對(duì)于其他應(yīng)用模塊的訪問(wèn)。這里包括了權(quán)限檢查、資源調(diào)度、事件機(jī)制等等;應(yīng)用邏輯層通過(guò)通信控制模塊得到語(yǔ)義層提供的符合語(yǔ)義要求的信息。在語(yǔ)義層以下,系統(tǒng)處理的都是數(shù)據(jù),而過(guò)了語(yǔ)義層就成為了信息。全部的信息都被應(yīng)用層所使 用,在這里保存全部的處理邏輯和應(yīng)用邏輯;展示邏輯層這里決定對(duì)于某類訪問(wèn),應(yīng)該使用什么方式進(jìn)行展示,哪些信息需要展示;
展示層真正的和客戶或者客戶系統(tǒng)進(jìn)行交互。從應(yīng)用邏輯層以上,邏輯信息變成了交互信息,在這里可以發(fā)生編碼、解碼、加密、解密等處理。同時(shí),會(huì)依據(jù)客戶的展示邏輯,加載模板和交互信息進(jìn)行合并處理等等,最終以適當(dāng)?shù)姆绞皆谡故緦语@示給客戶。軟件探測(cè)系統(tǒng)的軟件平臺(tái)總體架構(gòu)與一般的多層架構(gòu)的軟件系統(tǒng)相比較,特點(diǎn)主要在底層,即數(shù)據(jù)層。與現(xiàn)有技術(shù)相比,本發(fā)明具有以下優(yōu)點(diǎn)
(I)本發(fā)明的軟件探測(cè)方法實(shí)現(xiàn)了對(duì)應(yīng)用軟件在運(yùn)行中的程序流程信息的實(shí)時(shí)探測(cè),在對(duì)被測(cè)軟件進(jìn)行代碼插裝后,通過(guò)模型檢測(cè),判斷是否存在“特殊的結(jié)構(gòu)”或“漏洞”,并找出代碼執(zhí)行軌跡,然后將所述程序流程信息進(jìn)行處理,最后采用無(wú)線或有線方式將此信息傳送到監(jiān)管節(jié)點(diǎn)或監(jiān)管網(wǎng)絡(luò)。(2)本發(fā)明在法制監(jiān)管領(lǐng)域可以對(duì)計(jì)算機(jī)系統(tǒng)內(nèi)部運(yùn)行的軟件進(jìn)行實(shí)時(shí)監(jiān)控,可以快速檢測(cè)到真實(shí)的數(shù)據(jù)和信息。如,可以組成法制計(jì)量監(jiān)控網(wǎng)絡(luò)對(duì)計(jì)量器具使用中的“后門程序”和“作弊口令”等特定目標(biāo)進(jìn)行探測(cè)和實(shí)時(shí)監(jiān)視,為執(zhí)法打假快速反應(yīng)提供服務(wù)和支撐;能對(duì)法制監(jiān)管領(lǐng)域的軟件運(yùn)行進(jìn)行探測(cè)、并將探測(cè)得的信息對(duì)外傳輸和發(fā)送,以使監(jiān)管部門能進(jìn)行實(shí)時(shí)監(jiān)控和監(jiān)管。(3)本發(fā)明的軟件探測(cè)系統(tǒng)綜合了軟件探測(cè)技術(shù)、嵌入式計(jì)算技術(shù)、現(xiàn)代網(wǎng)絡(luò)及無(wú)線通信技術(shù)、分布式信息處理技術(shù)等,能夠探測(cè)軟件運(yùn)行的信息,通過(guò)嵌入式系統(tǒng)對(duì)信息進(jìn)行處理,并通過(guò)通信網(wǎng)絡(luò)將探測(cè)的軟件運(yùn)行信息傳送到監(jiān)管層或監(jiān)管中心。(4)軟件探測(cè)器采用的無(wú)線數(shù)據(jù)收發(fā)器,是基于TD或GSM的數(shù)據(jù)傳輸模塊,它由射頻天線、內(nèi)部閃存、TD或GSM基帶處理器、匹配電源和Zip插座組成。其中TD或GSM基帶處理器是核心部件,用來(lái)處理外部系統(tǒng)通過(guò)串口發(fā)送過(guò)來(lái)的AT指令。它的外部集成了標(biāo)準(zhǔn)RS232接口、電源接口、模擬音頻輸入輸出接口和SM卡,只要將其串口與PC或單片機(jī)的串口相連,就可以用AT命令對(duì)它進(jìn)行設(shè)置,其通信速率為9600bps。目前移動(dòng)通信的信號(hào)幾乎實(shí)現(xiàn)了無(wú)縫覆蓋,因此,利用其完備的網(wǎng)絡(luò)進(jìn)行數(shù)據(jù)傳輸就成為應(yīng)用的熱點(diǎn)。采用AT指令進(jìn)行單片機(jī)與手機(jī)模塊間的通信設(shè)置,選擇以數(shù)據(jù)、文本等格式的短消息通信方式,這樣可隨時(shí)進(jìn)行可靠的通信,并可以節(jié)省無(wú)線傳輸?shù)某杀竞途W(wǎng)絡(luò)維護(hù)開(kāi)支。也可以采用其他無(wú)線數(shù)據(jù)收發(fā)方式,例如調(diào)頻、脈沖信號(hào)等。
圖I為實(shí)施例中的軟件探測(cè)器的示例性結(jié)構(gòu)圖;圖2為實(shí)施例中的代碼插裝子系統(tǒng)的示例性結(jié)構(gòu)圖;圖3為實(shí)施例中的軟件探測(cè)器的結(jié)構(gòu)原理圖;圖4為實(shí)施例中的軟件探測(cè)系統(tǒng)的硬件平臺(tái)總體架構(gòu)圖;圖5為實(shí)施例中的軟件探測(cè)系統(tǒng)的軟件平臺(tái)邏輯層次架構(gòu)圖; 圖6為實(shí)施例中的在執(zhí)行SUM-PRO. exe之前,代碼跟蹤次數(shù)為O的程序執(zhí)行示意圖; 圖7為實(shí)施例中的跟蹤數(shù)據(jù)被自動(dòng)地更新的程序執(zhí)行示意圖。
具體實(shí)施方式
下面結(jié)合圖1-5對(duì)本發(fā)明作進(jìn)一步說(shuō)明。(實(shí)施例I)本發(fā)明的軟件探測(cè)方法,包括如下步驟A、啟動(dòng)代碼插裝步驟,該步驟包括虛擬執(zhí)行被測(cè)軟件,即對(duì)被測(cè)軟件的程序源代碼進(jìn)行詞法分析和語(yǔ)法分析,以識(shí)別出特征代碼,該特征代碼包括變量、函數(shù)、子程序和面向?qū)ο蟮念?;然后?duì)所述程序源代碼的程序流程按數(shù)據(jù)塊進(jìn)行劃分,以得到表述所述被測(cè)軟件的程序結(jié)構(gòu)和靜態(tài)流程的劃分?jǐn)?shù)據(jù)并存入一靜態(tài)數(shù)據(jù)庫(kù)中,同時(shí)該靜態(tài)數(shù)據(jù)庫(kù)預(yù)存有根據(jù)被測(cè)軟件的功能說(shuō)明書得到的正常程序結(jié)構(gòu)和靜態(tài)流程;然后在所述程序源代碼中插入對(duì)應(yīng)于所述特征代碼的探測(cè)代碼;最后把插入了所述探測(cè)代碼的程序源代碼編譯鏈接成可執(zhí)行程序;所述探測(cè)代碼為一段代碼或函數(shù),用于收集所述可執(zhí)行程序運(yùn)行時(shí)生成的動(dòng)態(tài)數(shù)據(jù);該動(dòng)態(tài)數(shù)據(jù)包括函數(shù)、子程序的調(diào)用記錄,面向?qū)ο蟮念惖南鬟f,以及由所述函數(shù)、子程序的調(diào)用記錄和面向?qū)ο蟮念惖南鬟f構(gòu)成的所述被測(cè)軟件運(yùn)行時(shí)的程序結(jié)構(gòu)和控制流程;B、執(zhí)行模式識(shí)別步驟,該步驟用于對(duì)所述可執(zhí)行程序執(zhí)行模型檢測(cè),即比較所述靜態(tài)數(shù)據(jù)庫(kù)中預(yù)存的正常程序結(jié)構(gòu)和靜態(tài)流程與所述探測(cè)代碼獲取的被測(cè)軟件運(yùn)行時(shí)的程序結(jié)構(gòu)和控制流程是否一致;若二者一致,則判斷所述可執(zhí)行程序正常;否則,則判斷所述可執(zhí)行程序中存在“特殊的結(jié)構(gòu)”或“漏洞”;所述“特殊的結(jié)構(gòu)”是指與被測(cè)軟件的功能說(shuō)明書不相關(guān)的變量、函數(shù)、子程序或類的消息傳遞;所述“漏洞”是指根據(jù)被測(cè)軟件的功能說(shuō)明書被測(cè)軟件中缺少應(yīng)有的變量、函數(shù)、子程序或類的消息傳遞;C、當(dāng)發(fā)現(xiàn)存在“特殊的結(jié)構(gòu)”或“漏洞”后,執(zhí)行模式分析步驟,該步驟用于分析所述可執(zhí)行程序的控制流程,以找出并上報(bào)引起“特殊的結(jié)構(gòu)”或“漏洞”的代碼執(zhí)行軌跡;該代碼執(zhí)行軌跡是由引起執(zhí)行“特殊的結(jié)構(gòu)”或“漏洞”的一系列代碼的集合所構(gòu)成的程序流程;D、執(zhí)行數(shù)據(jù)處理與傳輸步驟,該步驟用于根據(jù)所述代碼執(zhí)行軌跡,得出被測(cè)軟件存在“特殊的結(jié)構(gòu)”和/或“漏洞”的信息、及其運(yùn)行的時(shí)間信息和運(yùn)行次數(shù),然后通過(guò)無(wú)線或有線的方式,傳輸?shù)奖O(jiān)管節(jié)點(diǎn)和/或監(jiān)管網(wǎng)絡(luò)。所述的代碼插裝步驟還包括建立在進(jìn)行所述語(yǔ)法分析時(shí)生成的用于記錄并保存在所述可執(zhí)行程序運(yùn)行時(shí)產(chǎn)生的所述動(dòng)態(tài)數(shù)據(jù)的動(dòng)態(tài)數(shù)據(jù)庫(kù)文件,包括DD文件,用于記錄在所述可執(zhí)行程序運(yùn)行時(shí)各記錄點(diǎn)即所述特征代碼的累計(jì)運(yùn)行次數(shù)、最后一次運(yùn)行次數(shù)、以及運(yùn)行時(shí)間信息;DDC文件,用于記錄在所述可執(zhí)行程序運(yùn)行時(shí)各判斷、條件曾經(jīng)為真或者為假的數(shù)據(jù);DDH文件,用于記錄在所述可執(zhí)行程序運(yùn)行時(shí)各個(gè)記錄點(diǎn)對(duì)應(yīng)的程序語(yǔ)句是否運(yùn)行過(guò)的歷史數(shù)據(jù)。所述在進(jìn)行詞法分析時(shí),讀入需要插裝的源代碼文件,識(shí)別出終結(jié)符(Token)和語(yǔ)義動(dòng)作所需要的信息(如行號(hào)、Token的偏移量等),并傳給語(yǔ)法分析器。同時(shí),詞法分析器還將終結(jié)符存入符號(hào)表;Hash方法是一種在查表、填表兩方面都能高速進(jìn)行的技術(shù)。因此,通常采用Hash技術(shù)來(lái)組織的符號(hào)表為Hash符號(hào)表;語(yǔ)法分析器識(shí)別分析的源程序的語(yǔ)法,在定義的插裝點(diǎn)上插入代碼,并生成各種動(dòng)態(tài)數(shù)據(jù)庫(kù)文件DD文件、DDH文件和DDC文件。在動(dòng)態(tài)運(yùn)行過(guò)程中,源程序的運(yùn)行情況就記錄在這些文件中。下面以C語(yǔ)言為例,對(duì)源程序的代碼插裝子系統(tǒng)100進(jìn)行描述(I)分析C代碼工程文件(*· mak),獲得所有的C源文件;(2)對(duì)于每一個(gè)C源程序文件>分析源程序結(jié)構(gòu),生成DD文件、DDH文件和DDC文件;
>分析源程序結(jié)構(gòu),生成插裝信息鏈表InstrChain ;>根據(jù)插裝信息鏈表插裝源程序+插裝源程序文件頭部+插裝函數(shù)頭部+插裝條件表達(dá)式+插裝流程控制語(yǔ)句+插裝標(biāo)號(hào)語(yǔ)句>統(tǒng)計(jì)標(biāo)號(hào)后代碼的執(zhí)行次數(shù),統(tǒng)計(jì)數(shù)據(jù)將保存到DD文件里。>添加公用模塊_hua. bas,用于聲明全局變量和對(duì)DLL中函數(shù)引用。>修改工程文件,將_hua. bas添加到工程文件中。(3)以對(duì)條件表達(dá)式a I |b&&c的插裝為例,該條件表達(dá)式即為特征代碼,其在插裝前為a|b&&c插裝后(((a) (—HUA_local->con[O] =Oxcc注 I,I):(—HUA_local->con[O] | = 0x3注 2,O)) | | ((b) (—HUA_local_>con[l] I =Oxcc注 3,I):(—HUA_local_>con[l] I = 0x3注 4,0))&&((c)) (—HUA_local_>con[2] I =Oxcc注 5,I):(—HUA_local_>con[2] I = 0x3注 6,0)) (—HUA_local_>con[3] I =Oxcc注 7,I):(—HUA_local_>con[3] I = 0x3注 8,0)注Ia曾為true。注2a曾為false。注3b曾為true。注4b曾為false。注5c曾為true。注6c曾為false。注7整個(gè)aI I b&&c曾為true。注8整個(gè)aI I b&&c曾為false。所述代碼插裝步驟中,在識(shí)別出特征代碼時(shí),同時(shí)生成插裝信息鏈表;然后根據(jù)該插裝信息鏈表在所述程序源代碼中插入對(duì)應(yīng)于所述特征代碼的探測(cè)代碼;所述根據(jù)插裝信息鏈表插裝源程序的位置包括插裝源程序文件頭部、插裝函數(shù)頭部、插裝條件表達(dá)式、插裝流程控制語(yǔ)句和插裝標(biāo)號(hào)語(yǔ)句。下面以VB語(yǔ)言為例,對(duì)模式分析步驟中識(shí)別出特征代碼時(shí)生成的插裝信息鏈表進(jìn)行描述(I)主要功能 C++語(yǔ)言的模式分析子系統(tǒng)是用靜態(tài)庫(kù)程序?qū)崿F(xiàn)的。靜態(tài)庫(kù)程序的作用是處理有關(guān)對(duì)文件的操作,包括檢查文件的存在與否、將內(nèi)存中的統(tǒng)計(jì)數(shù)據(jù)寫入文件等。由于VB語(yǔ)言調(diào)用動(dòng)態(tài)鏈接庫(kù)相對(duì)比較方便,VB語(yǔ)言的模式分析子系統(tǒng)是用動(dòng)態(tài)鏈接庫(kù)實(shí)現(xiàn)的。動(dòng)態(tài)鏈接庫(kù)程序的作用是初始化節(jié)點(diǎn)、構(gòu)造鏈表,形成被分析程序運(yùn)行所需要的數(shù)據(jù)結(jié)構(gòu)。首次調(diào)用動(dòng)態(tài)鏈接庫(kù)時(shí),掛上被分析程序退出時(shí)要執(zhí)行的函數(shù)。檢查用來(lái)保存統(tǒng)計(jì)數(shù)據(jù)的文件存在與否。將內(nèi)存中的統(tǒng)計(jì)數(shù)據(jù)寫入文件。(2)動(dòng)態(tài)鏈接庫(kù)的進(jìn)入和退出在Windows操作系統(tǒng)中,調(diào)用動(dòng)態(tài)鏈接庫(kù)有一個(gè)特性可以利用,這就是在調(diào)用動(dòng)態(tài)鏈接庫(kù)的程序或線程退出運(yùn)行時(shí),會(huì)釋放對(duì)動(dòng)態(tài)鏈接庫(kù)的引用,在動(dòng)態(tài)鏈接庫(kù)中可以獲知這一事件,進(jìn)行退出時(shí)用戶指定的操作。對(duì)插裝程序來(lái)說(shuō),在程序退出時(shí),應(yīng)進(jìn)行的操作是調(diào)用庫(kù)函數(shù)將內(nèi)存中的數(shù)據(jù)寫入文件中。另外一種獲知被分析程序退出、進(jìn)行退出時(shí)用戶指定的操作的方法是象C++語(yǔ)言那樣,將退出時(shí)要執(zhí)行的函數(shù)掛在退出執(zhí)行的函數(shù)鏈上,不過(guò)這個(gè)操作是被分析程序首次調(diào)用動(dòng)態(tài)鏈接庫(kù)函數(shù)時(shí)(Process attach),由動(dòng)態(tài)鏈接庫(kù)完成的,具體做法如下
BOOL APIENTRY DlIMain (HANDLE hModule,DWORDul_reason-for_calI, LPYOID IpReserved)
{
switch(ul-reason_for_calI)
{
case DLL-PROCESS.ATTACH:
{//將函數(shù)UpDateRunResult掛在退出執(zhí)行的函數(shù)鏈上 static int HasHooked = O; if (!HasHooked) atexi t (UpdateRunRusul t);
};
case DLL-THREAD-ATTACH: case DLL-THREAD-DETACH: case DLL-PROCESS.DETACH:
}
return TRUE;
}
(3)輸出函 數(shù)介紹RegistLocalNode ()注冊(cè)本地節(jié)點(diǎn),主要操作為分配一個(gè)節(jié)點(diǎn)的內(nèi)存,根據(jù)傳入的參數(shù)分配文件路徑名的內(nèi)存,分配覆蓋探測(cè)數(shù)組和條件探測(cè)數(shù)組的內(nèi)存,將節(jié)點(diǎn)鏈在探測(cè)數(shù)據(jù)節(jié)點(diǎn)鏈上,返回分配的節(jié)點(diǎn)的內(nèi)存地址。函數(shù)聲明如下HUADLL_API struct—03HUA_record*_stdcalI RegistLocalNode(char*src_file, char氺ddfile, char氺confile,int rp_no, unsigned int con_num, unsigned int deci_rp_num)SetCurrentDD ()告訴動(dòng)態(tài)鏈接庫(kù)當(dāng)前運(yùn)行的源程序文件,參數(shù)—HUA_local為注冊(cè)時(shí)返回的節(jié)點(diǎn)地址。函數(shù)聲明為HUADLL_API void_stdcalI SetCurrentDD(struct__03HUA_record*__HUA_local);CountRP ()累計(jì)覆蓋探測(cè)點(diǎn),參數(shù)pNode為覆蓋探測(cè)數(shù)組所在節(jié)點(diǎn)地址,No為探測(cè)點(diǎn)的編號(hào),即數(shù)組元素的編號(hào)。函數(shù)聲明為HUADLL_API void_stdcall CountRP(struct—03HUA_record*pNode, unsignedint No);CountCP ()統(tǒng)計(jì)條件探測(cè)點(diǎn),參數(shù)pNode為條件探測(cè)數(shù)組所在節(jié)點(diǎn)地址,No為探測(cè)點(diǎn)的編號(hào),即數(shù)組元素的編號(hào),Cond為條件。函數(shù)聲明為HUADLL_API void_stdcall CountCP(struct—03HUA_record*pNode, unsigned int No, bool Cond);所述模式識(shí)別類型分析包括正常類型的模式識(shí)別和特定類型的模式識(shí)別。所述正常類型的模式識(shí)別用于對(duì)所述可執(zhí)行程序執(zhí)行模型檢測(cè),即將所述靜態(tài)數(shù)據(jù)庫(kù)中預(yù)存的正常程序結(jié)構(gòu)和靜態(tài)流程與所述探測(cè)代碼獲取的被測(cè)軟件運(yùn)行時(shí)的程序結(jié)構(gòu)和控制流程進(jìn)行比較,以判斷所述可執(zhí)行程序中存在程序結(jié)構(gòu)和控制流程是否正常。所述特殊類型的模式識(shí)別用于對(duì)所述可執(zhí)行程序執(zhí)行模型檢測(cè),即將所述靜態(tài)數(shù)據(jù)庫(kù)中預(yù)存的正常程序結(jié)構(gòu)和靜態(tài)流程與所述探測(cè)代碼獲取的被測(cè)軟件運(yùn)行時(shí)的程序結(jié)構(gòu)和控制流程進(jìn)行比較,以判斷所述可執(zhí)行程序中是否存在“特殊的結(jié)構(gòu)”和“漏洞”。所述“特殊的結(jié)構(gòu)”是指與被測(cè)軟件的功能說(shuō)明書不相關(guān)的變量、函數(shù)、子程序或類的消息傳遞;所述“漏洞”是指根據(jù)被測(cè)軟件的功能說(shuō)明書被測(cè)軟件中缺少應(yīng)有的變量、函數(shù)、子程序或類的消息傳遞。在插裝的代碼中就包含有插入代碼的特征信息的編碼,讀取該編碼并進(jìn)行解碼就可以還原插裝代碼的特征信息。所述模式識(shí)別的步驟包括程序節(jié)點(diǎn)探測(cè)模式分析和程序段探測(cè)模式分析,用于對(duì)所述程序源代碼的程序流程按數(shù)據(jù)塊進(jìn)行分析,然后劃分出所述數(shù)據(jù)塊。所述程序節(jié)點(diǎn)探測(cè)模式分析包括判斷的入口點(diǎn)和出口點(diǎn)、if…else語(yǔ)句中的else的入口點(diǎn)和出口點(diǎn)、連接的入口點(diǎn)和出口點(diǎn)、以及程序單元的入口點(diǎn)和出口點(diǎn);
所述程序段探測(cè)模式分析是指兩個(gè)連續(xù)的程序分支點(diǎn)間的程序語(yǔ)句序列;所述程序分支點(diǎn)包括程序節(jié)點(diǎn)、以及無(wú)條件轉(zhuǎn)移語(yǔ)句與下一條語(yǔ)句之間的位置;所謂無(wú)條件轉(zhuǎn)移語(yǔ)句,以C++語(yǔ)言為例,就是goto語(yǔ)句、return語(yǔ)句、break語(yǔ)句和continue語(yǔ)句等這類語(yǔ)句。 在模式識(shí)別時(shí),在內(nèi)存中一個(gè)程序的每一個(gè)包含函數(shù)的源程序文件均對(duì)應(yīng)了一個(gè)節(jié)點(diǎn),節(jié)點(diǎn)的數(shù)據(jù)結(jié)構(gòu)為
s truct--03HUA_record {
char *src_fHe; //被插裝的源程序文件的名稱和完全路徑 char *ddf He; //對(duì)應(yīng)于被插裝的源程序文件的dd文件名和路徑 char *conf He; //對(duì)應(yīng)于被插裝的源程序文件的ddc文件名和路徑 int *rp_covlist; //指向被插裝的源程序的覆蓋探測(cè)點(diǎn)統(tǒng)計(jì)數(shù)組 int rp—no;//被插裝的源程序的覆蓋探測(cè)點(diǎn)個(gè)數(shù)(對(duì)應(yīng)一個(gè)源文件) unsigned char *con;//指向被插裝源程序條件探測(cè)點(diǎn)運(yùn)行統(tǒng)計(jì)數(shù)組 unsigned int con—num;//被插裝源程序條件探測(cè)點(diǎn)的個(gè)數(shù)(對(duì)應(yīng)一個(gè) 源文件)
unsigned int deci—num;//被插裝的源程序的條件的個(gè)數(shù)(對(duì)應(yīng)一個(gè)源文件)
int f ile-used.mark; //被插裝的源程序所在源文件曾經(jīng)運(yùn)行的標(biāo)志 int pc;//被插裝的源程序的邏輯計(jì)數(shù)器
struct --03HUA_record *next;//指向下一個(gè)源文件節(jié)點(diǎn)地址 };以下通過(guò)插入探測(cè)代碼探測(cè)if語(yǔ)句為例一、在沒(méi)有插裝探測(cè)代碼前的if語(yǔ)句源代碼程序如下Int main O {
Int i=l;
/*case I, complete if statement 第 I 種情況,完整的 if 語(yǔ)句 */ If (i==l)
I++;
Else
i—;
/*conjuct ion 連接*/
1+=2;
/*case 2, no else part 第 2 種情況,沒(méi)有 else 部分*/
If (i==0)
I++;
/*conjuct ion 連接*/ i-=2;
}
二、在插裝探測(cè)代碼后的上述if語(yǔ)句代碼程序如下
Int main O {
Int i=l;
/*case I, complete if statement 第 I 種情況,完整的 if 語(yǔ)句 */
If (++__011HUA_RP_N0DE_p->rp_covlist[__011HUA_RP_NODE_p->pc=2
],
(i==l) (++__011HUA_RP_N0DE_p->rp_covlist [__011HUA_RP_NODE_p- >pc=3], I): 0)
I++;
Else
If (++__011HUA_RP_N0DE_p->rp_covlist [__011HUA_RP_NODE_p->pc=5], 0)
Else i—;
/*conjuct ion 連接*/
++--OilHUA-RP-NODE-p->rp.covlist [--OHHUA_RP_NODE-p->pc=6]; 1+=2;
/*case 2, no else part 第 2 種情況,沒(méi)有 else 部分*/
If (++__011HUA_RP_N0DE_p->rp_covlist[__011HUA_RP_NODE_p->pc=7
],
(i==0) (++-_011HUA_RP_N0DE-p->rp-covlist [__OHHUA_RP_NODE_p->pc=8], I): 0)
I++;
Else
++_-OilHUA-RP-NODE-p->rp_covlis t[--011HUA_RP_NODE-p->pc=9];
/*conjuct ion 連接*/
++--OilHUA-RP-NODE-p->rp.covlist [--011HUA_RP_NODE-p->pc=10]; i-=2;
}以下通過(guò)插入探測(cè)代碼探測(cè)函數(shù)頭部為例一、沒(méi)有插裝前的函數(shù)源代碼
Int BiainQ
Int i=0;
S.WvV··. ·ν·ν,
}二、插裝探測(cè)代碼后的函數(shù)頭部代碼程序Int mainO
νν>ΛΛ·Λ· ' ΛΛ,Λ.Λνν/'ΛΛΛΑ··- {
#1* ^aajustr—
#ι*
/*Jinemr i s S*/
§4ΒΜ απ ej』I;
--- -i^WWWW *
§41Μ bin DDi^date interval (O);
———』一·>ΛΛΛ>ΧΑΛΑ·ΛΛ \>ννΜ·>ΛΛ^‘f
Stuct 03Μ record * OllOM EP Μ)Μ_ρ^ 012ΜΜ EP NL I;
'93Sm—current—dd^—011MfA—RP—N0mji, !_011fm_RP_N0DE_p->file_ used—mark)
—f
UIUIM NP JEffif JJ used jerl^I;
—011^Λ_^_ΛΒΕ_ρ —二cuEreof^Xecori/;
—§OBM_ oirrmf Tecnrd^ c^fiGxiic dtiKz J < .
——νΧΛ^..Λ.ΛΛ.·ν'^ΛΛ.Λ.ΛΛ, ^
/
++ Ollfm RF MM_p->rp covlist[_011im MP MMEjj—
__ _s~ν-Λ^Λ-'ν^Λ-ν^Λ· ■■-■-■ —* · Β~#
++ Qllim RP MM£_j)- rp covlistLOllim NP JEffifjj J;
--- ---a-■rt^'f-i'^^VWVWVVWWW-W--- ---■■-*I
^QMG'S/m^/c^H-Ac/iiist-r/iiistrS, ccw 2Int i=0
ν-ΛΛ^νν W
}(實(shí)施例2)一種應(yīng)用上述軟件探測(cè)方法的軟件探測(cè)器包括與用于執(zhí)行所述可執(zhí)行程序的處理器相連的探測(cè)控制器、與探測(cè)控制器相連的無(wú)線數(shù)據(jù)收發(fā)器和/或有線數(shù)據(jù)收發(fā)器;當(dāng)所述處理器發(fā)現(xiàn)存在“特殊的結(jié)構(gòu)”或“漏洞”后,執(zhí)行所述模式分析步驟,然后將被測(cè)軟件存在“特殊的結(jié)構(gòu)”和/或“漏洞”的信息、及該“特殊的結(jié)構(gòu)”和/或“漏洞”運(yùn)行的時(shí)間信息和運(yùn)行次數(shù)傳送至所述探測(cè)控制器,探測(cè)控制器通過(guò)所述無(wú)線數(shù)據(jù)收發(fā)器和/或有線數(shù)據(jù)收發(fā)器將所述被測(cè)軟件存在“特殊的結(jié)構(gòu)”和/或“漏洞”的信息、及其運(yùn)行的時(shí)間信息和運(yùn)行次數(shù)傳至所述監(jiān)管節(jié)點(diǎn)和/或監(jiān)管網(wǎng)絡(luò)。(實(shí)施例3)一種應(yīng)用上述軟件探測(cè)器的軟件探測(cè)系統(tǒng)包括作為所述監(jiān)管節(jié)點(diǎn)的上位機(jī)、與分布于不同地域的多個(gè)所述上位機(jī)相連的監(jiān)管服務(wù)器系統(tǒng);所述上位機(jī)用于與同地域內(nèi)的多個(gè)所述軟件探測(cè)器通過(guò)無(wú)線和/或有線的方式通信連接。見(jiàn)圖4為實(shí)施例中的軟件探測(cè)系統(tǒng)的硬件平臺(tái)總體架構(gòu)圖。一種應(yīng)用上述軟件探測(cè)器的軟件探測(cè)系統(tǒng)的系統(tǒng)總體軟件架構(gòu)設(shè)計(jì)由以下三個(gè)部分組成探測(cè)器(在實(shí)施例中稱“提取器子系統(tǒng)”,單片機(jī))、監(jiān)管上位機(jī)(PC機(jī))、網(wǎng)絡(luò)系統(tǒng)服務(wù)器。其系統(tǒng)總體軟件架構(gòu)設(shè)計(jì)如圖5所示
一種應(yīng)用上述軟件探測(cè)器的軟件探測(cè)系統(tǒng)的服務(wù)器端設(shè)計(jì)包括系統(tǒng)服務(wù)器端用于監(jiān)管信息處理,并為監(jiān)管上位機(jī)節(jié)點(diǎn)(上位機(jī)子系統(tǒng),客戶端)提供基于XML-RPC接口的Web Service,整體架構(gòu)使用了基于PHP的MVC框架Symfony,此框架成熟、靈活、擴(kuò)展性強(qiáng),適用于大型系統(tǒng)的開(kāi)發(fā),為服務(wù)器端系統(tǒng)提供了堅(jiān)實(shí)穩(wěn)定的基礎(chǔ)。
數(shù)據(jù)庫(kù)設(shè)計(jì)采用了 Symfony提供的基于Propel的ORM技術(shù),使得程序員可以使用面向?qū)ο蟮姆椒▽?duì)數(shù)據(jù)庫(kù)進(jìn)行訪問(wèn),而不用手工構(gòu)造SQL代碼,這也杜絕了 SQL注入的危險(xiǎn)。 另外Propel使用了 PHP的PDO模塊,這可以使得數(shù)據(jù)庫(kù)的操作與數(shù)據(jù)庫(kù)引擎相互獨(dú)立,從而可以非常方便地遷移數(shù)據(jù)庫(kù)。例如,我們?cè)跍y(cè)試時(shí)使用基于SQLite 3. X的數(shù)據(jù)庫(kù),而在實(shí)際運(yùn)用中,只需要修改一下數(shù)據(jù)庫(kù)的配置文件,就可以用另外的數(shù)據(jù)庫(kù)管理系統(tǒng)如MySQL,Oracle和SQLServer來(lái)取代之,不需要對(duì)代碼本身做任何修改。Propel用一個(gè)XML文件來(lái)描述數(shù)據(jù)庫(kù)的配置,然后動(dòng)態(tài)生成與數(shù)據(jù)庫(kù)對(duì)象相關(guān)的一個(gè)PHP類,然后我們就可以直接使用這個(gè)類來(lái)對(duì)數(shù)據(jù)庫(kù)進(jìn)行操作了。在Symfony中,標(biāo)注名為id的字段的將自動(dòng)作為數(shù)據(jù)庫(kù)表的主鍵,同時(shí)具有AUTO_INCREMENT的屬性,名中以id為后輟的字段名將自動(dòng)作為數(shù)據(jù)庫(kù)表的外鍵,而createcLat則作為時(shí)間戳,用于保存創(chuàng)建記錄時(shí)的時(shí)間。這些都是數(shù)據(jù)庫(kù)設(shè)計(jì)的默認(rèn)約定,而在Symfony里加以簡(jiǎn)化,使得數(shù)據(jù)庫(kù)的創(chuàng)建既簡(jiǎn)便又規(guī)范。系統(tǒng)可以提供直接的對(duì)數(shù)據(jù)庫(kù)的增、刪、改、查操作,根據(jù)需要使用授權(quán)的數(shù)據(jù)庫(kù)訪問(wèn),只有登錄并取得數(shù)據(jù)庫(kù)訪問(wèn)權(quán)限的用戶才能對(duì)數(shù)據(jù)庫(kù)進(jìn)行相應(yīng)的操作。(軟件探測(cè)程序跟蹤示例I)SUM-PR0DUCT是一個(gè)用C++編程的示例程序,它要求輸入三個(gè)整型變量Low,High和Max。這些整型值不能為負(fù),否則,將輸出一個(gè)錯(cuò)誤信息;而當(dāng)SUM-PR0DUCT接受三個(gè)整型值時(shí),在Low到High范圍內(nèi)對(duì)每一個(gè)數(shù)字K (但是它不能大于Max),輸出K+K和K*K的值;如果高端(High)的值小于低端(Low)的值,程序直接結(jié)束,沒(méi)有任何輸出。通過(guò)輸入數(shù)據(jù)我們可以跟蹤程序運(yùn)行,進(jìn)行全方位、多層次的監(jiān)控。I、示例程序源代碼這個(gè)SUM-PR0. cpp源代碼列表如下#include <stdio.h>main (void)
//This program prints for each k in the range LOW to HIGH// k + k and k * k. No more than MAX number of k are used.
{
int low, high, max, k, n=0; printf ("Enter positive integers LOW,HIGH, and MAX:”); scanf ("%d %d %d", &low, &high, &max); printf ("L0W=%d HIGH=0M MAX=%d\n", low, high, max); if (low>=0 && high>=0 && max>=0) for (k=low; k<=high; k++)
{
++n;
if (n>max) break;
printf ("0/od+%d=0/od %d*%d=%d\nn, k, k, k+k, k, k, k*k);
}
else
printf ("Error! The input data are incorrect!\n");
}2、運(yùn)行前的初始狀態(tài)在執(zhí)行SUM-PRO. exe之前,代碼跟蹤次數(shù)為0,反映如圖6所示。由圖6可見(jiàn)所有單元均未被跟蹤并反顯。3、程序次運(yùn)行跟蹤在適當(dāng)?shù)哪夸浵铝⒓创蛉隨UM-PRO. exe,去執(zhí)行示例程序c > \SUM-PR0\SUM-PR0. exeEnter positive integers Low, HIGH, and Max :2 8 0通過(guò)示例程序SUM-PR0,斜體字符被顯示,上面突出顯示的字符被立即輸入。跟蹤數(shù)據(jù)被自動(dòng)地更新,如圖7所示。本發(fā)明的上述實(shí)施例僅為說(shuō)明本發(fā)明所作的舉例,而本發(fā)明實(shí)施方式并不局限于此。對(duì)于屬于本發(fā)明的精神與原理下所作的修改、組合、簡(jiǎn)化、替代等均為等效替換,都仍然包含在本發(fā)明的保護(hù)范圍之內(nèi)。
權(quán)利要求
1.一種軟件探測(cè)方法,其特征在于包括如下步驟A、啟動(dòng)代碼插裝步驟,該步驟包括虛擬執(zhí)行被測(cè)軟件,即對(duì)被測(cè)軟件的程序源代碼進(jìn)行詞法分析和語(yǔ)法分析,以識(shí)別出特征代碼,該特征代碼包括變量、函數(shù)、子程序和面向?qū)ο蟮念?;然后?duì)所述程序源代碼的程序流程按數(shù)據(jù)塊進(jìn)行劃分,以得到表述所述被測(cè)軟件的程序結(jié)構(gòu)和靜態(tài)流程的劃分?jǐn)?shù)據(jù)并存入一靜態(tài)數(shù)據(jù)庫(kù)中,同時(shí)該靜態(tài)數(shù)據(jù)庫(kù)預(yù)存有根據(jù)被測(cè)軟件的功能說(shuō)明書得到的正常程序結(jié)構(gòu)和靜態(tài)流程;然后在所述程序源代碼中插入 對(duì)應(yīng)于所述特征代碼的探測(cè)代碼;最后把插入了所述探測(cè)代碼的程序源代碼編譯鏈接成可執(zhí)行程序;所述探測(cè)代碼用于收集所述可執(zhí)行程序運(yùn)行時(shí)生成的動(dòng)態(tài)數(shù)據(jù);該動(dòng)態(tài)數(shù)據(jù)包括函數(shù)、子程序的調(diào)用記錄,面向?qū)ο蟮念惖南鬟f,以及由所述函數(shù)、子程序的調(diào)用記錄和面向?qū)ο蟮念惖南鬟f構(gòu)成的所述被測(cè)軟件運(yùn)行時(shí)的程序結(jié)構(gòu)和控制流程;B、執(zhí)行模式識(shí)別步驟,該步驟用于對(duì)所述可執(zhí)行程序執(zhí)行模型檢測(cè),即將所述靜態(tài)數(shù)據(jù)庫(kù)中預(yù)存的正常程序結(jié)構(gòu)和靜態(tài)流程與所述探測(cè)代碼獲取的被測(cè)軟件運(yùn)行時(shí)的程序結(jié)構(gòu)和控制流程進(jìn)行比較;若二者一致,則判斷所述可執(zhí)行程序正常;否則,則判斷所述可執(zhí)行程序中存在“特殊的結(jié)構(gòu)”或“漏洞”;所述“特殊的結(jié)構(gòu)”是指與被測(cè)軟件的功能說(shuō)明書不相關(guān)的變量、函數(shù)、子程序或類的消息傳遞;所述“漏洞”是指根據(jù)被測(cè)軟件的功能說(shuō)明書被測(cè)軟件中缺少應(yīng)有的變量、函數(shù)、子程序或類的消息傳遞;C、當(dāng)發(fā)現(xiàn)存在“特殊的結(jié)構(gòu)”或“漏洞”后,執(zhí)行模式分析步驟,該步驟用于分析所述可執(zhí)行程序的控制流程,以找出并上報(bào)引起“特殊的結(jié)構(gòu)”或“漏洞”的代碼執(zhí)行軌跡;該代碼執(zhí)行軌跡是由引起執(zhí)行“特殊的結(jié)構(gòu)”或“漏洞”的一系列代碼的集合所構(gòu)成的程序流程;D、執(zhí)行數(shù)據(jù)處理與傳輸步驟,該步驟用于根據(jù)所述代碼執(zhí)行軌跡,得出被測(cè)軟件存在“特殊的結(jié)構(gòu)”和/或“漏洞”的信息、及其運(yùn)行的時(shí)間信息和運(yùn)行次數(shù),然后通過(guò)無(wú)線或有線的方式,傳輸?shù)奖O(jiān)管節(jié)點(diǎn)和/或監(jiān)管網(wǎng)絡(luò);所述控制流程是指虛擬執(zhí)行被測(cè)軟件,即對(duì)被測(cè)軟件的程序源代碼進(jìn)行詞法分析和語(yǔ)法分析,識(shí)別出特征代碼,然后對(duì)所述程序源代碼的控制流按塊進(jìn)行劃分,得到所述被測(cè)軟件的程序劃分?jǐn)?shù)據(jù)的流程;所述靜態(tài)流程是指把插入了所述探測(cè)代碼的程序源代碼編譯鏈接成可執(zhí)行程序;運(yùn)行該可執(zhí)行程序得到的被測(cè)軟件運(yùn)行時(shí)的程序流程;所述的代碼插裝步驟還包括建立在進(jìn)行所述語(yǔ)法分析時(shí)生成的用于記錄并保存在所述可執(zhí)行程序運(yùn)行時(shí)產(chǎn)生的所述動(dòng)態(tài)數(shù)據(jù)的動(dòng)態(tài)數(shù)據(jù)庫(kù)文件,包括DD文件,用于記錄在所述可執(zhí)行程序運(yùn)行時(shí)各記錄點(diǎn)即所述特征代碼的累計(jì)運(yùn)行次數(shù)、最后一次運(yùn)行次數(shù)、以及運(yùn)行時(shí)間信息;DDC文件,用于記錄在所述可執(zhí)行程序運(yùn)行時(shí)各判斷、條件曾經(jīng)為真或者為假的數(shù)據(jù);DDH文件,用于記錄在所述可執(zhí)行程序運(yùn)行時(shí)各個(gè)記錄點(diǎn)對(duì)應(yīng)的程序語(yǔ)句是否運(yùn)行過(guò)的歷史數(shù)據(jù);所述代碼插裝步驟中,在識(shí)別出特征代碼時(shí),同時(shí)生成插裝信息鏈表;然后根據(jù)該插裝信息鏈表在所述程序源代碼中插入對(duì)應(yīng)于所述特征代碼的探測(cè)代碼;所述根據(jù)插裝信息鏈表插裝源程序的位置包括插裝源程序文件頭部、插裝函數(shù)頭部、插裝條件表達(dá)式、插裝流程控制語(yǔ)句和插裝標(biāo)號(hào)語(yǔ)句。
2.一種應(yīng)用上述權(quán)利要求I所述的軟件探測(cè)方法的軟件探測(cè)器的工作方法,其特征在于軟件探測(cè)器包括與用于執(zhí)行所述可執(zhí)行程序的處理器相連的探測(cè)控制器、與探測(cè)控制器相連的無(wú)線數(shù)據(jù)收發(fā)器和/或有線數(shù)據(jù)收發(fā)器;當(dāng)所述處理器發(fā)現(xiàn)存在“特殊的結(jié)構(gòu)”和/或“漏洞”后,執(zhí)行所述模式分析步驟,然后將被測(cè)軟件存在“特殊的結(jié)構(gòu)”和/或“漏洞”的信息、及該“特殊的結(jié)構(gòu)”和/或“漏洞”運(yùn)行的時(shí)間信息和運(yùn)行次數(shù)傳送至所述探測(cè)控制器,探測(cè)控制器通過(guò)所述無(wú)線數(shù)據(jù)收發(fā)器和/或有線數(shù)據(jù)收發(fā)器將所述被測(cè)軟件存在“特殊的結(jié)構(gòu)”和/或“漏洞”的信息、及其運(yùn)行的時(shí)間信息和運(yùn)行次數(shù)傳送至所述監(jiān)管節(jié)點(diǎn)和/或監(jiān)管網(wǎng)絡(luò)。
3.一種應(yīng)用上述權(quán)利要求2所述的軟件探測(cè)器的軟件探測(cè)系統(tǒng),其特征在于包括作為所述監(jiān)管節(jié)點(diǎn)的上位機(jī)、與分布于不同地域的多個(gè)所述上位機(jī)相連的監(jiān)管服務(wù)器系統(tǒng);所述上位機(jī)用于與同地域內(nèi)的多個(gè)所述軟件探測(cè)器通過(guò)無(wú)線和/或有線的方式通信連接。
全文摘要
本發(fā)明涉及一種軟件探測(cè)方法和應(yīng)用該方法的軟件探測(cè)器及軟件探測(cè)系統(tǒng)。所述軟件探測(cè)方法用于對(duì)應(yīng)用軟件在運(yùn)行中的程序流程信息的實(shí)時(shí)探測(cè),在對(duì)被測(cè)軟件進(jìn)行代碼插裝后,通過(guò)模型檢測(cè)判斷是否存在“特殊的結(jié)構(gòu)”或“漏洞”,并找出代碼執(zhí)行軌跡,然后將程序流程信息采用無(wú)線或有線方式將此信息傳送到監(jiān)管節(jié)點(diǎn)或監(jiān)管網(wǎng)絡(luò)。本發(fā)明在法制監(jiān)管領(lǐng)域可以對(duì)計(jì)算機(jī)系統(tǒng)內(nèi)部運(yùn)行的軟件進(jìn)行實(shí)時(shí)監(jiān)控。本發(fā)明的軟件探測(cè)系統(tǒng)構(gòu)成法制計(jì)量監(jiān)控網(wǎng)絡(luò),對(duì)計(jì)量器具的使用進(jìn)行監(jiān)控,為執(zhí)法打假快速反應(yīng)提供服務(wù)和支撐。能對(duì)電子衡器軟件或金融監(jiān)管軟件中的“后門程序”和“作弊口令”等特定目標(biāo)進(jìn)行探測(cè)、并將探測(cè)得的信息對(duì)外傳輸,以使監(jiān)管部門實(shí)時(shí)監(jiān)視。
文檔編號(hào)G06F11/36GK102622299SQ20121005410
公開(kāi)日2012年8月1日 申請(qǐng)日期2010年4月13日 優(yōu)先權(quán)日2010年4月13日
發(fā)明者吳華芳, 張克東, 張溟 申請(qǐng)人:常州云博軟件工程技術(shù)有限公司