專利名稱::帶有安全需求的應(yīng)用程序的構(gòu)建方法和裝置的制作方法
技術(shù)領(lǐng)域:
:本發(fā)明涉及計算機(jī)軟件技術(shù),尤其涉及一種安全應(yīng)用程序(PE應(yīng)用程序)的構(gòu)建方法和裝置。
背景技術(shù):
:當(dāng)前,可移植的執(zhí)行體(PE,PortableExecutable)文件格式應(yīng)用于所有版本的Windows32位系統(tǒng),包括Windows9x、WindowsNT、Windows2000和WindowsXP等。它是Win32環(huán)境中執(zhí)行體(EXE或DLL)的文件格式。PE文件格式如圖1所示,包括DOS部首(DOSHead)、PE文件頭(PEHeader)、節(jié)表(sectiontable)、節(jié)(Section)和調(diào)試信息。DOS部首位于PE文件的文件首,包括DOSMZheader和DOSStub。有了DOSMZheader,一旦程序在DOS下執(zhí)行,DOS就能識別出這是有效的執(zhí)行體,然后運行緊隨MZHeader之后的DOSStub。PEHeader緊接著DOSStub。它是一個IMAGE_NT_HEADERS結(jié)構(gòu)。其中包含了很多PE文件被載入內(nèi)存時需要用到的重要域。PEHeader接下來是數(shù)組結(jié)構(gòu)的節(jié)表(SectionTable)。如果PE文件里有5個節(jié),那么此SectionTable結(jié)構(gòu)數(shù)組內(nèi)就有5個成員,每個成員包含對應(yīng)節(jié)的屬性、文件偏移量、虛擬偏移量等。節(jié)表(SectionTable)之后是PE文件的真正內(nèi)容,它劃分成塊,稱之為節(jié)(sections)。每節(jié)是一塊擁有共同屬性的數(shù)據(jù),比如代碼/數(shù)據(jù)、讀/寫等。Sections是以其起始位置來排列,而不是以其字母次序來排列。通過節(jié)表提供的信息,我們可以找到這些節(jié)。常見的Sections包括.arch最初的構(gòu)建信息(AlphaArchitectureInformation).bss未經(jīng)初始化的數(shù)據(jù).CRTC運行期只讀數(shù)據(jù).data已經(jīng)初始化的數(shù)據(jù).debug調(diào)試信息.didata延遲輸入文件名表.edata導(dǎo)出文件名表.idata導(dǎo)入文件名表.pdata異常信息(ExceptionInformation).rdata只讀的初始化數(shù)據(jù).reloc重定位表信息.rsrc資源.text.exe或.dll文件的可執(zhí)行代碼.tls線程的本地存儲器.xdata異常處理表其中.text節(jié)存儲著程序的執(zhí)行代碼,實現(xiàn)著程序邏輯。目前,對于有安全要求的程序,其安全邏輯也是在此節(jié)中實現(xiàn)。安全需求和安全邏輯的實現(xiàn)都嵌入到應(yīng)用程序具體實現(xiàn)邏輯中。應(yīng)用程序的實現(xiàn)依賴于軟件的設(shè)計和代碼的編寫,對于不同的設(shè)計人員和不同的編程人員,針對安全需求的考慮和對安全邏輯的實現(xiàn)會出現(xiàn)不同;同時在應(yīng)用邏輯中實現(xiàn)復(fù)雜的安全邏輯,實現(xiàn)起來也相對較難,會出現(xiàn)不穩(wěn)定性和不可測性;PE文件格式中沒有能描述應(yīng)用程序安全需求和安全邏輯實現(xiàn)的標(biāo)準(zhǔn)的程序框架,不能給安全程序提供較一致的安全程序構(gòu)建方法,因此不能縮短開發(fā)周期、提高可靠性。
發(fā)明內(nèi)容基于目前PE格式的應(yīng)用程序,如果對安全方面有要求,相關(guān)的安全需求和安全實現(xiàn)邏輯都會由應(yīng)用程序設(shè)計人員進(jìn)行設(shè)計,由編碼人員進(jìn)行編碼,這制約了安全程序的構(gòu)建,不規(guī)范不可靠,增加設(shè)計和開發(fā)的工作量,延長開發(fā)周期。為了解決這方面的問題,本發(fā)明基于PE文件格式,提供一種具有描述安全需求、實現(xiàn)安全邏輯的通用架構(gòu)的安全程序的構(gòu)建方法和裝置。一方面,提出一種帶有安全需求的應(yīng)用程序的構(gòu)建方法。該方法包括步驟A、將源程序中嵌入應(yīng)用邏輯第一安全需求檢查點的第一安全需求代碼段轉(zhuǎn)換為該源程序生成的可執(zhí)行文件中獨立于應(yīng)用邏輯部分的第一安全需求部分;B、在可執(zhí)行文件的應(yīng)用邏輯部分中與源程序第一安全需求檢查點對應(yīng)的入口點,鏈接安全實現(xiàn)邏輯并向其傳遞第一安全需求部分在該可執(zhí)行文件中所處位置的信息。上述方法還包括步驟C、該應(yīng)用邏輯部分運行到該對應(yīng)的入口點時,調(diào)用該安全實現(xiàn)邏輯根據(jù)收到的位置信息找到第一安全需求部分并按其安全需求對運行環(huán)境進(jìn)行檢測。上述步驟A進(jìn)一步包括對第一安全需求代碼段進(jìn)行有效性和一致性檢查,通過檢查后將第一安全需求代碼段轉(zhuǎn)換成第一安全需求部分。上述方法中,采用可擴(kuò)展置標(biāo)語言XML定義的元素來描述以下類型代碼段中至少一種代碼段源程序中嵌入應(yīng)用邏輯的安全需求代碼段;源程序中安全需求代碼段轉(zhuǎn)換后的可執(zhí)行文件中安全需求部分。上述方法中,第一安全需求部分是該可執(zhí)行文件中一個安全數(shù)據(jù)節(jié)所包括的至少一個安全需求段之一。上述方法中,第一安全需求部分在所述可執(zhí)行文件中所處位置的信息是第一安全需求部分對應(yīng)的段頭在安全數(shù)據(jù)節(jié)的段頭表中的索引號。另一方面,提出一種帶有安全需求的應(yīng)用程序的構(gòu)建裝置。該裝置包括存儲器和至少一個保存在存儲器中的應(yīng)用程序源代碼,還包括安全編譯器和安全需求解釋器。該安全編譯器進(jìn)一步包括安全需求部分轉(zhuǎn)換模塊,用于將源程序中嵌入應(yīng)用邏輯第一安全需求檢查點的第一安全需求代碼段轉(zhuǎn)換為該源程序生成的可執(zhí)行文件中獨立于應(yīng)用邏輯部分的第一安全需求部分;安全需求解釋器鏈接模塊,用于在可執(zhí)行文件的應(yīng)用邏輯部分中與源程序第一安全需求檢查點對應(yīng)的入口點,鏈接安全需求解釋器并向其傳遞第一安全需求部分在該可執(zhí)行文件中所處位置的信息。該安全需求解釋器用于根據(jù)接收的位置信息找到第一安全需求部分,并對其進(jìn)行解釋執(zhí)行。上述安全需求解釋器進(jìn)一步包括位置信息接收模塊,用于接收安全編譯器傳遞來的位置信息;安全需求部分查找模塊,用于根據(jù)位置信息接收模塊收到的位置信息在可執(zhí)行文件中查找第一安全需求部分;安全需求部分分析模塊,用于對安全需求部分查找模塊找到的第一安全需求部分進(jìn)行分析;安全檢測模塊,用于根據(jù)安全需求部分分析模塊的分析結(jié)果對運行環(huán)境進(jìn)行檢測。上述安全編譯器還包括有效性與一致性檢查模塊,用于對第一安全需求代碼段進(jìn)行有效性和一致性檢查,通過檢查后將第一安全需求代碼段傳遞給安全需求部分轉(zhuǎn)換模塊。上述第一安全需求部分是該可執(zhí)行文件中一個安全數(shù)據(jù)節(jié)所包括的至少一個安全需求段之一。上述第一安全需求部分在該可執(zhí)行文件中所處位置的信息是第一安全需求部分對應(yīng)的段頭在安全數(shù)據(jù)節(jié)的段頭表中的索引號。上述裝置中,采用可擴(kuò)展置標(biāo)語言XML定義的元素來描述以下類型代碼段中至少一種代碼段源程序中嵌入應(yīng)用邏輯的安全需求代碼段;源程序中安全需求代碼段轉(zhuǎn)換后的可執(zhí)行文件中安全需求部分。本發(fā)明主要的優(yōu)點和特點如下具有通用架構(gòu)的安全程序的構(gòu)建方法和裝置將安全需求和安全邏輯從應(yīng)用程序中分離出來,提高到一個通用的層面,由比應(yīng)用程序更低層的相關(guān)軟件層面實現(xiàn),這些更低的軟件層面主要由操作系統(tǒng)(OperatingSystem)供應(yīng)商、開發(fā)工具供應(yīng)商等實現(xiàn),大大規(guī)范了安全程序的實現(xiàn)流程,減少了有安全需求的應(yīng)用程序的開發(fā)工作量,提高軟件的可靠性和可移植性。圖1示出PE文件的框架結(jié)構(gòu);圖2示出PE文件增加.secure節(jié)那部分架構(gòu);圖3示出安全需求分段;圖4示出.secure節(jié)采用的結(jié)構(gòu);圖5示出帶安全需求的應(yīng)用程序源程序;圖6是應(yīng)用程序源程序中的安全需求描述轉(zhuǎn)化為安全需求段的過程示意圖;圖7是安全編譯器的處理過程示意圖;圖8是安全需求解釋器的處理過程示意圖。具體實施例方式在PE格式的文件中,根據(jù)數(shù)據(jù)屬性的不同分成很多節(jié)(sections),比如保存程序代碼的.text節(jié)、保存資源的.rsrc節(jié)等。為了實現(xiàn)將安全需求和安全實現(xiàn)邏輯從應(yīng)用程序中分離出來,在PE文件中加入一個.secure節(jié),用來保存應(yīng)用程序?qū)\行環(huán)境的安全需求,如圖2所示。應(yīng)用程序根據(jù)應(yīng)用的安全需要,在程序入口點或某些代碼段的入口點進(jìn)行安全需求檢查。這些檢查安全需求的處理點稱為“安全需求檢查點”。應(yīng)用程序的安全需求根據(jù)各個“安全需求檢查點”的不同,分成“安全需求段”,每個安全檢查點對應(yīng)于一個“安全需求段”。一個應(yīng)用程序的安全需求由若干個“安全需求段”組成,如圖3所示。根據(jù)應(yīng)用程序“安全需求檢查點”的不同分成若干“安全需求段”的安全需求,都存儲于.secure節(jié)中。每個“安全需求段”對應(yīng)于一個“安全需求檢查點”,作為相應(yīng)代碼執(zhí)行的安全條件。為了方便“安全需求段”的檢索,.secure節(jié)采用的結(jié)構(gòu)參見圖4。.secure節(jié)包括“節(jié)頭”、“安全需求段頭表”和“安全需求段表”。“節(jié)頭”保存“安全需求段”的總概信息,如“安全需求段”的段數(shù)Typedefstruct_IMAGE_SECURE_HEAD{WORDSecureNumber;/**安全需求段的段數(shù)**/……}IMAGE_SECURE_HEAD,*PIMAGE_SECURE_HEAD;SecureNumber字段為“安全需求段”的段數(shù)?!鞍踩枨蠖晤^表”中表項的數(shù)量與SecureNumber字段的值相一致。每個表項的結(jié)構(gòu)都相同,存儲著相應(yīng)“安全需求段”的偏移即相對虛擬地址和此安全需求段的大小。其結(jié)構(gòu)如下typedefstruct_MAGE_SECURE_SECTION_HEADER{DWORDVirtualAddress;/**相對虛擬地址RVA**/DWORDSizeOfRawData;/**安全需求段的大小**/}IMAGE_SECURE_SECTION_HEADER,*PIMAGE_SECURE_SECTION_HEADER;其中,VirtualAddress為相應(yīng)安全需求段相對于.secure節(jié)基地址的相對虛擬地址(RelativeVirtualAddress);SizeOfRawData為相應(yīng)安全需求段的大小。通過安全需求段頭表中表項,可以定位相應(yīng)安全需求段的位置?!鞍踩枨蠖巍贝鎯χ鄳?yīng)“安全需求檢查點”對應(yīng)的安全需求。各個“安全需求檢查點”的安全需求根據(jù)需求會變化較大,為了方便表達(dá)各種安全需求及其組合,“安全需求段”通過可擴(kuò)展置標(biāo)語言XML(ExtensibleMarkuplanguage)來描述,例如<SECURE><OS_TYPE>WINDOWS</OS_TYPE><VERSION>2000</VERSION><PATCH>SP3</PATCH><FIREWALL>MUST</FIREWALL><VIRUS>MUST</VIRUS><IDPS>MUST</IDPS><AUTHENTICATION><TYPE>BIDIRECTIONAL</TYPE><SERVER>119.239.112.111</SERVER><CERTIFICATE>…</CERTIFICATE></AUTHENTICATION><ENCRYPT>MUST</ENCRYPT></SECURE>其中元素SECURE表示一個“安全需求段”的開始和結(jié)束。元素OS_TYPE表示操作系統(tǒng)的類型,其可取值WINDOWS或LINUX等。元素VERSION表示操作系統(tǒng)的版本,其取值與OS_TYPE取值相關(guān),比如當(dāng)OS_TYPE為WINDOWS值時,VERSION可取值9x、2000或XP等。元素PATCH表示操作系統(tǒng)的補(bǔ)丁版本,其取值與OS_TYPE和VERSION取值相關(guān),比如當(dāng)OS_TYPE為WINDOWS值,VERSION為2000時,PATCH可取值SP1、SP2、SP3或SP4等。元素FIREWALL表示是否需要防火墻,其可取值MUST,表示必須需要防火墻;OPTIONAL表示可以有防火墻;NO表示不需要防火墻。元素VIRUS表示是否需要防病毒軟件,其可取值MUST,表示必須有防病毒軟件;OPTIONAL表示可以有防病毒軟件;NO表示不需要防病毒軟件。元素IDPS表示是否需要入侵檢測和防護(hù)系統(tǒng),其可取值MUST,表示必須有入侵檢測和防護(hù)系統(tǒng);OPTIONAL表示可以有入侵檢測和防護(hù)系統(tǒng);NO表示不需要入侵檢測和防護(hù)系統(tǒng)。元素AUTHENTICATION表示需要進(jìn)行身份認(rèn)證。其中還有TYPE、SERVER、CERTIFICATE等子元素。TYPE表示身份認(rèn)證的類型SINGLE表示單向認(rèn)證,即只有服務(wù)器對客戶端的應(yīng)用程序進(jìn)行認(rèn)證;BIDIRECTIONAL表示雙向認(rèn)證,即除了服務(wù)器對客戶端的應(yīng)用程序進(jìn)行認(rèn)證外,客戶端的應(yīng)用程序也對服務(wù)器進(jìn)行認(rèn)證。SERVER表示服務(wù)器的網(wǎng)絡(luò)IP地址。CERTIFICATE包含了相關(guān)的客戶端的證書。元素ENCRYPT表示是否需要對通信信息進(jìn)行加密。其可取值MUST,表示必須要對通信信息進(jìn)行加密;NO表示不需要對通信信息進(jìn)行加密。以上“安全需求段”中XML的元素是以常用的安全要求作為安全需求進(jìn)行概要介紹,如有擴(kuò)展需要,可以加入相應(yīng)新元素,代表新的安全需求。PE文件的.secure節(jié)存儲著應(yīng)用程序的安全需求。安全需求最初由應(yīng)用程序設(shè)計和開發(fā)者根據(jù)應(yīng)用的安全要求進(jìn)行確定,然后描述到應(yīng)用程序源代碼中。帶有安全需求的應(yīng)用程序源代碼在編譯時,經(jīng)具有安全需求處理功能的“安全編譯器”處理后,相應(yīng)的安全需求存儲到相應(yīng)PE文件的.secure節(jié)中。應(yīng)用程序的開發(fā)者在應(yīng)用程序源代碼中,通過“安全描述語言”描述相應(yīng)的安全需求?!鞍踩枋稣Z言”以當(dāng)前高級編程語言如C語言等為宿主語言?!鞍踩枋稣Z言”描述的安全需求嵌入到宿主語言編寫的程序代碼中,如圖5所示。嵌入有“安全描述語言”描述的安全需求的應(yīng)用程序源程序,通過“安全編譯器”進(jìn)行編譯后生成PE文件格式的執(zhí)行文件體,其中的安全需求描述也被編譯轉(zhuǎn)化為安全需求,并存儲于.secure節(jié)中。每個“安全需求檢查點”對應(yīng)的安全需求都存儲到.secure節(jié)中一個相應(yīng)的“安全需求段”中,如圖6所示。“安全描述語言”用來描述應(yīng)用程序中各個“安全需求檢查點”的安全需求。由于.secure節(jié)中各“安全需求段”中的安全需求是通過XML語言進(jìn)行描述的,為了方便和簡化,“安全描述語言”也采用XML語言嵌入到應(yīng)用程序源代碼中,以描述安全需求?!鞍踩枋稣Z言”中的元素與“安全需求段”中的XML元素基本一致。例如…<SECURE><AUTHENTICATION><TYPE>BIDIRECTINAL</TYPE><SERVER>210.223.119.110</SERVER><CERTIFICATE>...</CERTIFICATE></AUTHENTICATION><ENCRYPT>MUST</ENCRYPT>withdrawFromAccount();/**取款--安全需求檢查點**/…“安全編譯器”為各種高級編程語言編譯器的擴(kuò)展。“安全編譯器”在編譯帶有安全需求的應(yīng)用程序源程序時,對于源程序中每一個“安全需求檢查點”的安全需求都進(jìn)行如下處理(1)檢查安全需求的有效性和一致性。主要檢查XML元素的合法性和使用的一致性等。(2)對于通過有效性和一致性檢查的某個“安全需求檢查點”的安全需求,“安全編譯器”將其存入PE文件.secure節(jié)中,作為一個“安全需求段”,并記下此“安全需求段”對應(yīng)的“安全需求段頭表表項”在“安全需求段頭表”中的索引號,如索引號為“N”。(3)“安全需求檢查點”的安全需求轉(zhuǎn)化為對“安全需求解釋器”的調(diào)用,參數(shù)為“安全需求段”對應(yīng)的“安全需求段頭表表項”在“安全需求段頭表”中的索引號,如“N”。CALLSECURE_INTERPRETER(N);進(jìn)一步地,該安全編譯器包括有效性與一致性檢查模塊,對應(yīng)用程序源程序每個安全需求檢查點嵌入的安全需求描述進(jìn)行有效性和一致性檢查,將通過檢查的安全需求描述傳遞給安全需求部分轉(zhuǎn)換模塊;安全需求部分轉(zhuǎn)換模塊,將傳遞來的安全需求描述編譯轉(zhuǎn)化為安全需求并存儲于.secure節(jié)內(nèi)相應(yīng)的“安全需求段”中;安全需求解釋器鏈接模塊,在.text節(jié)每個安全需求檢查點上鏈接安全需求解釋器,并向其傳遞相應(yīng)的安全需求段對應(yīng)的安全需求段頭表表項在安全需求段頭表中的索引號。通過“安全編譯器”的上述處理后,應(yīng)用程序中的安全需求最終轉(zhuǎn)化為了對“安全需求解釋器”的調(diào)用,而需要“安全需求解釋器”處理的安全需求則存儲于PE文件的.secure節(jié)中,它們之間通過“索引號”進(jìn)行關(guān)聯(lián),如圖7所示。當(dāng)應(yīng)用程序運行時,PE文件載入器將各節(jié)映射到內(nèi)存中某塊地址(VirtualAddress)上,其中.text節(jié)為應(yīng)用程序執(zhí)行代碼,.secure節(jié)為安全需求。PE文件被載入內(nèi)存后,應(yīng)用程序從程序入口點開始運行。當(dāng)應(yīng)用程序運行到“安全需求檢查點”時,其實就是對“安全需求解釋器”的調(diào)用。在調(diào)用時,傳遞相應(yīng)安全需求對應(yīng)的“索引號”,比如N?!鞍踩枨蠼忉屍鳌北徽{(diào)用后,執(zhí)行的操作如圖8所示,操作流程具體如下(1)首先獲取傳遞來的安全需求“索引號”;(2)然后根據(jù)“索引號”,查找.secure節(jié)中的“安全需求段頭表”,找到相應(yīng)的“安全需求段頭表”的表項,并從此“安全需求段頭表”的表項中,獲得相應(yīng)“安全需求段”的起始地址和大??;(3)接著對“安全需求段”中描述的安全需求進(jìn)行分析,并且進(jìn)行相應(yīng)的檢測和檢驗。檢測當(dāng)前運行環(huán)境是否能滿足應(yīng)用程序此安全需求段的安全要求;(4)如果當(dāng)前運行環(huán)境能滿足應(yīng)用程序此安全需求段的安全要求,應(yīng)用程序從“安全需求檢查點”的下一條執(zhí)行代碼開始執(zhí)行;否則,應(yīng)用程序返回上層邏輯,不能執(zhí)行相應(yīng)的代碼。進(jìn)一步地,安全需求解釋器包括位置信息接收模塊,用于接收安全編譯器傳遞來的安全需求段對應(yīng)的安全需求段頭表表項在安全需求段頭表中的索引號;安全需求部分查找模塊,用于根據(jù)位置信息接收模塊收到的索引號在可執(zhí)行文件中查找安全需求段;安全需求部分分析模塊,用于對安全需求部分查找模塊找到的安全需求段進(jìn)行分析;安全檢測模塊,用于根據(jù)安全需求部分分析模塊的分析結(jié)果對運行環(huán)境進(jìn)行檢測?!鞍踩枨蠼忉屍鳌必?fù)責(zé)對安全需求進(jìn)行分析和安全條件的檢測,判斷當(dāng)前運行環(huán)境是否滿足當(dāng)前“安全需求段”的安全要求?!鞍踩枨蠼忉屍鳌笔紫染哂蠿ML解釋器的部分功能,實現(xiàn)對“安全需求段”中描述安全需求的XML的解釋;其次,針對安全需求的每個XML元素,“安全需求解釋器”都會有相應(yīng)的安全處理機(jī)制。對于例如元素VIRUS:<VIRUS>MUST</VIRUS>,處理如下“安全需求解釋器”會檢測當(dāng)前系統(tǒng)是否安裝了防病毒軟件,如果安裝了,應(yīng)用程序?qū)摹鞍踩枨髾z查點”繼續(xù)執(zhí)行;否則,跳轉(zhuǎn)到上一邏輯,不能執(zhí)行相關(guān)的代碼。“安全需求解釋器”可以以動態(tài)鏈接庫(DLL)的形式出現(xiàn)。常用的安全要求在通用的“安全需求解釋器”中實現(xiàn),如應(yīng)用程序需要,也可以進(jìn)行擴(kuò)充。總而言之,該方案在PE文件格式中加入.secure節(jié),同時引入“安全描述語言”、“安全編譯器”和“安全需求解釋器”等概念,將安全需求和安全實現(xiàn)邏輯從應(yīng)用程序中分離出來?!鞍踩枋稣Z言”描述分離出來的安全需求,“安全需求解釋器”實現(xiàn)安全需求的安全邏輯。首先,定義“安全描述語言”,用來描述應(yīng)用程序?qū)\行環(huán)境的各種安全需求?!鞍踩枋稣Z言”用“可擴(kuò)展置標(biāo)語言(XML,eXtensibleMarkupLanguage)”進(jìn)行描述。定義“安全描述語言”,就是確定描述安全需求的相關(guān)XML元素。每個XML元素代表著一種安全需求,或者一種安全需求的一部分。常用的元素比如SECURE元素表示“安全需求段”的開始OS_TYPE元素表示操作系統(tǒng)類型VERSION元素表示操作系統(tǒng)的版本PATCH元素表示操作系統(tǒng)補(bǔ)丁版本FIREWALL元素表示是否需要防火墻VIRUS元素表示是否需要安全防病毒軟件IDPS元素表示是否需要安裝入侵檢測和防護(hù)系統(tǒng)AUTHENTICATION元素表示需要進(jìn)行身份認(rèn)證TYPE元素表示身份認(rèn)證的類型SERVER元素表示身份認(rèn)證服務(wù)器CERTIFICATE元素客戶端證書ENCRYPT元素表示是否需要信息加密接著,以動態(tài)連接庫(DLL)的形式構(gòu)建“安全需求解釋器”。針對“安全描述語言”中的每個XML元素,“安全需求解釋器”都要實現(xiàn)相應(yīng)的安全處理,檢測、校驗運行環(huán)境是否滿足相應(yīng)的安全要求。“安全需求解釋器”由PE文件載入器在載入應(yīng)用程序時,載入內(nèi)存;在應(yīng)用程序運行到“安全需求檢查點”時調(diào)用。對于每個“安全需求段”,只有通過“安全需求解釋器”校驗,并證明當(dāng)前運行環(huán)境滿足應(yīng)用程序的安全需求時,應(yīng)用程序才能往下運行;否則,轉(zhuǎn)到上一級邏輯。然后,擴(kuò)展高級語言的編譯/鏈接器,增加對由“安全描述語言”描述的安全需求的編譯和鏈接功能。經(jīng)編譯/鏈接后,安全需求存入PE文件中的.secure節(jié)中,同時相應(yīng)的“安全需求檢查點”用對“安全需求解釋器”的調(diào)用來代替。利用“安全描述語言”、“安全編譯器”和“安全需求解釋器”,為安全應(yīng)用程序構(gòu)建提供了一種通用的框架,由于安全需求和安全實現(xiàn)邏輯從應(yīng)用程序中分離,這為構(gòu)建適合各種安全需求的應(yīng)用程序提供了靈活、快捷的方法。顯然,本領(lǐng)域的技術(shù)人員可以對本發(fā)明進(jìn)行各種改動和變型而不脫離本發(fā)明的精神和范圍。這樣,倘若本發(fā)明的這些修改和變型屬于本發(fā)明權(quán)利要求及其等同技術(shù)的范圍之內(nèi),則本發(fā)明也意圖包含這些改動和變型在內(nèi)。權(quán)利要求1.一種帶有安全需求的應(yīng)用程序的構(gòu)建方法,包括以下步驟A、將源程序中嵌入應(yīng)用邏輯第一安全需求檢查點的第一安全需求代碼段轉(zhuǎn)換為所述源程序生成的可執(zhí)行文件中獨立于應(yīng)用邏輯部分的第一安全需求部分;B、在可執(zhí)行文件的應(yīng)用邏輯部分中與源程序第一安全需求檢查點對應(yīng)的入口點,鏈接安全實現(xiàn)邏輯并向其傳遞第一安全需求部分在所述可執(zhí)行文件中所處位置的信息。2.如權(quán)利要求1所述的方法,其特征在于還包括步驟C、所述應(yīng)用邏輯部分運行到所述對應(yīng)的入口點時,調(diào)用所述安全實現(xiàn)邏輯根據(jù)收到的位置信息找到第一安全需求部分并按其安全需求對運行環(huán)境進(jìn)行檢測。3.如權(quán)利要求1所述的方法,其特征在于步驟A進(jìn)一步包括對第一安全需求代碼段進(jìn)行有效性和一致性檢查,通過檢查后將第一安全需求代碼段轉(zhuǎn)換成第一安全需求部分。4.如權(quán)利要求1所述的方法,其特征在于采用可擴(kuò)展置標(biāo)語言XML定義的元素來描述下述類型代碼段中至少一種代碼段源程序中嵌入應(yīng)用邏輯的安全需求代碼段;源程序中安全需求代碼段轉(zhuǎn)換后的可執(zhí)行文件中安全需求部分。5.如權(quán)利要求1所述的方法,其特征在于第一安全需求部分是所述可執(zhí)行文件中一個安全數(shù)據(jù)節(jié)所包括的至少一個安全需求段之一。6.如權(quán)利要求5所述的方法,其特征在于第一安全需求部分在所述可執(zhí)行文件中所處位置的信息是第一安全需求部分對應(yīng)的段頭在安全數(shù)據(jù)節(jié)的段頭表中的索引號。7.一種帶有安全需求的應(yīng)用程序的構(gòu)建裝置,包括存儲器和至少一個保存在存儲器中的應(yīng)用程序源代碼,其特征在于還包括安全編譯器和安全需求解釋器,所述安全編譯器進(jìn)一步包括安全需求部分轉(zhuǎn)換模塊,用于將源程序中嵌入應(yīng)用邏輯第一安全需求檢查點的第一安全需求代碼段轉(zhuǎn)換為所述源程序生成的可執(zhí)行文件中獨立于應(yīng)用邏輯部分的第一安全需求部分;安全需求解釋器鏈接模塊,用于在可執(zhí)行文件的應(yīng)用邏輯部分中與源程序第一安全需求檢查點對應(yīng)的入口點,鏈接安全需求解釋器并向其傳遞第一安全需求部分在所述可執(zhí)行文件中所處位置的信息;所述安全需求解釋器,用于根據(jù)接收的位置信息找到第一安全需求部分,并對其進(jìn)行解釋執(zhí)行。8.如權(quán)利要求7所述的裝置,其特征在于安全需求解釋器進(jìn)一步包括位置信息接收模塊,用于接收安全編譯器傳遞來的位置信息;安全需求部分查找模塊,用于根據(jù)位置信息接收模塊收到的位置信息在可執(zhí)行文件中查找第一安全需求部分;安全需求部分分析模塊,用于對安全需求部分查找模塊找到的第一安全需求部分進(jìn)行分析;安全檢測模塊,用于根據(jù)安全需求部分分析模塊的分析結(jié)果對運行環(huán)境進(jìn)行檢測。9.如權(quán)利要求7所述的裝置,其特征在于安全編譯器還包括有效性與一致性檢查模塊,用于對第一安全需求代碼段進(jìn)行有效性和一致性檢查,通過檢查后將第一安全需求代碼段傳遞給安全需求部分轉(zhuǎn)換模塊。10.如權(quán)利要求7所述的裝置,其特征在于第一安全需求部分是所述可執(zhí)行文件中一個安全數(shù)據(jù)節(jié)所包括的至少一個安全需求段之一。11.如權(quán)利要求10所述的裝置,其特征在于第一安全需求部分在所述可執(zhí)行文件中所處位置的信息是第一安全需求部分對應(yīng)的段頭在安全數(shù)據(jù)節(jié)的段頭表中的索引號。12.如權(quán)利要求7所述的裝置,其特征在于采用可擴(kuò)展置標(biāo)語言XML定義的元素來描述下述類型代碼段中至少一種代碼段源程序中嵌入應(yīng)用邏輯的安全需求代碼段;源程序中安全需求代碼段轉(zhuǎn)換后的可執(zhí)行文件中安全需求部分。全文摘要本發(fā)明公開一種帶有安全需求的應(yīng)用程序的構(gòu)建方法和裝置。在安全編譯器中,安全需求部分轉(zhuǎn)換模塊將源程序中嵌入應(yīng)用邏輯第一安全需求檢查點的第一安全需求代碼段轉(zhuǎn)換為該源程序生成的可執(zhí)行文件中獨立于應(yīng)用邏輯部分的第一安全需求部分;安全需求解釋器鏈接模塊在可執(zhí)行文件的應(yīng)用邏輯部分中與源程序第一安全需求檢查點對應(yīng)的入口點,鏈接安全需求解釋器并向其傳遞第一安全需求部分在該可執(zhí)行文件中所處位置的信息。安全需求解釋器根據(jù)接收的位置信息找到第一安全需求部分,并對其進(jìn)行解釋執(zhí)行。本發(fā)明將安全需求和安全邏輯從應(yīng)用程序中分離,提高到一個通用的層面,規(guī)范了安全程序的實現(xiàn)流程,減少了開發(fā)工作量,提高了軟件的可靠性和可移植性。文檔編號G06F9/45GK101042657SQ20061006556公開日2007年9月26日申請日期2006年3月22日優(yōu)先權(quán)日2006年3月22日發(fā)明者歐啟倫,高翔申請人:北京握奇數(shù)據(jù)系統(tǒng)有限公司