用于保護(hù)動(dòng)態(tài)庫的方法和裝置的制造方法
【技術(shù)領(lǐng)域】
[0001 ]本發(fā)明涉及一種保護(hù)動(dòng)態(tài)庫不被分析工具分析和攻擊的方法。
【背景技術(shù)】
[0002]需要指出的是,下面說明的內(nèi)容僅提供與本發(fā)明的各實(shí)施例有關(guān)的背景信息,且不構(gòu)成現(xiàn)有技術(shù)。
[0003]在程序中,庫表示預(yù)先編制的可反復(fù)使用的編譯函數(shù)。在程序中使用庫的原因在于,函數(shù)當(dāng)被反復(fù)使用時(shí)可被方便地使用,當(dāng)函數(shù)以庫的形式被分發(fā)時(shí)可以隱藏函數(shù)的具體實(shí)現(xiàn),并且可以根據(jù)需要使用預(yù)編譯函數(shù),從而便于對(duì)其進(jìn)行維護(hù)。
[0004]庫被分類為靜態(tài)庫和動(dòng)態(tài)庫,靜態(tài)庫在程序編譯過程中被包含在應(yīng)用程序的目標(biāo)文件中,而動(dòng)態(tài)庫在計(jì)算機(jī)程序執(zhí)行過程時(shí)被包含在目標(biāo)文件中。在編譯過程中將靜態(tài)庫與應(yīng)用程序的對(duì)象結(jié)合,以形成一個(gè)執(zhí)行文件。相反地,動(dòng)態(tài)庫將各種程序共同所需的函數(shù)從應(yīng)用程序中分離,并且僅當(dāng)在運(yùn)行期間被調(diào)用時(shí)將該函數(shù)加載至存儲(chǔ)器。由于在編譯過程中將靜態(tài)庫與應(yīng)用程序的對(duì)象結(jié)合,因此執(zhí)行文件的大小由于用程序包含大量的靜態(tài)庫而增加。當(dāng)同時(shí)執(zhí)行多個(gè)使用相同靜態(tài)庫的應(yīng)用程序時(shí),各自相同的代碼會(huì)被加載至存儲(chǔ)器中,且因此難以高效地利用存儲(chǔ)器。然而,當(dāng)使用動(dòng)態(tài)庫時(shí),由于多個(gè)應(yīng)用程序共享并使用一個(gè)動(dòng)態(tài)庫,因此能夠高效地利用存儲(chǔ)器。
[0005]因其執(zhí)行程序的核心功能而需要受到保護(hù)的程序代碼被多個(gè)程序共用,并且在多數(shù)情況下將其編制成動(dòng)態(tài)庫。在這種情況下,對(duì)動(dòng)態(tài)庫的安全保護(hù)是必要的,并且這成為如何安全地執(zhí)行動(dòng)態(tài)庫而不將應(yīng)用程序的內(nèi)部信息暴露于外部的問題。特別地,當(dāng)使用諸如調(diào)試工具(debugger)或交互式反編譯工具(IDA)等靜態(tài)分析工具時(shí),可以對(duì)動(dòng)態(tài)庫進(jìn)行分析,使得可以改變其內(nèi)容或者可以插入新函數(shù)。當(dāng)使用諸如IDA等工具時(shí),甚至可以將機(jī)器代碼分析成源代碼的水平。
[0006]在現(xiàn)有技術(shù)中,為了保護(hù)動(dòng)態(tài)庫不被靜態(tài)分析工具分析,使用如下方法:對(duì)動(dòng)態(tài)庫加密,將加密動(dòng)態(tài)庫添加至程序的資源中,在程序的資源中存儲(chǔ)加密動(dòng)態(tài)庫,在必要的時(shí)間點(diǎn)對(duì)加密動(dòng)態(tài)庫解密,將解密動(dòng)態(tài)庫存儲(chǔ)為文件的形式,在將該文件加載至存儲(chǔ)器中后使用該文件,并刪除該文件。將參照?qǐng)D2詳細(xì)說明用于保護(hù)動(dòng)態(tài)庫的現(xiàn)有技術(shù)。
[0007]然而,用于保護(hù)動(dòng)態(tài)庫的傳統(tǒng)方法能夠?qū)?dòng)態(tài)庫加密以避免動(dòng)態(tài)庫被靜態(tài)分析工具分析,但是由于動(dòng)態(tài)庫被暴露于外部,因此這容易地顯示出該動(dòng)態(tài)庫為重要文件。另外,當(dāng)解密動(dòng)態(tài)庫被泄露時(shí),由于解密過程被破壞,因此存在有如下問題:當(dāng)加載該解密動(dòng)態(tài)庫時(shí),僅通過修改相對(duì)較小代碼就可以繞過(bypass)動(dòng)態(tài)庫。因此,現(xiàn)有技術(shù)不是能夠通過保護(hù)動(dòng)態(tài)庫不被靜態(tài)分析工具分析來解決該問題的根本方式。
【發(fā)明內(nèi)容】
[0008]技術(shù)問題
[0009]本發(fā)明的各實(shí)施例旨在提供一種保護(hù)用于執(zhí)行程序的核心功能的動(dòng)態(tài)庫不被靜態(tài)分析工具分析的方法。
[0010]技術(shù)方案
[0011]根據(jù)本實(shí)施例的一個(gè)方面,在保護(hù)動(dòng)態(tài)庫的方法中,該方法可包括:將使用所述動(dòng)態(tài)庫的應(yīng)用程序加載至主存儲(chǔ)器中;將安保動(dòng)態(tài)庫加載至所述主存儲(chǔ)器中;通過對(duì)被存儲(chǔ)在所述安保動(dòng)態(tài)庫中的加密動(dòng)態(tài)庫進(jìn)行解密來生成待保護(hù)動(dòng)態(tài)庫;并且通過所述應(yīng)用程序來調(diào)用所述待保護(hù)動(dòng)態(tài)庫中包含的特定模塊。
[0012]根據(jù)本實(shí)施例的另一方面,在保護(hù)動(dòng)態(tài)庫的裝置中,該裝置可包括:輔助存儲(chǔ)裝置,其用于存儲(chǔ)應(yīng)用程序和所述動(dòng)態(tài)庫;主存儲(chǔ)器,其連接至所述輔助存儲(chǔ)裝置,其中,所述應(yīng)用程序和所述動(dòng)態(tài)庫被加載至所述主存儲(chǔ)器中;動(dòng)態(tài)庫生成單元,其用于通過對(duì)被加載至所述主存儲(chǔ)器中的安保動(dòng)態(tài)庫中存儲(chǔ)的加密動(dòng)態(tài)庫進(jìn)行解密來生成待保護(hù)動(dòng)態(tài)庫;以及動(dòng)態(tài)庫調(diào)用單元,其用于通過所述應(yīng)用程序來調(diào)用所述待保護(hù)動(dòng)態(tài)庫中包含的特定模塊。
[0013]技術(shù)效果
[0014]如上所述,根據(jù)本發(fā)明的實(shí)施例,對(duì)動(dòng)態(tài)庫進(jìn)行加密,由此安全地保護(hù)負(fù)責(zé)程序的核心功能的動(dòng)態(tài)庫不被靜態(tài)分析工具分析。根據(jù)本發(fā)明的實(shí)施例,由于將負(fù)責(zé)程序的核心功能且需要保護(hù)的待保護(hù)動(dòng)態(tài)庫存儲(chǔ)在負(fù)責(zé)安全性的安保動(dòng)態(tài)庫中,因此未將待保護(hù)動(dòng)態(tài)庫暴露于外部,從而防止程序被攻擊,并且由于以加密狀態(tài)將待保護(hù)動(dòng)態(tài)庫進(jìn)行存儲(chǔ),因此無法使用靜態(tài)分析工具來分析待保護(hù)動(dòng)態(tài)庫,由此保證了待保護(hù)動(dòng)態(tài)庫的安全性。安保動(dòng)態(tài)庫包含安全邏輯。安全邏輯包含如下函數(shù):當(dāng)將安保動(dòng)態(tài)庫加載至存儲(chǔ)器時(shí),自動(dòng)地執(zhí)行該函數(shù)以檢測攻擊者的攻擊,或者該函數(shù)預(yù)先對(duì)環(huán)境進(jìn)行配置,使得攻擊者無法進(jìn)行攻擊。
[0015]另外,根據(jù)本發(fā)明的實(shí)施例,為了增強(qiáng)待保護(hù)動(dòng)態(tài)庫和安保動(dòng)態(tài)庫之間的安全性,通過單獨(dú)編制地靜態(tài)庫將待保護(hù)動(dòng)態(tài)庫和安保動(dòng)態(tài)庫彼此連接,從而不允許在沒有安保動(dòng)態(tài)庫的情況下驅(qū)動(dòng)待保護(hù)動(dòng)態(tài)庫,由此增強(qiáng)了用于提供核心功能的待保護(hù)動(dòng)態(tài)庫的安全性。安保動(dòng)態(tài)庫包含安全邏輯,為了待保護(hù)動(dòng)態(tài)庫或應(yīng)用程序的安全性,將該安全邏輯加載存儲(chǔ)器中,并接著自動(dòng)地執(zhí)行該安全邏輯以運(yùn)行諸如反調(diào)試或反轉(zhuǎn)儲(chǔ)(ant1-dump)等用于檢測或避免攻擊者的攻擊的安全性函數(shù)。即使當(dāng)待保護(hù)動(dòng)態(tài)庫被靜態(tài)分析工具分析并因此被修改時(shí),可以通過文件的完整性驗(yàn)證來確定文件是否被修改,并且當(dāng)文件被修改時(shí),可以終止應(yīng)用程序的執(zhí)行。
【附圖說明】
[0016]圖1為示出了用于執(zhí)行包含動(dòng)態(tài)庫的程序的計(jì)算裝置的示例圖;
[0017]圖2為示出了用于保護(hù)動(dòng)態(tài)庫的方法的示例圖;
[0018]圖3A為示出了根據(jù)本實(shí)施例的將應(yīng)用程序和安保動(dòng)態(tài)庫加載至主存儲(chǔ)器中的狀態(tài)的示例圖;
[0019]圖3B為示出了根據(jù)本實(shí)施例的將應(yīng)用程序、安保動(dòng)態(tài)庫和待保護(hù)動(dòng)態(tài)庫加載至主存儲(chǔ)器中的狀態(tài)的示例圖;
[0020]圖4為示出了根據(jù)本實(shí)施例的應(yīng)用程序和動(dòng)態(tài)庫之間的連接關(guān)系的示例圖;
[0021]圖5為示出了根據(jù)本實(shí)施例的將應(yīng)用程序、安保動(dòng)態(tài)庫、待保護(hù)動(dòng)態(tài)庫、偽動(dòng)態(tài)庫和散列注冊表加載至主存儲(chǔ)器中的狀態(tài)的示例圖;
[0022]圖6為示出了根據(jù)本實(shí)施例的通過應(yīng)用程序來調(diào)用待保護(hù)動(dòng)態(tài)庫內(nèi)的特定模塊的處理的流程圖;
[0023]圖7為示出了根據(jù)本實(shí)施例的提供安全保護(hù)以保護(hù)動(dòng)態(tài)庫不被靜態(tài)分析工具分析的處理的示例圖;并且
[0024]圖8為示出了根據(jù)本實(shí)施例的用于保護(hù)動(dòng)態(tài)庫不被靜態(tài)分析工具分析的裝置的框圖。
【具體實(shí)施方式】
[0025]在下文中,將參照附圖對(duì)本發(fā)明的實(shí)施例進(jìn)行詳細(xì)地說明。
[0026]用于實(shí)施根據(jù)本實(shí)施例的保護(hù)動(dòng)態(tài)庫不被靜態(tài)分析工具分析的方法的系統(tǒng)包括諸如 Windows、MAC0S、Linux、Unix、1S、Android、Unity、其它支持動(dòng)態(tài)庫的操作系統(tǒng)(OS)以及虛擬機(jī)等平臺(tái),但是其并不局限于任何一種系統(tǒng)。這里,動(dòng)態(tài)庫可以是指諸如動(dòng)態(tài)鏈接庫、共享庫、運(yùn)行時(shí)間庫、ActiveX控件等各種名稱。
[0027]圖1為示出了用于執(zhí)行包含動(dòng)態(tài)庫的程序的計(jì)算裝置100的示例圖。
[0028]被存儲(chǔ)在輔助存儲(chǔ)裝置130中的應(yīng)用程序被加載至主存儲(chǔ)器120中,并且中央處理裝置110執(zhí)行該應(yīng)用程序。應(yīng)用程序從輸入裝置150接收用于執(zhí)行所需的數(shù)據(jù),并且將執(zhí)行的結(jié)果輸出至顯示裝置140。被加載至主存儲(chǔ)器120中的應(yīng)用程序?qū)⒂纱怂璧膭?dòng)態(tài)庫從輔助存儲(chǔ)裝置130加載至主存儲(chǔ)器120中,并接著使用所加載的動(dòng)態(tài)庫。此時(shí),在主存儲(chǔ)器120上運(yùn)行的其它應(yīng)用程序和將動(dòng)態(tài)庫加載至主存儲(chǔ)器120中的應(yīng)用程序均可以使用所加載的動(dòng)態(tài)庫。多個(gè)應(yīng)用程序使用被加載至主存儲(chǔ)器120中的一個(gè)動(dòng)態(tài)庫,以減少主存儲(chǔ)器120的物理使用率,由此實(shí)現(xiàn)高效的存儲(chǔ)器管理。當(dāng)因在動(dòng)態(tài)庫中出現(xiàn)錯(cuò)誤而需要補(bǔ)丁時(shí),僅將動(dòng)態(tài)庫改寫并分發(fā)而無需考慮使用該動(dòng)態(tài)庫的各應(yīng)用程序。當(dāng)使用靜態(tài)庫時(shí),應(yīng)當(dāng)將使用靜態(tài)庫的所有應(yīng)用程序改寫并重新分發(fā)。另外,當(dāng)需要改變動(dòng)態(tài)庫中包含的函數(shù)時(shí),在僅修改了動(dòng)態(tài)庫的情況下就可以應(yīng)用這些應(yīng)用程序而無需改變它們自身,由此降低了維護(hù)成本。
[0029]圖2為示出了用于保護(hù)動(dòng)態(tài)庫的方法的示例圖。
[0030]被存儲(chǔ)在輔助存儲(chǔ)裝置130中的應(yīng)用程序210和資源型加密動(dòng)態(tài)庫220被加載至主存儲(chǔ)器120中。由于加密動(dòng)態(tài)庫是負(fù)責(zé)應(yīng)用程序的核心功能的待保護(hù)動(dòng)態(tài)庫,因此需要受到保護(hù)。為了通過應(yīng)用程序210或通過由應(yīng)用程序使用的動(dòng)態(tài)庫來調(diào)用待保護(hù)動(dòng)態(tài)庫中包含的特定模塊,應(yīng)當(dāng)對(duì)加密動(dòng)態(tài)庫220進(jìn)行解密,動(dòng)態(tài)庫230應(yīng)當(dāng)以文件的形式被存儲(chǔ)在輔助存儲(chǔ)裝置130中,并且動(dòng)態(tài)庫230應(yīng)當(dāng)被加載至主存儲(chǔ)器120中。在將待保護(hù)動(dòng)態(tài)庫被加載至主存儲(chǔ)器120中之后,應(yīng)用程序210或動(dòng)態(tài)庫可以調(diào)用特定函數(shù)。
[0031]傳統(tǒng)方法將動(dòng)態(tài)庫與應(yīng)用程序分離,對(duì)動(dòng)態(tài)庫進(jìn)行加密,將加密動(dòng)態(tài)庫轉(zhuǎn)換為資源,存儲(chǔ)該資源,并且當(dāng)應(yīng)用程序需要?jiǎng)討B(tài)庫時(shí)對(duì)加密動(dòng)態(tài)庫進(jìn)行解密,雖然該傳