欧美在线观看视频网站,亚洲熟妇色自偷自拍另类,啪啪伊人网,中文字幕第13亚洲另类,中文成人久久久久影院免费观看 ,精品人妻人人做人人爽,亚洲a视频

一種軟件探測器的軟件探測方法

文檔序號(hào):6365733閱讀:202來源:國知局
專利名稱:一種軟件探測器的軟件探測方法
技術(shù)領(lǐng)域
本發(fā)明涉及一種軟件探測技術(shù)和軟件探測裝置和軟件探測的網(wǎng)絡(luò)系統(tǒng),具體是一種對軟件運(yùn)行中流程信息進(jìn)行探測的軟件探測方法和應(yīng)用該方法的軟件探測器及軟件探測系統(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))過程中的管理都已完全基于計(jì)算機(jī)系統(tǒng)在運(yùn)行,而計(jì)算機(jī)系統(tǒng)的核心是“軟件”,也就是說都是基于“軟件(程序)”在運(yùn)行,所以從技術(shù)層面來看,如果對這些軟件的運(yùn)行不能進(jìn)行有效地檢測和監(jiān)控,那么監(jiān)管就會(huì)“缺失”,給國家或全球的金融和社會(huì)安全造成隱患。在國內(nèi),重要的法制監(jiān)管領(lǐng)域有十幾個(gè),如金融(銀監(jiān)、證監(jiān)、保監(jiān)),國資,稅務(wù),
財(cái)政,審計(jì),安監(jiān)、電監(jiān)、環(huán)境......等。如果對這些法制監(jiān)管領(lǐng)域的軟件運(yùn)行不能有效地
檢測、監(jiān)控,后果不堪設(shè)想。在質(zhì)檢計(jì)量系統(tǒng)中,與人民群眾生活密切相關(guān)的加油機(jī)、計(jì)價(jià)秤、出租車計(jì)價(jià)器等法制計(jì)量產(chǎn)品作弊事件頻頻發(fā)生。一方面,由于受到軟件技術(shù)手段的制約,質(zhì)量技術(shù)監(jiān)督行政執(zhí)法人員無法有效獲取相關(guān)作弊證據(jù),對不法商販和經(jīng)營者的處罰缺少依據(jù),在一定程度上損害了廣大消費(fèi)者的利益;另一方面,由于不法制造商可以通過對軟件進(jìn)行惡意修改或在軟件中留有“后門”來擴(kuò)大市場銷路,嚴(yán)重違反了公平競爭的原則。法制計(jì)量監(jiān)管網(wǎng)絡(luò)的目標(biāo)是監(jiān)管使用過程中面上的作弊的情況,主要是要突破和掌握軟件作弊探測(或稱“軟件探頭”或“軟件探測傳感器”)的核心技術(shù)。所以,它是從廣度來進(jìn)行的實(shí)時(shí)監(jiān)控和動(dòng)態(tài)監(jiān)管,好比是現(xiàn)在已經(jīng)在道路交通、治安防范方面普遍使用的視頻攝像探測監(jiān)控系統(tǒng),使得程序的運(yùn)行由不可見、不可控變成可見又可控。因此在法制計(jì)量監(jiān)管領(lǐng)域,如何探測電子衡器軟件中的“后門程序”和“作弊口令”等特定目標(biāo),是本領(lǐng)域的技術(shù)難題。在“軟件測試”領(lǐng)域,國內(nèi)外現(xiàn)有的軟件自動(dòng)化測試工具,一般都是在程序內(nèi)部進(jìn)行故障跟蹤和檢測,沒有將跟蹤、檢測的信息對外傳輸和發(fā)送。在“無線傳感網(wǎng)”領(lǐng)域,現(xiàn)有的傳感器往往只能感知常規(guī)的“物理量”或“化學(xué)量”,不能感知計(jì)算機(jī)中軟件運(yùn)行的信息。因此,監(jiān)管部門無法對軟件進(jìn)行實(shí)時(shí)監(jiān)視。法制計(jì)量軟件探測器開發(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);軟件探測傳感器節(jié)點(diǎn)標(biāo)識(shí)信息也就是標(biāo)志軟件傳感器本身的電子身份信息(ID-I)。通過比對可以識(shí)別計(jì)量器具軟件和軟件探測傳感器節(jié)點(diǎn)本身的真?zhèn)巍?br> 2、要跟蹤并發(fā)送計(jì)量器具使用時(shí)的作弊信息,包括+作弊的時(shí)間及數(shù)量作弊時(shí)間包括年、月、日、時(shí)、分、秒;作弊數(shù)量、超差比例、等;+作弊的金額包括每次作弊的金額和累計(jì)作弊的金額。為執(zhí)法提供依據(jù);+作弊的口令通過跟蹤分析可以鎖定作弊的密碼;+作弊的責(zé)任人包括監(jiān)控對象的空間坐標(biāo)點(diǎn)(省、市、區(qū)、場所)、身份(組織機(jī)構(gòu)代碼、身份證號(hào)),等;+作弊的歷史記錄作弊信息可以全部記錄在案;+實(shí)時(shí)在線監(jiān)控如果計(jì)量器具脫機(jī)(停機(jī)、關(guān)機(jī)、移機(jī),等)、更換芯片或主板,都能立即跟蹤檢測到,并留下記錄。3、要具有計(jì)量監(jiān)控傳感網(wǎng)軟件探測傳感器節(jié)點(diǎn)自身的管理、保護(hù)和安全功能。

發(fā)明內(nèi)容
本發(fā)明所要解決的技術(shù)問題是提供一種用于對電子衡器軟件或金融監(jiān)管軟件中的“后門程序”和“作弊口令”等特定目標(biāo)進(jìn)行探測、并將探測得的信息對外傳輸和發(fā)送,以使監(jiān)管部門能實(shí)時(shí)監(jiān)視的軟件探測方法和應(yīng)用該方法的軟件探測器及軟件探測系統(tǒng)。為解決上述技術(shù)問題,本發(fā)明的軟件探測方法,包括如下步驟A、啟動(dòng)代碼插裝步驟,該步驟包括虛擬執(zhí)行被測軟件,即對被測軟件的程序源代碼進(jìn)行詞法分析和語法分析,以識(shí)別出特征代碼,該特征代碼包括變量、函數(shù)、子程序和面向?qū)ο蟮念?;然后對所述程序源代碼的程序流程按數(shù)據(jù)塊進(jìn)行劃分,以得到表述所述被測軟件的程序結(jié)構(gòu)和靜態(tài)流程的劃分?jǐn)?shù)據(jù)并存入一靜態(tài)數(shù)據(jù)庫中,同時(shí)該靜態(tài)數(shù)據(jù)庫預(yù)存有根據(jù)被測軟件的功能說明書得到的正常程序結(jié)構(gòu)和靜態(tài)流程;然后在所述程序源代碼中插入對應(yīng)于所述特征代碼的探測代碼;最后把插入了所述探測代碼的程序源代碼編譯鏈接成可執(zhí)行程序;所述探測代碼為一段代碼或函數(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)成的所述被測軟件運(yùn)行時(shí)的程序結(jié)構(gòu)和控制流程;B、執(zhí)行模式識(shí)別步驟,該步驟用于對所述可執(zhí)行程序執(zhí)行模型檢測,即將所述靜態(tài)數(shù)據(jù)庫中預(yù)存的正常程序結(jié)構(gòu)和靜態(tài)流程與所述探測代碼獲取的被測軟件運(yùn)行時(shí)的程序結(jié)構(gòu)和控制流程進(jìn)行比較;若二者一致,則判斷所述可執(zhí)行程序正常;否則,則判斷所述可執(zhí)行程序中存在“特殊的結(jié)構(gòu)”或“漏洞”;所述“特殊的結(jié)構(gòu)”是指與被測軟件的功能說明書不相關(guān)的變量、函數(shù)、子程序或類的消息傳遞;所述“漏洞”是指根據(jù)被測軟件的功能說明書被測軟件中缺少應(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í)行軌跡,得出被測軟件存在“特殊的結(jié)構(gòu)”和/或“漏洞”的信息、及其運(yùn)行的時(shí)間信息和運(yùn)行次數(shù),然后通過無線、或有線的方式,傳輸?shù)奖O(jiān)管節(jié)點(diǎn)和/或監(jiān)管網(wǎng)絡(luò)。所述探測代碼用于程序模塊的結(jié)構(gòu)化分析;故障跟蹤和錯(cuò)誤處理;多線程分析(例如判斷死鎖和共享沖突等);程序執(zhí)行效率分析(例如瓶頸分析等);初始化節(jié)點(diǎn)、構(gòu)造鏈表,形成被測程序運(yùn)行所需要的數(shù)據(jù)結(jié)構(gòu)。所述控制流程是指虛擬執(zhí)行被測軟件,即對被測軟件的程序源代碼進(jìn)行詞法分析和語法分析,識(shí)別出特征代碼,然后對所述程序源代碼的控制流按塊進(jìn)行劃分,得到所述被測軟件的程序劃分?jǐn)?shù)據(jù)的流程。所述靜態(tài)流程是指把插入了所述探測代碼的程序源代碼編譯鏈接成可執(zhí)行程序;運(yùn)行該可執(zhí)行程序得到的被測軟件運(yùn)行時(shí)的程序流程。 所述程序流程也即靜態(tài)流程。為解決上述技術(shù)問題,本發(fā)明的應(yīng)用上述軟件探測方法的軟件探測器,包括與用于執(zhí)行所述可執(zhí)行程序的處理器相連的探測控制器、與探測控制器相連的無線數(shù)據(jù)收發(fā)器和/或有線數(shù)據(jù)收發(fā)器;當(dāng)所述探測控制器發(fā)現(xiàn)存在“特殊的結(jié)構(gòu)”和/或“漏洞”后,執(zhí)行所述模式分析步驟,然后將被測軟件存在“特殊的結(jié)構(gòu)”和/或“漏洞”的信息、及該“特殊的結(jié)構(gòu)”和/或“漏洞”運(yùn)行的時(shí)間信息和運(yùn)行次數(shù)經(jīng)所述無線數(shù)據(jù)收發(fā)器和/或有線數(shù)據(jù)收發(fā)器傳送至所述監(jiān)管節(jié)點(diǎn)和/或監(jiān)管網(wǎng)絡(luò)。為解決上述技術(shù)問題,本發(fā)明的應(yīng)用上述軟件探測器的軟件探測系統(tǒng),包括作為所述監(jiān)管節(jié)點(diǎn)的上位機(jī)、與分布于不同地域的多個(gè)所述上位機(jī)相連的監(jiān)管服務(wù)器系統(tǒng);所述上位機(jī)用于與同地域內(nèi)的多個(gè)所述軟件探測器通過無線和/或有線的方式通信連接。為解決上述技術(shù)問題,本發(fā)明的軟件探測系統(tǒng)的軟件平臺(tái)總體設(shè)計(jì)采用層次模型,把軟件系統(tǒng)分層,從而限制系統(tǒng)變化帶來的影響。每一層可以單獨(dú)的設(shè)計(jì),單獨(dú)的演進(jìn)、升級。這就大大提高了系統(tǒng)的靈活和穩(wěn)定性,可以應(yīng)付廣泛的需求變化。層次模型最基本的是三層模型,包含展示層、邏輯層和數(shù)據(jù)層。展示層是一個(gè)消息通道,邏輯層提供的應(yīng)該是一個(gè)現(xiàn)實(shí)映像,數(shù)據(jù)層提供現(xiàn)實(shí)系統(tǒng)的測量。應(yīng)用系統(tǒng)的邏輯模型同樣體現(xiàn)這樣的特點(diǎn),它包含了展示、數(shù)據(jù)和應(yīng)用邏輯的大的層次。一般而言,典型的軟件系統(tǒng)的分層自下向上依次是數(shù)據(jù)層、數(shù)據(jù)維護(hù)層、數(shù)據(jù)語義層、通信層、應(yīng)用邏輯層、展示邏輯層、展示層。這樣的系統(tǒng)體現(xiàn)了層次模型的靈活性和穩(wěn)定性。數(shù)據(jù)層可以使用各種格式的數(shù)據(jù);數(shù)據(jù)維護(hù)層則需要對每一種數(shù)據(jù)的邏輯存儲(chǔ)形式進(jìn)行維護(hù),保證數(shù)據(jù)的質(zhì)量;數(shù)據(jù)語義層則非常的靈活,可以從多個(gè)數(shù)據(jù)源進(jìn)行數(shù)據(jù)的抽取,拼合和處理,來共同完成語義的要求。通信層通信控制模塊控制應(yīng)用對于數(shù)據(jù)的訪問,也支持對于其他應(yīng)用模塊的訪問。這里包括了權(quán)限檢查、資源調(diào)度、事件機(jī)制等等;應(yīng)用邏輯層通過通信控制模塊得到語義層提供的符合語義要求的信息。在語義層以下,系統(tǒng)處理的都是數(shù)據(jù),而過了語義層就成為了信息。全部的信息都被應(yīng)用層所使用,在這里保存全部的處理邏輯和應(yīng)用邏輯;展示邏輯層這里決定對于某類訪問,應(yīng)該使用什么方式進(jìn)行展示,哪些信息需要展示;
展示層真正的和客戶或者客戶系統(tǒng)進(jìn)行交互。從應(yīng)用邏輯層以上,邏輯信息變成了交互信息,在這里可以發(fā)生編碼、解碼、加密、解密等處理。同時(shí),會(huì)依據(jù)客戶的展示邏輯,加載模板和交互信息進(jìn)行合并處理等等,最終以適當(dāng)?shù)姆绞皆谡故緦语@示給客戶。軟件探測系統(tǒng)的軟件平臺(tái)總體架構(gòu)與一般的多層架構(gòu)的軟件系統(tǒng)相比較,特點(diǎn)主要在底層,即數(shù)據(jù)層。與現(xiàn)有技術(shù)相比,本發(fā)明具有以下優(yōu)點(diǎn)(I)本發(fā)明的軟件探測方法實(shí)現(xiàn)了對應(yīng)用軟件在運(yùn)行中的程序流程信息的實(shí)時(shí)探測,在對被測軟件進(jìn)行代碼插裝后,通過模型檢測,判斷是否存在“特殊的結(jié)構(gòu)”或“漏洞”,并找出代碼執(zhí)行軌跡,然后將所述程序流程信息進(jìn)行處理,最后采用無線或有線方式將此信息傳送到監(jiān)管節(jié)點(diǎn)或監(jiān)管網(wǎng)絡(luò)。 (2)本發(fā)明在法制監(jiān)管領(lǐng)域可以對計(jì)算機(jī)系統(tǒng)內(nèi)部運(yùn)行的軟件進(jìn)行實(shí)時(shí)監(jiān)控,可以快速檢測到真實(shí)的數(shù)據(jù)和信息。如,可以組成法制計(jì)量監(jiān)控網(wǎng)絡(luò)對計(jì)量器具使用中的“后門程序”和“作弊口令”等特定目標(biāo)進(jìn)行探測和實(shí)時(shí)監(jiān)視,為執(zhí)法打假快速反應(yīng)提供服務(wù)和支撐;能對法制監(jiān)管領(lǐng)域的軟件運(yùn)行進(jìn)行探測、并將探測得的信息對外傳輸和發(fā)送,以使監(jiān)管部門能進(jìn)行實(shí)時(shí)監(jiān)控和監(jiān)管。(3)本發(fā)明的軟件探測系統(tǒng)綜合了軟件探測技術(shù)、嵌入式計(jì)算技術(shù)、現(xiàn)代網(wǎng)絡(luò)及無線通信技術(shù)、分布式信息處理技術(shù)等,能夠探測軟件運(yùn)行的信息,通過嵌入式系統(tǒng)對信息進(jìn)行處理,并通過通信網(wǎng)絡(luò)將探測的軟件運(yùn)行信息傳送到監(jiān)管層或監(jiān)管中心。(4)軟件探測器采用的無線數(shù)據(jù)收發(fā)器,是基于TD或GSM的數(shù)據(jù)傳輸模塊,它由射頻天線、內(nèi)部閃存、TD或GSM基帶處理器、匹配電源和Zip插座組成。其中TD或GSM基帶處理器是核心部件,用來處理外部系統(tǒng)通過串口發(fā)送過來的AT指令。它的外部集成了標(biāo)準(zhǔn)RS232接口、電源接口、模擬音頻輸入輸出接口和SM卡,只要將其串口與PC或單片機(jī)的串口相連,就可以用AT命令對它進(jìn)行設(shè)置,其通信速率為9600bps。目前移動(dòng)通信的信號(hào)幾乎實(shí)現(xiàn)了無縫覆蓋,因此,利用其完備的網(wǎng)絡(luò)進(jìn)行數(shù)據(jù)傳輸就成為應(yīng)用的熱點(diǎn)。采用AT指令進(jìn)行單片機(jī)與手機(jī)模塊間的通信設(shè)置,選擇以數(shù)據(jù)、文本等格式的短消息通信方式,這樣可隨時(shí)進(jìn)行可靠的通信,并可以節(jié)省無線傳輸?shù)某杀竞途W(wǎng)絡(luò)維護(hù)開支。也可以采用其他無線數(shù)據(jù)收發(fā)方式,例如調(diào)頻、脈沖信號(hào)等。


圖I為實(shí)施例中的軟件探測器的示例性結(jié)構(gòu)圖;圖2為實(shí)施例中的代碼插裝子系統(tǒng)的示例性結(jié)構(gòu)圖;圖3為實(shí)施例中的軟件探測器的結(jié)構(gòu)原理圖;圖4為實(shí)施例中的軟件探測系統(tǒng)的硬件平臺(tái)總體架構(gòu)圖;圖5為實(shí)施例中的軟件探測系統(tǒng)的軟件平臺(tái)邏輯層次架構(gòu)圖; 圖6為實(shí)施例中的在執(zhí)行SUM-PRO. exe之前,代碼跟蹤次數(shù)為0的程序執(zhí)行示意圖;圖7為實(shí)施例中的跟蹤數(shù)據(jù)被自動(dòng)地更新的程序執(zhí)行示意圖。
具體實(shí)施方式
下面結(jié)合圖1-5對本發(fā)明作進(jìn)一步說明。(實(shí)施例I)本發(fā)明的軟件探測方法,包括如下步驟A、啟動(dòng)代碼插裝步驟,該步驟包括虛擬執(zhí)行被測軟件,即對被測軟件的程序源代碼進(jìn)行詞法分析和語法分析,以識(shí)別出特征代碼,該特征代碼包括變量、函數(shù)、子程序和面向?qū)ο蟮念?;然后對所述程序源代碼的程序流程按數(shù)據(jù)塊進(jìn)行劃分,以得到表述所述被測軟件的程序結(jié)構(gòu)和靜態(tài)流程的劃分?jǐn)?shù)據(jù)并存入一靜態(tài)數(shù)據(jù)庫中,同時(shí)該靜態(tài)數(shù)據(jù)庫預(yù)存有根據(jù)被測軟件的功能說明書得到的正常程序結(jié)構(gòu)和靜態(tài)流程;然后在所述程序源代碼中插入對應(yīng)于所述特征代碼的探測代碼;最后把插入了所述探測代碼的程序源代碼編譯鏈接成可執(zhí)行程序;所述探測代碼為一段代碼或函數(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)成的所述被測軟件運(yùn)行時(shí)的程序結(jié)構(gòu)和控制流程;B、執(zhí)行模式識(shí)別步驟,該步驟用于對所述可執(zhí)行程序執(zhí)行模型檢測,即比較所述靜態(tài)數(shù)據(jù)庫中預(yù)存的正常程序結(jié)構(gòu)和靜態(tài)流程與所述探測代碼獲取的被測軟件運(yùn)行時(shí)的程序結(jié)構(gòu)和控制流程是否一致;若二者一致,則判斷所述可執(zhí)行程序正常;否則,則判斷所述可執(zhí)行程序中存在“特殊的結(jié)構(gòu)”或“漏洞”;所述“特殊的結(jié)構(gòu)”是指與被測軟件的功能說明書不相關(guān)的變量、函數(shù)、子程序或類的消息傳遞;所述“漏洞”是指根據(jù)被測軟件的功能說明書被測軟件中缺少應(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í)行軌跡,得出被測軟件存在“特殊的結(jié)構(gòu)”和/或“漏洞”的信息、及其運(yùn)行的時(shí)間信息和運(yùn)行次數(shù),然后通過無線或有線的方式,傳輸?shù)奖O(jiān)管節(jié)點(diǎn)和/或監(jiān)管網(wǎng)絡(luò)。所述的代碼插裝步驟還包括建立在進(jìn)行所述語法分析時(shí)生成的用于記錄并保存在所述可執(zhí)行程序運(yùn)行時(shí)產(chǎn)生的所述動(dòng)態(tài)數(shù)據(jù)的動(dòng)態(tài)數(shù)據(jù)庫文件,包括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)對應(yīng)的程序語句是否運(yùn)行過的歷史數(shù)據(jù)。所述在進(jìn)行詞法分析時(shí),讀入需要插裝的源代碼文件,識(shí)別出終結(jié)符(Token)和語義動(dòng)作所需要的信息(如行號(hào)、Token的偏移量等),并傳給語法分析器。同時(shí),詞法分析器還將終結(jié)符存入符號(hào)表;Hash方法是一種在查表、填表兩方面都能高速進(jìn)行的技術(shù)。因此,通常采用Hash技術(shù)來組織的符號(hào)表為Hash符號(hào)表;語法分析器識(shí)別分析的源程序的語法,在定義的插裝點(diǎn)上插入代碼,并生成各種動(dòng)態(tài)數(shù)據(jù)庫文件DD文件、DDH文件和DDC文、件。在動(dòng)態(tài)運(yùn)行過程中,源程序的運(yùn)行情況就記錄在這些文件中。下面以C語言為例,對源程序的代碼插裝子系統(tǒng)100進(jìn)行描述(I)分析C代碼工程文件(* mak),獲得所有的C源文件;(2)對于每一個(gè)C源程序文件>分析源程序結(jié)構(gòu),生成DD文件、DDH文件和DDC文件;>分析源程序結(jié)構(gòu),生成插裝信息鏈表InstrChain ;>根據(jù)插裝信息鏈表插裝源程序+插裝源程序文件頭部+插裝函數(shù)頭部+插裝條件表達(dá)式+插裝流程控制語句+插裝標(biāo)號(hào)語句>統(tǒng)計(jì)標(biāo)號(hào)后代碼的執(zhí)行次數(shù),統(tǒng)計(jì)數(shù)據(jù)將保存到DD文件里。>添加公用模塊_hua. bas,用于聲明全局變量和對DLL中函數(shù)引用。>修改工程文件,將_hua. bas添加到工程文件中。(3)以對條件表達(dá)式a I |b && c的插裝為例,該條件表達(dá)式即為特征代碼,其在插裝前為a| |b && c插裝后 (((a) (—HUA_local_>con
I =Oxcc注 I,I):(—HUA_local->con
| = 0x3注 2,0)) | | ((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ù)該插裝信息鏈表在所述程序源代碼中插入對應(yīng)于所述特征代碼的探測代碼;所述根據(jù)插裝信息鏈表插裝源程序的位置包括插裝源程序文件頭部、插裝函數(shù)頭部、插裝條件表達(dá)式、插裝流程控制語句和插裝標(biāo)號(hào)語句。下面以VB語言為例,對模式分析步驟中識(shí)別出特征代碼時(shí)生成的插裝信息鏈表進(jìn)行描述(I)主要功能C++語言的模式分析子系統(tǒng)是用靜態(tài)庫程序?qū)崿F(xiàn)的。靜態(tài)庫程序的作用是處理有關(guān)對文件的操作,包括檢查文件的存在與否、將內(nèi)存中的統(tǒng)計(jì)數(shù)據(jù)寫入文件等。由于VB語言調(diào)用動(dòng)態(tài)鏈接庫相對比較方便,VB語言的模式分析子系統(tǒng)是用動(dòng)態(tài)鏈接庫實(shí)現(xiàn)的。動(dòng)態(tài)鏈接庫程序的作用是初始化節(jié)點(diǎn)、構(gòu)造鏈表,形成被分析程序運(yùn)行所需要的數(shù)據(jù)結(jié)構(gòu)。首次調(diào)用動(dòng)態(tài)鏈接庫時(shí),掛上被分析程序退出時(shí)要執(zhí)行的函數(shù)。 檢查用來保存統(tǒng)計(jì)數(shù)據(jù)的文件存在與否。將內(nèi)存中的統(tǒng)計(jì)數(shù)據(jù)寫入文件。(2)動(dòng)態(tài)鏈接庫的進(jìn)入和退出在Windows操作系統(tǒng)中,調(diào)用動(dòng)態(tài)鏈接庫有一個(gè)特性可以利用,這就是在調(diào)用動(dòng)態(tài)鏈接庫的程序或線程退出運(yùn)行時(shí),會(huì)釋放對動(dòng)態(tài)鏈接庫的引用,在動(dòng)態(tài)鏈接庫中可以獲知這一事件,進(jìn)行退出時(shí)用戶指定的操作。對插裝程序來說,在程序退出時(shí),應(yīng)進(jìn)行的操作是調(diào)用庫函數(shù)將內(nèi)存中的數(shù)據(jù)寫入文件中。另外一種獲知被分析程序退出、進(jìn)行退出時(shí)用戶指定的操作的方法是象C++語言那樣,將退出時(shí)要執(zhí)行的函數(shù)掛在退出執(zhí)行的函數(shù)鏈上,不過這個(gè)操作是被分析程序首次調(diào)用動(dòng)態(tài)鏈接庫函數(shù)時(shí)(Process attach),由動(dòng)態(tài)鏈接庫完成的,具體做法如下
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 = 0; if (!HasHooked) atexi t (UpdateRunRusul t);
};
case DLL-THREAD-ATTACH: case DLL-THREAD-DETACH: case DLL-PROCESS.DETACH:
}
return TRUE;
}
(3)輸出函數(shù)介紹RegistLocalNode ()注冊本地節(jié)點(diǎn),主要操作為分配一個(gè)節(jié)點(diǎn)的內(nèi)存,根據(jù)傳入的參數(shù)分配文件路徑名的內(nèi)存,分配覆蓋探測數(shù)組和條件探測數(shù)組的內(nèi)存,將節(jié)點(diǎn)鏈在探測數(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)鏈接庫當(dāng)前運(yùn)行的源程序文件,參數(shù)—HUA_local為注冊時(shí)返回的節(jié)點(diǎn)地址。函數(shù)聲明為HUADLL_API void _stdcalI SetCurrentDD(struct__03HUA_record*__HUA_local);CountRP ()累計(jì)覆蓋探測點(diǎn),參數(shù)pNode為覆蓋探測數(shù)組所在節(jié)點(diǎn)地址,No為探測點(diǎn)的編號(hào),即數(shù)組元素的編號(hào)。函數(shù)聲明為HUADLL_API void _stdcall CountRP(struct —03HUA_record*pNode, unsignedint No);Count CP ()統(tǒng)計(jì)條件探測點(diǎn),參數(shù)pNode為條件探測數(shù)組所在節(jié)點(diǎn)地址,No為探測點(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í)別用于對所述可執(zhí)行程序執(zhí)行模型檢測,即將所述靜態(tài)數(shù)據(jù)庫中預(yù)存的正常程序結(jié)構(gòu)和靜態(tài)流程與所述探測代碼獲取的被測軟件運(yùn)行時(shí)的程序結(jié)構(gòu)和控制流程進(jìn)行比較,以判斷所述可執(zhí)行程序中存在程序結(jié)構(gòu)和控制流程是否正常。所述特殊類型的模式識(shí)別用于對所述可執(zhí)行程序執(zhí)行模型檢測,即將所述靜態(tài)數(shù)據(jù)庫中預(yù)存的正常程序結(jié)構(gòu)和靜態(tài)流程與所述探測代碼獲取的被測軟件運(yùn)行時(shí)的程序結(jié)構(gòu)和控制流程進(jìn)行比較,以判斷所述可執(zhí)行程序中是否存在“特殊的結(jié)構(gòu)”和“漏洞”。所述“特殊的結(jié)構(gòu)”是指與被測軟件的功能說明書不相關(guān)的變量、函數(shù)、子程序或類的消息傳遞;所述“漏洞”是指根據(jù)被測軟件的功能說明書被測軟件中缺少應(yīng)有的變量、函數(shù)、子程序或類的消息傳遞。在插裝的代碼中就包含有插入代碼的特征信息的編碼,讀取該編碼并進(jìn)行解碼就可以還原插裝代碼的特征信息。所述模式識(shí)別的步驟包括程序節(jié)點(diǎn)探測模式分析和程序段探測模式分析,用于對所述程序源代碼的程序流程按數(shù)據(jù)塊進(jìn)行分析,然后劃分出所述數(shù)據(jù)塊。所述程序節(jié)點(diǎn)探測模式分析包括判斷的入口點(diǎn)和出口點(diǎn)、if. . . else語句中的else的入口點(diǎn)和出口點(diǎn)、連接的入口點(diǎn)和出口點(diǎn)、以及程序單元的入口點(diǎn)和出口點(diǎn);
所述程序段探測模式分析是指兩個(gè)連續(xù)的程序分支點(diǎn)間的程序語句序列;所述程序分支點(diǎn)包括程序節(jié)點(diǎn)、以及無條件轉(zhuǎn)移語句與下一條語句之間的位置;所謂無條件轉(zhuǎn)移語句,以C++語言為例,就是goto語句、return語句、break語句和continue語句等這類語句。在模式識(shí)別時(shí),在內(nèi)存中一個(gè)程序的每一個(gè)包含函數(shù)的源程序文件均對應(yīng)了一個(gè)節(jié)點(diǎn),節(jié)點(diǎn)的數(shù)據(jù)結(jié)構(gòu)為
s truct--03HUA_record {
char *src_fHe; //被插裝的源程序文件的名稱和完全路徑 char *ddf He; //對應(yīng)于被插裝的源程序文件的dd文件名和路徑 char *conf He; //對應(yīng)于被插裝的源程序文件的ddc文件名和路徑 int *rp_covlist; //指向被插裝的源程序的覆蓋探測點(diǎn)統(tǒng)計(jì)數(shù)組 int rp—no;//被插裝的源程序的覆蓋探測點(diǎn)個(gè)數(shù)(對應(yīng)一個(gè)源文件) unsigned char *con;//指向被插裝源程序條件探測點(diǎn)運(yùn)行統(tǒng)計(jì)數(shù)組 unsigned int con—num;//被插裝源程序條件探測點(diǎn)的個(gè)數(shù)(對應(yīng)一個(gè) 源文件)
unsigned int deci—num ;//被插裝的源程序的條件的個(gè)數(shù)(對應(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)地址 };以下通過插入探測代碼探測if語句為例一、在沒有插裝探測代碼前的if語句源代碼程序如下
權(quán)利要求
1.一種軟件探測方法,其特征在于包括如下步驟 A、啟動(dòng)代碼插裝步驟,該步驟包括虛擬執(zhí)行被測軟件,即對被測軟件的程序源代碼進(jìn)行詞法分析和語法分析,以識(shí)別出特征代碼,該特征代碼包括變量、函數(shù)、子程序和面向?qū)ο蟮念?;然后對所述程序源代碼的程序流程按數(shù)據(jù)塊進(jìn)行劃分,以得到表述所述被測軟件的程序結(jié)構(gòu)和靜態(tài)流程的劃分?jǐn)?shù)據(jù)并存入一靜態(tài)數(shù)據(jù)庫中,同時(shí)該靜態(tài)數(shù)據(jù)庫預(yù)存有根據(jù)被測軟件的功能說明書得到的正常程序結(jié)構(gòu)和靜態(tài)流程;然后在所述程序源代碼中插入對應(yīng)于所述特征代碼的探測代碼;最后把插入了所述探測代碼的程序源代碼編譯鏈接成可執(zhí)行程序;所述探測代碼用于收集所述可執(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)成的所述被測軟件運(yùn)行時(shí)的程序結(jié)構(gòu)和控制流程; B、執(zhí)行模式識(shí)別步驟,該步驟用于對所述可執(zhí)行程序執(zhí)行模型檢測,即將所述靜態(tài)數(shù)據(jù)庫中預(yù)存的正常程序結(jié)構(gòu)和靜態(tài)流程與所述探測代碼獲取的被測軟件運(yùn)行時(shí)的程序結(jié)構(gòu)和控制流程進(jìn)行比較;若二者一致,則判斷所述可執(zhí)行程序正常;否則,則判斷所述可執(zhí)行程序中存在“特殊的結(jié)構(gòu)”或“漏洞”;所述“特殊的結(jié)構(gòu)”是指與被測軟件的功能說明書不相關(guān)的變量、函數(shù)、子程序或類的消息傳遞;所述“漏洞”是指根據(jù)被測軟件的功能說明書被測軟件中缺少應(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í)行軌跡,得出被測軟件存在“特殊的結(jié)構(gòu)”和/或“漏洞”的信息、及其運(yùn)行的時(shí)間信息和運(yùn)行次數(shù),然后通過無線或有線的方式,傳輸?shù)奖O(jiān)管節(jié)點(diǎn)和/或監(jiān)管網(wǎng)絡(luò); 所述控制流程是指虛擬執(zhí)行被測軟件,即對被測軟件的程序源代碼進(jìn)行詞法分析和語法分析,識(shí)別出特征代碼,然后對所述程序源代碼的控制流按塊進(jìn)行劃分,得到所述被測軟件的程序劃分?jǐn)?shù)據(jù)的流程; 所述靜態(tài)流程是指把插入了所述探測代碼的程序源代碼編譯鏈接成可執(zhí)行程序;運(yùn)行該可執(zhí)行程序得到的被測軟件運(yùn)行時(shí)的程序流程; 所述代碼插裝步驟中,在識(shí)別出特征代碼時(shí),同時(shí)生成插裝信息鏈表;然后根據(jù)該插裝信息鏈表在所述程序源代碼中插入對應(yīng)于所述特征代碼的探測代碼;所述根據(jù)插裝信息鏈表插裝源程序的位置包括插裝源程序文件頭部、插裝函數(shù)頭部、插裝條件表達(dá)式、插裝流程控制語句和插裝標(biāo)號(hào)語句; 程序節(jié)點(diǎn)探測模式分析和程序段探測模式分析,用于對所述程序源代碼的程序流程按數(shù)據(jù)塊進(jìn)行分析,然后劃分出所述數(shù)據(jù)塊; 所述程序節(jié)點(diǎn)探測模式分析包括判斷的入口點(diǎn)和出口點(diǎn)、if*“else語句中的else的A口點(diǎn)和出口點(diǎn)、鏈接的入口點(diǎn)和出口點(diǎn)、以及程序單元的入口點(diǎn)和出口點(diǎn); 所述程序段探測模式分析是指兩個(gè)連續(xù)的程序分支點(diǎn)間的程序語句序列;所述程序分支點(diǎn)包括程序節(jié)點(diǎn)、以及無條件轉(zhuǎn)移語句與下一條語句之間的位置。
2.一種應(yīng)用上述權(quán)利要求I所述的軟件探測方法的軟件探測器的工作方法,其特征在于軟件探測器包括與用于執(zhí)行所述可執(zhí)行程序的處理器相連的探測控制器、與探測控制器相連的無線數(shù)據(jù)收發(fā)器和/或有線數(shù)據(jù)收發(fā)器; 當(dāng)所述處理器發(fā)現(xiàn)存在“特殊的結(jié)構(gòu)”和/或“漏洞”后,執(zhí)行所述模式分析步驟,然后將被測軟件存在“特殊的結(jié)構(gòu)”和/或“漏洞”的信息、及該“特殊的結(jié)構(gòu)”和/或“漏洞”運(yùn)行的時(shí)間信息和運(yùn)行次數(shù)傳送至所述探測控制器,探測控制器通過所述無線數(shù)據(jù)收發(fā)器和/或有線數(shù)據(jù)收發(fā)器將所述被測軟件存在“特殊的結(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所述的軟件探測器的軟件探測系統(tǒng),其特征在于包括作為所述監(jiān)管節(jié)點(diǎn)的上位機(jī)、與分布于不同地域的多個(gè)所述上位機(jī)相連的監(jiān)管服務(wù)器系統(tǒng);所述上位機(jī)用于與同地域內(nèi)的多個(gè)所述軟件探測器通過無線和/或有線的方式通信連接。
全文摘要
本發(fā)明涉及一種軟件探測方法和應(yīng)用該方法的軟件探測器及軟件探測系統(tǒng)。所述軟件探測方法用于對應(yīng)用軟件在運(yùn)行中的程序流程信息的實(shí)時(shí)探測,在對被測軟件進(jìn)行代碼插裝后,通過模型檢測判斷是否存在“特殊的結(jié)構(gòu)”或“漏洞”,并找出代碼執(zhí)行軌跡,然后將程序流程信息采用無線或有線方式將此信息傳送到監(jiān)管節(jié)點(diǎn)或監(jiān)管網(wǎng)絡(luò)。本發(fā)明在法制監(jiān)管領(lǐng)域可以對計(jì)算機(jī)系統(tǒng)內(nèi)部運(yùn)行的軟件進(jìn)行實(shí)時(shí)監(jiān)控。本發(fā)明的軟件探測系統(tǒng)構(gòu)成法制計(jì)量監(jiān)控網(wǎng)絡(luò),對計(jì)量器具的使用進(jìn)行監(jiān)控,為執(zhí)法打假快速反應(yīng)提供服務(wù)和支撐。能對電子衡器軟件或金融監(jiān)管軟件中的“后門程序”和“作弊口令”等特定目標(biāo)進(jìn)行探測、并將探測得的信息對外傳輸,以使監(jiān)管部門實(shí)時(shí)監(jiān)視。
文檔編號(hào)G06F11/36GK102646068SQ201210054220
公開日2012年8月22日 申請日期2010年4月13日 優(yōu)先權(quán)日2010年4月13日
發(fā)明者吳華芳, 張克東, 張溟 申請人:常州云博軟件工程技術(shù)有限公司
網(wǎng)友詢問留言 已有0條留言
  • 還沒有人留言評論。精彩留言會(huì)獲得點(diǎn)贊!
1
康马县| 三原县| 康平县| 武城县| 余干县| 光山县| 崇义县| 临朐县| 贵德县| 卓尼县| 鱼台县| 阳原县| 宁河县| 射洪县| 新民市| 营口市| 新野县| 石河子市| 黎平县| 衢州市| 阿勒泰市| 武山县| 博罗县| 甘谷县| 天气| 阿尔山市| 象州县| 会东县| 兴义市| 环江| 灵台县| 白城市| 菏泽市| 旌德县| 贡觉县| 长子县| 无极县| 芦山县| 屏山县| 增城市| 龙南县|