專利名稱:產(chǎn)生及利用特征碼以監(jiān)測程序的裝置及方法
技術(shù)領(lǐng)域:
本發(fā)明涉及一種監(jiān)測程序的裝置及方法;尤其涉及一種利用應(yīng)用程序 接口偵測(Application Program Interface Hooking;簡稱API Hooking) 技術(shù)以監(jiān)測程序的裝置及方法。
背景技術(shù):
由于因特網(wǎng)的普及,近年來計(jì)算機(jī)病毒的發(fā)展也以可在因特網(wǎng)間傳遞 的蠕蟲及特洛伊木馬程序等為主。在微軟窗口操作系統(tǒng)環(huán)境中,這些蠕蟲 及特洛伊木馬程序主要是趁執(zhí)行中的程序發(fā)生緩沖區(qū)溢位(buffer overflow)的問題時(shí),或趁系統(tǒng)呼叫應(yīng)用程序接口 (Application Program Interface;簡稱API)時(shí),取得對程序的控制權(quán),進(jìn)而破壞整個(gè)計(jì)算機(jī)的 運(yùn)行。圖1A是描述程序(source function)lll呼叫目標(biāo)應(yīng)用程序接口 112 的已有技術(shù)的示意圖。圖中箭頭所指的方向代表函式間呼叫的方向。由箭 頭113、 114分別可知,程序U1直接呼叫目標(biāo)應(yīng)用程序接口 112,而目標(biāo) 應(yīng)用程序接口 112執(zhí)行完后亦直接返回程序111?,F(xiàn)行的防毒軟件都是在發(fā)生第一次災(zāi)情之后,找出并記錄蠕蟲及特洛 伊木馬程序等病毒的特征,再將這些特征加入病毒碼中,以供日后比對。 現(xiàn)行技術(shù)主要采取反組譯的方式,記錄待測執(zhí)行文件所有應(yīng)用程序接口的 返回地址,再于執(zhí)行時(shí)進(jìn)行比對。然而,此種技術(shù)有兩個(gè)主要的缺點(diǎn)。第 一,并非所有的執(zhí)行檔都可以進(jìn)行反組譯,例如編碼過后的執(zhí)行文件及外 掛程序(plug-in)等,也因此無法處理動(dòng)態(tài)加載的程序。第二,使用此種 方式,需要監(jiān)測所有的應(yīng)用程序接口,因而會(huì)消耗大量資源。因此,如何提供一種能處理編碼過后的執(zhí)行文件及外掛程序的應(yīng)用程 序接口監(jiān)測技術(shù),亦即動(dòng)態(tài)的監(jiān)測技術(shù),同時(shí)使這樣的技術(shù)不耗費(fèi)過多的 資源,仍為此領(lǐng)域值得研究的課題。發(fā)明內(nèi)容本發(fā)明的一目的在于提供一種產(chǎn)生特征碼以監(jiān)測程序的裝置。該裝置 包含呼叫模塊、記錄模塊及產(chǎn)生模塊。該呼叫模塊用以使該程序通過應(yīng)用 程序接口呼叫函式。該記錄模塊用以記錄該應(yīng)用程序接口呼叫該函式后的 返回地址。該產(chǎn)生模塊用以根據(jù)該返回地址產(chǎn)生該特征碼。該特征碼被用 以與該程序于再次執(zhí)行時(shí)以同樣步驟所產(chǎn)生的監(jiān)測碼比對,以決定該程序 是否受到攻擊。本發(fā)明的另一目的在于提供一種利用特征碼以監(jiān)測程序的裝置。該裝 置包含呼叫模塊、記錄模塊、產(chǎn)生模塊及判斷模塊。該呼叫模塊用以使該 程序通過應(yīng)用程序接口呼叫函式。該記錄模塊用以記錄該應(yīng)用程序接口呼 叫該函式后的返回地址。該產(chǎn)生模塊用以根據(jù)該返回地址產(chǎn)生監(jiān)測碼。該 判斷模塊用以判斷該監(jiān)測碼與該特征碼是否相同。該特征碼為該程序于再 次執(zhí)行時(shí)以同樣步驟所產(chǎn)生的,以及若該監(jiān)測碼與該特征碼不同,該產(chǎn)生 模塊還用以產(chǎn)生信息用以表示該程序受到攻擊。本發(fā)明的另一目的在于提供一種產(chǎn)生特征碼以監(jiān)測程序的方法。該方 法包含下列步驟使該程序通過應(yīng)用程序接口呼叫函式;記錄該應(yīng)用程序 接口呼叫該函式后的返回地址;以及根據(jù)該返回地址產(chǎn)生該特征碼。該特 征碼被用以與該程序于再次執(zhí)行時(shí)以同樣步驟所產(chǎn)生的監(jiān)測碼比對,以決 定該程序是否受到攻擊。本發(fā)明的另一目的在于提供一種利用特征碼以監(jiān)測程序的方法。該方 法包含下列步驟使該程序通過應(yīng)用程序接口呼叫函式;記錄該應(yīng)用程序 接口呼叫該函式后的返回地址;根據(jù)該返回地址產(chǎn)生監(jiān)測碼;判斷該監(jiān)測 碼與該特征碼是否相同;以及若該監(jiān)測碼與該特征碼不同,產(chǎn)生信息用以 表示該程序受到攻擊。其中,該特征碼系為該程序于再次執(zhí)行時(shí)以同樣步 驟所產(chǎn)生的。
本發(fā)明的又一 目的在于提供一種產(chǎn)生特征碼以監(jiān)測程序的方法。該方 法包含下列步驟令呼叫模塊使該程序通過應(yīng)用程序接口呼叫函式;令記 錄模塊記錄該應(yīng)用程序接口呼叫該函式后的返回地址;以及令產(chǎn)生模塊根 據(jù)該返回地址產(chǎn)生該特征碼。該特征碼被用以與該程序于再次執(zhí)行時(shí)以同 樣步驟所產(chǎn)生的監(jiān)測碼比對,以決定該程序是否受到攻擊。本發(fā)明的再一 目的在于提供一種利用特征碼以監(jiān)測程序的方法。該方 法包含下列步驟令呼叫模塊使該程序通過應(yīng)用程序接口呼叫函式;令記 錄模塊記錄該應(yīng)用程序接口呼叫該函式后的返回地址;令產(chǎn)生模塊根據(jù)該 返回地址產(chǎn)生監(jiān)測碼;令判斷模塊判斷該監(jiān)測碼與該特征碼是否相同;以 及若該監(jiān)測碼與該特征碼不同,令該產(chǎn)生模塊產(chǎn)生信息用以表示該程序受 到攻擊。該特征碼為該程序于再次執(zhí)行時(shí)以同樣步驟所產(chǎn)生的。本發(fā)明先于安全可信賴的環(huán)境執(zhí)行程序,并通過應(yīng)用程序接口呼叫程 序所欲呼叫的函式,再根據(jù)應(yīng)用程序接口的返回地址產(chǎn)生特征碼。之后, 程序于再次執(zhí)行時(shí),便可利用特征碼進(jìn)行監(jiān)測。通過上述的設(shè)置及步驟, 本發(fā)明可達(dá)到動(dòng)態(tài)監(jiān)測應(yīng)用程序接口,因此適用于所有的執(zhí)行文件,包括 動(dòng)態(tài)加載的外掛程序等。因此,本發(fā)明所提供的技術(shù)較先前技術(shù)更為完善。 此外,本發(fā)明所需監(jiān)測的應(yīng)用程序接口的數(shù)目更少,因此可減少系統(tǒng)的負(fù) 擔(dān)。本發(fā)明有效提供一種能處理編碼過后的執(zhí)行文件及外掛程序的應(yīng)用 程序接口監(jiān)測技術(shù),亦即動(dòng)態(tài)的監(jiān)測技術(shù),且同時(shí)不會(huì)耗費(fèi)過多的資源, 因此極具備增進(jìn)功效的技術(shù)效益及商業(yè)上實(shí)際運(yùn)用的價(jià)值。為讓本發(fā)明的上述目的、技術(shù)特征、和優(yōu)點(diǎn)能更明顯易懂,下文以較 佳實(shí)施例配合附圖進(jìn)行詳細(xì)說明。在參照附圖隨后描述的實(shí)施方式后,本 發(fā)明所屬技術(shù)領(lǐng)域的技術(shù)人員當(dāng)可輕易了解本發(fā)明的基本精神及其它發(fā) 明目的,以及本發(fā)明所采用的技術(shù)手段與較佳實(shí)施方式。
圖1A是描述程序呼叫目標(biāo)應(yīng)用程序接口的已有技術(shù)示意圖IB是描述本發(fā)明的實(shí)施概念示意圖; 圖2是描述本發(fā)明的第一實(shí)施例; 圖3是描述程序的執(zhí)行過程示意圖; 圖4是描述第一實(shí)施例的有限狀態(tài)機(jī);以及圖5是描述第二實(shí)施例的方法流程圖。主要元件標(biāo)記說明111:來源函式112:目標(biāo)應(yīng)用程序接口113:呼叫方向114:呼叫方向121:來源函式122:目標(biāo)應(yīng)用程序接口123:呼叫方向124:呼叫方向125:呼叫方向126:呼叫方向127:繞道函式2:裝置21:呼叫模塊221:有限狀態(tài)機(jī)22:記錄模塊23:產(chǎn)生模塊231:移位模塊232:運(yùn)算模塊24:儲(chǔ)存模塊25:判斷模塊26:儲(chǔ)存單元27:信息S :狀態(tài)s1:狀態(tài)40:移動(dòng)方向400:移動(dòng)方向401:移動(dòng)方向410:移動(dòng)方向 411:移動(dòng)方向具體實(shí)施方式
本發(fā)明分成記錄階段及監(jiān)測階段兩部分。記錄階段先于安全可信賴的 環(huán)境執(zhí)行程序,并利用應(yīng)用程序接口偵測技術(shù)監(jiān)測程序的各種行為并記錄 應(yīng)用程序接口的返回地址,再根據(jù)返回地址產(chǎn)生一特征碼。程序于再次執(zhí) 行時(shí),則進(jìn)入監(jiān)測階段,此時(shí)亦利用應(yīng)用程序接口偵測技術(shù)觀察程序的實(shí) 際行為,亦記錄應(yīng)用程序接口的返回地址,再根據(jù)返回地址求得監(jiān)測碼。 最后,比較監(jiān)測碼與特征碼,若兩者不同,即得知程序受到外界攻擊。請參照圖1B,其為描述本發(fā)明的實(shí)施概念。圖中箭頭123、 124、 125、 126指示程序執(zhí)行時(shí),控制權(quán)移轉(zhuǎn)的順序。當(dāng)程序121欲呼叫一函式(圖中 未示出)時(shí),會(huì)通過目標(biāo)應(yīng)用程序接口 122。此時(shí),本發(fā)明會(huì)先呼叫繞道 函式127如箭頭123所示,再通過繞道函式127呼叫目標(biāo)應(yīng)用程序接口 122 如箭頭124所示。當(dāng)執(zhí)行完目標(biāo)應(yīng)用程序接口 122后,會(huì)通過繞道函式 127返回程序121,亦即目標(biāo)應(yīng)用程序接口 122先返回繞道函式127如箭 頭125所示,再返回程序121如箭頭126所示。本發(fā)明在繞道函式127中 使用記錄與監(jiān)測的技術(shù),并使程序121與目標(biāo)應(yīng)用程序接口 122的呼叫與 返回皆需通過繞道函式127。通過這樣的設(shè)計(jì),可使繞道函式127監(jiān)測來 源函式121呼叫目標(biāo)應(yīng)用程序接口 122時(shí)的行為,以判斷程序是否受到外 界攻擊。圖2描述了本發(fā)明的第一實(shí)施例,其為產(chǎn)生及利用特征碼以監(jiān)測程序 的裝置2。此裝置2包含呼叫模塊21、記錄模塊22、產(chǎn)生模塊23、儲(chǔ)存 模塊24、判斷模塊25及儲(chǔ)存單元26。記錄模塊22包含有限狀態(tài)機(jī)221。 產(chǎn)生模塊23包含移位模塊231及運(yùn)算模塊232。此裝置2適用于微軟窗口 操作系統(tǒng)。裝置2分為兩個(gè)階段運(yùn)行,即記錄階段與監(jiān)測階段,分別為產(chǎn)生特征碼及利用特征碼的階段。此二個(gè)階段皆發(fā)生于當(dāng)程序欲呼叫函式時(shí)。由于 裝置2應(yīng)用于微軟窗口系統(tǒng),因此,程序呼叫此函式時(shí),會(huì)先通過第一應(yīng)用程序接口 (即LoadLibraryA())取得儲(chǔ)存此函式的數(shù)據(jù)庫的地址,再通過
第二應(yīng)用程序接口 (即GetProcAddress())取得此函式的地址。程序于第二 應(yīng)用程序接口取得函式的地址后,即可執(zhí)行此函式。本實(shí)施例欲監(jiān)測的, 即為第一應(yīng)用程序接口及第二應(yīng)用程序接口。換言之,第一應(yīng)用程序接口 及第二應(yīng)用程序接口即為第1B圖中的目標(biāo)應(yīng)用程序接口 122。首先描述裝置2的記錄階段。請同時(shí)參照圖3,其為描述程序311的 執(zhí)行過程示意圖。此時(shí),程序311是在安全可信任的環(huán)境下執(zhí)行。當(dāng)程序 311欲呼叫此函式(圖中未示出)時(shí),會(huì)利用呼叫模塊21通過第一應(yīng)用程序 接口及第二應(yīng)用程序接口去呼叫。由于此裝置應(yīng)用于微軟窗口系統(tǒng),因此 第一應(yīng)用程序接口及第二應(yīng)用程序接口皆儲(chǔ)存于Win32DLL 312中。具體而言,呼叫模塊21利用程序311中的CALL [IAT_LoadLibraryA—ENTRY]以呼叫第一應(yīng)用程序接口 (即 LoadLibraryA()),使程序311執(zhí)行的控制權(quán)轉(zhuǎn)移至Win32DLL 312中的第 一應(yīng)用程序接口(即LoadLibraryA()),如箭頭321所示。此時(shí),若以公知技術(shù)進(jìn)行,當(dāng)控制權(quán)轉(zhuǎn)移至第一應(yīng)用程序接口時(shí),會(huì)直接執(zhí)行其功能主體 〈Function Body〉,再執(zhí)行RET將控制權(quán)轉(zhuǎn)移回程序311。而本實(shí)施例中, 呼叫模塊21則利用第一應(yīng)用程序接口的JMPLoadLibraryA—STUB,轉(zhuǎn)移控 制權(quán)置繞道函式313的LoadLibraryA—Wrapper處,如箭頭322所示。當(dāng)控制權(quán)轉(zhuǎn)移至繞道函式313后,記錄模塊22便會(huì)記錄第一應(yīng)用程 序接口呼叫此函式后的第一返回地址。記錄模塊22的詳細(xì)記錄方式將于 稍后說明。接著,呼叫模塊21再利用繞道函式313的Call LoadLibraryAJYampoline將控制權(quán)轉(zhuǎn)移至應(yīng)用程序接口調(diào)整函式(API Trampoline)314,如箭頭323所示。此控制權(quán)轉(zhuǎn)換的目的,在于使應(yīng)用程 序接口調(diào)整函式314計(jì)算出Win32DLL 312的第一應(yīng)用程序接口接下來要 執(zhí)行的程序代碼的地址。呼叫模塊21接著利用應(yīng)用程序接口調(diào)整函式314 的JMP LoadLibraryA + Offset,將控制權(quán)轉(zhuǎn)移回Win32DLL 312中的第一 應(yīng)用程序接口,如箭頭324所示。此時(shí),第一應(yīng)用程序接口的功能主體 〈Function Body〉被接著執(zhí)行。當(dāng)?shù)谝粦?yīng)用程序接口執(zhí)行結(jié)束后,呼叫模塊21通過第一應(yīng)用程序接
口的RET,將控制權(quán)再轉(zhuǎn)移至繞道函式313,如箭頭325所示。最后,呼 叫模塊21再通過繞道函式313的RET返回程序311,如箭頭326所示。此 時(shí),即結(jié)束第一應(yīng)用程序接口的呼叫。通過上述的流程可知,第一實(shí)施例欲執(zhí)行第一應(yīng)用程序接口的功能主 體時(shí),呼叫模塊21會(huì)先將控制權(quán)轉(zhuǎn)移至繞道函式313,使記錄模塊22得 以記錄第一應(yīng)用程序接口呼叫函式的第一返回地址。待記錄模塊22記錄 完后,呼叫模塊21再繼續(xù)轉(zhuǎn)移控制權(quán)以使第一應(yīng)用程序接口的功能主體 得以執(zhí)行,并再通過繞道函式313返回程序311。換言之,通過呼叫模塊 21于程序執(zhí)行的不同時(shí)刻轉(zhuǎn)移控制權(quán),可在程序311與第一應(yīng)用程序接口 間建立繞道函式313。在此要指出的是,圖1B的程序121即為第3圖的程 序311,圖1B的繞道函式127即為第3圖的繞道函式,而圖1B的目標(biāo)API 122即為圖3的Win32DLL 312。當(dāng)控制權(quán)返回程序311后,尚需通過第二應(yīng)用程序接口 (即 GetProcAddress())以取得所欲呼叫的函式的地址。此時(shí),呼叫模塊21及 記錄模塊22進(jìn)行與前述類似的動(dòng)作。亦即,呼叫模塊21通過與箭頭321、 322、 323、 324、 325、 326相同順序的移動(dòng)方向,于程序執(zhí)行的不同時(shí)刻, 轉(zhuǎn)移控制權(quán)至程序311、 Win32DLL 312、繞道函式313及應(yīng)用程序接口調(diào) 整函式314中與第二應(yīng)用程序接口 (即GetProcAddress())相對應(yīng)之處。而 記錄模塊22則在當(dāng)呼叫模塊21將控制權(quán)轉(zhuǎn)移至繞道函式313時(shí),記錄第 二應(yīng)用程序接口的第二返回地址。待控制權(quán)最后返回程序311時(shí),即結(jié)束 第二應(yīng)用程序接口的呼叫。此時(shí),程序311已知函式的地址,即可執(zhí)行此 函式。接著詳述記錄模塊22的具體運(yùn)行。請參照圖4,其為描述第一實(shí)施例 的記錄模塊22所含的有限狀態(tài)機(jī)221的具體運(yùn)行。有限狀態(tài)機(jī)221具有 兩個(gè)狀態(tài)S。及S,,其中狀態(tài)S。代表剛?cè)〉玫谝粦?yīng)用程序接口的第一返回地 址,而狀態(tài)S,代表剛?cè)〉玫诙?yīng)用程序接口的第二返回地址。有限狀態(tài)機(jī) 221初始執(zhí)行時(shí),必為呼叫模塊21呼叫第一應(yīng)用程序接口的情形,因此進(jìn) 入狀態(tài)S。,如箭頭40所示。接著,若呼叫模塊21呼叫第二應(yīng)用程序接口, 則進(jìn)入狀態(tài)S,,如箭頭401所示。當(dāng)進(jìn)入狀態(tài)S,后,有限狀態(tài)機(jī)211會(huì)儲(chǔ)
存第一應(yīng)用程序接口的第一返回地址及第二應(yīng)用程序接口的第二返回地 址。于某些情況,程序311呼叫不只一個(gè)函式。此時(shí),呼叫模塊21會(huì)多 次呼叫第一應(yīng)用程序接口與第二應(yīng)用程序接口,使得有限狀態(tài)機(jī)221在狀 態(tài)S。及狀態(tài)SJ司轉(zhuǎn)換。詳言之,當(dāng)有限狀態(tài)機(jī)221處于狀態(tài)S(,時(shí),若接 著呼叫模塊21依然呼叫第一應(yīng)用程序接口,則有限狀態(tài)機(jī)21繼續(xù)進(jìn)入狀 態(tài)Su,如箭頭400所示。當(dāng)有限狀態(tài)機(jī)221處于狀態(tài)S'時(shí),若接著呼叫模 塊21呼叫第一應(yīng)用程序接口,則有限狀態(tài)機(jī)21進(jìn)入狀態(tài)S。,如箭頭410 所示。當(dāng)有限狀態(tài)機(jī)221處于狀態(tài)SJ寸,若接著呼叫模塊21依然呼叫第 二應(yīng)用程序接口,則有限狀態(tài)機(jī)21繼續(xù)進(jìn)入狀態(tài)S"如箭頭411所示。接著,產(chǎn)生模塊23再根據(jù)第一返回地址及第二返回地址產(chǎn)生特征碼。 具體而言,移位模塊231將該第二返回地址的多個(gè)位元移位7個(gè)位元。接 著,運(yùn)算模塊232將移位的結(jié)果與第一返回地址進(jìn)行互斥(XOR)邏輯運(yùn)算 以得特征碼。再此要強(qiáng)調(diào)的是,移位模塊移動(dòng)第二返回地址的位元數(shù),可 視情況調(diào)整,并非用來限制本發(fā)明的范圍。此外,于其它實(shí)施例中,移位 模塊231亦可選擇移動(dòng)第一返回地址的位元。最后,儲(chǔ)存模塊24儲(chǔ)存該 特征碼于儲(chǔ)存單元26中。接著說明第一實(shí)施例的監(jiān)測階段。在產(chǎn)生特征碼之后,程序311可能 在其它環(huán)境執(zhí)行,此時(shí)則利用特征碼以監(jiān)測程序311是否受到攻擊。監(jiān)測 階段與記錄階段類似,亦即,當(dāng)程序311執(zhí)行時(shí),呼叫模塊21、記錄模塊 22及產(chǎn)生模塊23亦進(jìn)行記錄階段所執(zhí)行的動(dòng)作。然而,產(chǎn)生模塊23此時(shí) 對第一返回地址及第二返回地址的運(yùn)算結(jié)果稱之為監(jiān)測碼。接著,判斷模 塊25判斷監(jiān)測碼與儲(chǔ)存單元26中的特征碼是否相同。若兩者不同,產(chǎn)生 模塊23則產(chǎn)生信息27用以表示程序311受到攻擊。在此要強(qiáng)調(diào)的是,第一實(shí)施例的裝置2,亦可用以監(jiān)測其它的應(yīng)用程 序接口,并不限定于上述的第一應(yīng)用程序接口(即LoadLibraryA())與第二 應(yīng)用程序接口 (即GetProcAddress())。此外,本發(fā)明亦可只監(jiān)測一個(gè)應(yīng)用 程序接口,僅需將產(chǎn)生模塊23做些修改,例如,直接記錄應(yīng)用程序接口 的返回地址,或是將返回地址位移。再者,本發(fā)明亦可應(yīng)用于其它操作系 統(tǒng),并不限制于微軟窗口系統(tǒng)中。通過上述的設(shè)置及步驟,本發(fā)明可達(dá)到動(dòng)態(tài)監(jiān)測應(yīng)用程序接口,因此 適用于所有的執(zhí)行文件,包括動(dòng)態(tài)加載的外掛程序等。因此,較先前技術(shù) 更為完善,且不會(huì)造成系統(tǒng)太大的負(fù)擔(dān)。圖5描述本發(fā)明的第二實(shí)施例,其為一種產(chǎn)生及利用特征碼以監(jiān)測程 序的方法流程圖。第二實(shí)施例適用于當(dāng)程序欲通過應(yīng)用程序接口呼叫函式 之時(shí)。首先,第二實(shí)施例執(zhí)行步驟501,使程序通過第一應(yīng)用程序接口呼叫 函式。接著,執(zhí)行步驟502,記錄該第一應(yīng)用程序接口呼叫該函式后的第 一返回地址。第二實(shí)施例接著執(zhí)行步驟503,使該程序還通過第二應(yīng)用程 序接口呼叫此函式。于歩驟504中,第二實(shí)施例記錄第二應(yīng)用程序接口呼 叫該函式后的第二返回地址。接著,執(zhí)行步驟505,將該第二返回地址的多個(gè)位元移位預(yù)定長度。 于步驟506中,第二實(shí)施例將移位的結(jié)果與該第一返回地址進(jìn)行互斥邏輯 運(yùn)算以得結(jié)果碼。接著執(zhí)行步驟507,判斷此程序是否處于監(jiān)測階段。若 否,則認(rèn)定此程序處于記錄階段,且認(rèn)定步驟506所得的結(jié)果碼為特征碼, 并執(zhí)行步驟508以儲(chǔ)存該特征碼。若步驟507的結(jié)果為是,則認(rèn)定此程序 先前已產(chǎn)生過特征碼,并認(rèn)定步驟506所得的結(jié)果碼為監(jiān)測碼。接著,執(zhí) 行步驟509,判斷該監(jiān)測碼與該特征碼是否相同。若結(jié)果為是,即該監(jiān)測 碼與該特征碼相同,則執(zhí)行步驟510以繼續(xù)執(zhí)行程序。若步驟509的結(jié)果 為否,即該監(jiān)測碼與該特征碼不同,則執(zhí)行步驟511以產(chǎn)生信息用以表示 該程序受到攻擊。除了圖5顯示的步驟以外,第二實(shí)施例亦能執(zhí)行第一實(shí)施例的所有操 作及功能。所屬技術(shù)領(lǐng)域的技術(shù)人員可直接了解第二實(shí)施例如何基于上述 第一實(shí)施例以執(zhí)行此等操作及功能。故不贅述。本發(fā)明的第三實(shí)施例為另一產(chǎn)生及利用特征碼以監(jiān)測程序的方法,此 方法應(yīng)用于第一實(shí)施例的裝置2,并執(zhí)行如圖5所描述的步驟。
首先,第三實(shí)施例執(zhí)行步驟501,令呼叫模塊21使程序通過第一應(yīng)用程序接口呼叫函式。接著,執(zhí)行步驟502,令記錄模塊22記錄該第一應(yīng)用 程序接口呼叫該函式后的第一返回地址。第二實(shí)施例接著執(zhí)行步驟503, 令呼叫模塊21使該程序還通過第二應(yīng)用程序接口呼叫此函式。于步驟504 中,第二實(shí)施例令記錄模塊22記錄第二應(yīng)用程序接口呼叫該函式后的第 二返回地址。接著,執(zhí)行步驟505,令移位模塊231將該第二返回地址的多個(gè)位元 移位預(yù)定長度。于步驟506中,第二實(shí)施例令運(yùn)算模塊232將移位的結(jié)果 與該第一返回地址進(jìn)行互斥邏輯運(yùn)算以得結(jié)果碼。接著執(zhí)行步驟507,令 判斷模塊25判斷此程序是否處于監(jiān)測階段。若否,則認(rèn)定此程序處于記 錄階段,且認(rèn)定步驟506所得的結(jié)果碼為特征碼,并執(zhí)行步驟508以令儲(chǔ) 存模塊24儲(chǔ)存特征碼于儲(chǔ)存單元26。若步驟507的結(jié)果為是,則認(rèn)定此 程序先前已產(chǎn)生過特征碼,并認(rèn)定步驟506所得的結(jié)果碼為監(jiān)測碼。接著, 執(zhí)行步驟509,令判斷模塊25判斷該監(jiān)測碼與該特征碼是否相同。若結(jié)果 為是,即該監(jiān)測碼與該特征碼相同,則執(zhí)行步驟510以繼續(xù)執(zhí)行程序。若 步驟510的結(jié)果為否,即該監(jiān)測碼與該特征碼不同,則執(zhí)行步驟511以令 產(chǎn)生模塊23產(chǎn)生信息用以表示該程序受到攻擊。除了前述的步驟外,第三實(shí)施例亦能執(zhí)行第一實(shí)施例的所有操作及功 能。所屬技術(shù)領(lǐng)域的技術(shù)人員可直接了解第三實(shí)施例如何基于上述第一實(shí) 施例以執(zhí)行此等操作及功能。故不贅述。通過上述的設(shè)置及步驟,本發(fā)明先于安全可信賴的環(huán)境執(zhí)行程序,并 通過應(yīng)用程序接口呼叫程序所欲呼叫的函式,再根據(jù)應(yīng)用程序接口的返回 地址產(chǎn)生特征碼。之后,程序于再次執(zhí)行時(shí),便可利用特征碼進(jìn)行監(jiān)測。 因此,本發(fā)明可達(dá)到動(dòng)態(tài)監(jiān)測應(yīng)用程序接口,較先前技術(shù)更為完善。此外, 本發(fā)明所需監(jiān)測的應(yīng)用程序接口的數(shù)目較少,不會(huì)造成系統(tǒng)太大的負(fù)擔(dān)。本發(fā)明亦可利用一種計(jì)算機(jī)可讀取媒體,其儲(chǔ)存計(jì)算機(jī)程序以執(zhí)行前 述的步驟。此計(jì)算機(jī)可讀取媒體可以是軟盤、硬盤、光盤、隨身碟、磁帶、 可由網(wǎng)絡(luò)存取的數(shù)據(jù)庫或所屬技術(shù)領(lǐng)域的技術(shù)人員可輕易思及具有相同
功能的儲(chǔ)存媒體。上述的實(shí)施例僅用來例舉本發(fā)明的實(shí)施例,以及闡釋本發(fā)明的技術(shù)特 征,并非用來限制本發(fā)明的范疇。任何所屬技術(shù)領(lǐng)域的技術(shù)人員可輕易完 成的改變或均等性的安排均屬于本發(fā)明所主張的范圍,因此本發(fā)明的保護(hù) 范圍應(yīng)以權(quán)利要求為準(zhǔn)。
權(quán)利要求
1. 一種產(chǎn)生特征碼以監(jiān)測程序的裝置,其特征在于包含呼叫模塊,用以使該程序通過第一應(yīng)用程序接口呼叫函式;記錄模塊,用以記錄該第一應(yīng)用程序接口呼叫該函式后的第一返回地址;以及產(chǎn)生模塊,用以根據(jù)該第一返回地址產(chǎn)生該特征碼;其中,該特征碼被用以與該程序于再次執(zhí)行時(shí)以同樣步驟所產(chǎn)生的監(jiān)測碼比對,以決定該程序是否受到攻擊。
2. 根據(jù)權(quán)利要求1所述的裝置,其特征在于該呼叫模塊還用以使該程 序還通過第二應(yīng)用程序接口呼叫該函式,該記錄模塊還用以記錄該第二應(yīng) 用程序接口呼叫該函式后的第二返回地址;以及該產(chǎn)生模塊還用以根據(jù)該第二返回地址產(chǎn)生該特征碼。
3. 根據(jù)權(quán)利要求2所述的裝置,其特征在于該產(chǎn)生模塊包含運(yùn)算模塊,用以對該第一返回地址及該第二返回地址進(jìn)行邏輯運(yùn)算以 得該特征碼。
4. 根據(jù)權(quán)利要求2所述的裝置,其特征在于該產(chǎn)生模塊包含移位模塊,用以將該第二返回地址的多個(gè)位元移位預(yù)定長度;以及運(yùn)算模塊,用以將移位的結(jié)果與該第一返回地址進(jìn)行互斥邏輯運(yùn)算以 得該特征碼。
5. 根據(jù)權(quán)利要求2所述的裝置,其特征在于該記錄模塊包含有限狀態(tài)機(jī),用以記錄該第一返回地址及記錄該第二返回地址。
6. 根據(jù)權(quán)利要求2所述的裝置,其特征在于還包含儲(chǔ)存模塊,用以儲(chǔ)存該特征碼。
7. 根據(jù)權(quán)利要求2所述的裝置,其特征在于該呼叫模塊使該程序通過 該第一應(yīng)用程序接口直接呼叫該函式,且使該程序通過該第二應(yīng)用程序接 口呼叫儲(chǔ)存該函式的數(shù)據(jù)庫。
8. 根據(jù)權(quán)利要求2所述的裝置,其特征在于該裝置使用于微軟窗口操作系統(tǒng),該第一應(yīng)用程序接口為LoadLibraryA(),且該第二應(yīng)用程序接口 為GetProcAddress ()。
9. 一種利用特征碼以監(jiān)測程序的裝置,其特征在于包含呼叫模塊,用以使該程序通過第一應(yīng)用程序接口呼叫函式; 記錄模塊,用以記錄該第一應(yīng)用程序接口呼叫該函式后的第一返回地址;產(chǎn)生模塊,用以根據(jù)該第一返回地址產(chǎn)生監(jiān)測碼;以及判斷模塊,用以判斷該監(jiān)測碼與該特征碼是否相同;其中,該特征碼為該程序于再次執(zhí)行時(shí)以同樣步驟所產(chǎn)生的,以及若 該監(jiān)測碼與該特征碼不同,該產(chǎn)生模塊還用以產(chǎn)生信息用以表示該程序受 到攻擊。
10. 根據(jù)權(quán)利要求9所述的裝置,其特征在于該呼叫模塊還用以使 該程序還通過第二應(yīng)用程序接口呼叫該函式,該記錄模塊還用以記錄該第 二應(yīng)用程序接口呼叫該函式后的第二返回地址;以及該產(chǎn)生模塊還用以根 據(jù)該第二返回地址產(chǎn)生該監(jiān)測碼。
11. 根據(jù)權(quán)利要求10所述的裝置,其特征在于該產(chǎn)生模塊對該第一 返回地址及該第二返回地址進(jìn)行邏輯運(yùn)算以得該監(jiān)測碼。
12. 根據(jù)權(quán)利要求10所述的裝置,其特征在于該產(chǎn)生模塊包含移位模塊,用以將該第二返回地址的多個(gè)位元移位預(yù)定長度;以及運(yùn)算模塊,用以將移位的結(jié)果與該第一返回地址進(jìn)行互斥邏輯運(yùn)算以 得該監(jiān)測碼。
13. 根據(jù)權(quán)利要求10所述的裝置,其特征在于該記錄模塊包含 有限狀態(tài)機(jī),用以記錄該第一返回地址及記錄該第二返回地址。
14. 根據(jù)權(quán)利要求10所述的裝置,其特征在于該呼叫模塊使該程序通過該第一應(yīng)用程序接口直接呼叫該函式,且使該程序通過該第二應(yīng)用程序接口呼叫儲(chǔ)存該函式的數(shù)據(jù)庫。
15. 根據(jù)權(quán)利要求10所述的裝置,其特征在于該裝置系使用于微軟窗口操作系統(tǒng),該第一應(yīng)用程序接口為LoadLibraryA(),且該第二應(yīng)用程 序接口為GetProcAddress()。
16. —種產(chǎn)生特征碼以監(jiān)測程序的方法,其特征在于包含下列步驟 使該程序通過第一應(yīng)用程序接口呼叫函式; 記錄該第一應(yīng)用程序接口呼叫該函式后的第一返回地址;以及 根據(jù)該第一返回地址產(chǎn)生該特征碼;其中,該特征碼被用以與該程序于再次執(zhí)行時(shí)以同樣步驟所產(chǎn)生的監(jiān) 測碼比對,以決定該程序是否受到攻擊。
17. 根據(jù)權(quán)利要求16所述的方法,其特征在于還包含下列步驟使該程序還通過第二應(yīng)用程序接口呼叫該函式;以及 記錄該第二應(yīng)用程序接口呼叫該函式后的第二返回地址;其中,該產(chǎn)生步驟還根據(jù)該第二返回地址產(chǎn)生該特征碼。
18. 根據(jù)權(quán)利要求17所述的方法,其特征在于該產(chǎn)生步驟系對該第 一返回地址及該第二返回地址進(jìn)行邏輯運(yùn)算以得該特征碼。
19. 根據(jù)權(quán)利要求17所述的方法,其特征在于該產(chǎn)生步驟包含下列 步驟將該第二返回地址的多個(gè)位元移位預(yù)定長度;以及 將移位的結(jié)果與該第一返回地址進(jìn)行互斥邏輯運(yùn)算以得該特征碼。
20. 根據(jù)權(quán)利要求17所述的方法,其特征在于記錄該第一返回地址 及記錄該第二返回地址的步驟系通過有限狀態(tài)機(jī)執(zhí)行。
21. 根據(jù)權(quán)利要求17所述的方法,還包含儲(chǔ)存該特征碼的步驟。
22. 根據(jù)權(quán)利要求17所述的方法,其特征在于該第一應(yīng)用程序接口 直接呼叫該函式,而該第二應(yīng)用程序接口系呼叫儲(chǔ)存該函式的數(shù)據(jù)庫。
23. 根據(jù)權(quán)利要求17所述的方法,其特征在于該方法使用于微軟窗口操作系統(tǒng),該第一應(yīng)用程序接口為LoadLibraryA(),且該第二應(yīng)用程序 接口為GetProcAddress()。
24. —種利用特征碼以監(jiān)測程序的方法,其特征在于包含下列步驟 使該程序通過第一應(yīng)用程序接口呼叫函式; 記錄該第一應(yīng)用程序接口呼叫該函式后的第一返回地址; 根據(jù)該第一返回地址產(chǎn)生監(jiān)測碼; 判斷該監(jiān)測碼與該特征碼是否相同;以及若該監(jiān)測碼與該特征碼不同,產(chǎn)生信息用以表示該程序受到攻擊; 其中,該特征碼為該程序于再次執(zhí)行時(shí)以同樣步驟所產(chǎn)生的。
25. 根據(jù)權(quán)利要求24所述的方法,其特征在于還包含下列步驟使該程序還通過第二應(yīng)用程序接口呼叫該函式;以及 記錄該第二應(yīng)用程序接口呼叫該函式后的第二返回地址; 其中,該產(chǎn)生步驟還根據(jù)該第二返回地址產(chǎn)生該監(jiān)測碼。
26. 根據(jù)權(quán)利要求25所述的方法,其特征在于該產(chǎn)生步驟對該第一返回地址及該第二返回地址進(jìn)行邏輯運(yùn)算以得該監(jiān)測碼。
27. 根據(jù)權(quán)利要求25所述的方法,其特征在于該產(chǎn)生步驟包含下列步驟將該第二返回地址的多個(gè)位元移位預(yù)定長度;以及 將移位的結(jié)果與該第一返回地址進(jìn)行互斥邏輯運(yùn)算以得該監(jiān)測碼。
28. 根據(jù)權(quán)利要求25所述的方法,其特征在于記錄該第一返回地址 及記錄該第二返回地址的步驟系通過有限狀態(tài)機(jī)執(zhí)行。
29. 根據(jù)權(quán)利要求25所述的方法,其特征在于該第一應(yīng)用程序接口 直接呼叫該函式,且該第二應(yīng)用程序接口呼叫儲(chǔ)存該函式的數(shù)據(jù)庫。
30. 根據(jù)權(quán)利要求25所述的方法,其特征在于該方法使用于微軟窗 口操作系統(tǒng),該第一應(yīng)用程序接口為LoadLibraryA(),且該第二應(yīng)用程序 接口為GetProcAddress()。
全文摘要
一種產(chǎn)生及利用特征碼以監(jiān)測程序的裝置及方法。本發(fā)明先于安全可信賴的環(huán)境執(zhí)行該程序,并通過應(yīng)用程序接口呼叫該程序所欲呼叫的函式,再根據(jù)該應(yīng)用程序接口的返回地址產(chǎn)生該特征碼。之后,當(dāng)該程序再次執(zhí)行時(shí),便可利用該特征碼進(jìn)行監(jiān)測。通過上述的設(shè)置及步驟,本發(fā)明可達(dá)到動(dòng)態(tài)監(jiān)測該應(yīng)用程序的接口,因此適用于所有的執(zhí)行文件,包括動(dòng)態(tài)加載的外掛程序等。因此,本發(fā)明所提供的技術(shù)與已有技術(shù)相比更為完善。此外,本發(fā)明所需監(jiān)測的應(yīng)用程序接口的數(shù)目更少,因此可減少系統(tǒng)的負(fù)擔(dān)。
文檔編號G06F21/00GK101211388SQ20061016732
公開日2008年7月2日 申請日期2006年12月27日 優(yōu)先權(quán)日2006年12月27日
發(fā)明者孫宏民, 張仕穎, 林港喬, 陳帥名, 陳政愷 申請人:財(cái)團(tuán)法人資訊工業(yè)策進(jìn)會(huì)