可執(zhí)行程序數(shù)據(jù)包加密/解密方法及裝置的制造方法
【專利摘要】一種可執(zhí)行程序數(shù)據(jù)包加密/解密方法及裝置,所述方法包括:獲取可執(zhí)行程序數(shù)據(jù)包;基于預(yù)設(shè)規(guī)則將所述可執(zhí)行程序數(shù)據(jù)包拆分成若干個原始文件;分別利用第一密鑰對所述若干個原始文件進(jìn)行加密得到分別與各個原始文件一一對應(yīng)的加密文件;接收所述加密后的若干個加密文件;分別利用與所述第一密鑰對應(yīng)的第二密鑰對所述若干個加密文件進(jìn)行解密,得到與所述加密文件一一對應(yīng)的所述若干個原始文件;分別利用所述原始文件的索引信息重組所述若干個原始文件,得到所述可執(zhí)行程序數(shù)據(jù)包。能夠防止因為可執(zhí)行程序數(shù)據(jù)包中的單個密鑰被竊取后而導(dǎo)致的可執(zhí)行程序數(shù)據(jù)包遭到惡意破解。減小應(yīng)用程序遭惡意破解的概率,提高應(yīng)用程序數(shù)據(jù)安全性。
【專利說明】
可執(zhí)行程序數(shù)據(jù)包加密/解密方法及裝置
技術(shù)領(lǐng)域
[0001]本發(fā)明涉及數(shù)據(jù)安全領(lǐng)域,具體涉及到一種可執(zhí)行程序數(shù)據(jù)包加密/解密方法及裝置?!颈尘凹夹g(shù)】[00〇2]隨著智能終端技術(shù)的發(fā)展,現(xiàn)有技術(shù)中,存在了多種操作系統(tǒng),例如Android系統(tǒng)為當(dāng)前應(yīng)用較為廣泛的一種智能終端操作系統(tǒng)。隨著An droid手機(jī)操作系統(tǒng)市場占有率的不斷增長,Android系統(tǒng)的應(yīng)用軟件數(shù)量也以相當(dāng)迅猛的速度增加。
[0003]由于Andr 0 i d系統(tǒng)源碼的開放的特性,使得Andr 0 i d系統(tǒng)流行的同時也為惡意應(yīng)用軟件提供了便利。譬如,在用戶完全不知情的情況下,惡意軟件有著資費(fèi)消耗、隨意扣費(fèi)、隱私竊取等不良行為,而這種行為嚴(yán)重的令用戶利益受到損害。通常采用Java編程語言來開發(fā)Android系統(tǒng)的應(yīng)用軟件,由于Java代碼經(jīng)過編譯后的二進(jìn)制代碼容易被破解和反編譯, 從而導(dǎo)致Android系統(tǒng)中的應(yīng)用程序容易被惡意破解。開發(fā)者含辛茹苦開發(fā)出的軟件面臨著非法篡改、惡意代碼植入等威脅。
[0004]現(xiàn)有技術(shù)中,只是通過簡單的數(shù)據(jù)混淆或?qū)σ徽麄€文件進(jìn)行加密,這樣的加密方式很容易被破解,不能有效的減小應(yīng)用程序遭惡意破解。
[0005]如何減小應(yīng)用程序遭惡意破解的概率,提高應(yīng)用程序數(shù)據(jù)安全性成為亟待解決的問題。
【發(fā)明內(nèi)容】
[0006]本發(fā)明要解決的問題在于如何減小應(yīng)用程序遭惡意破解的概率。[〇〇〇7]為此本發(fā)明提供了一種可執(zhí)行程序數(shù)據(jù)包加密/解密方法,包括如下步驟:
[0008]獲取可執(zhí)行程序數(shù)據(jù)包;基于預(yù)設(shè)規(guī)則將可執(zhí)行程序數(shù)據(jù)包拆分成若干個原始文件;分別利用第一密鑰對若干個原始文件中的各個原始文件進(jìn)行加密得到分別與各個原始文件-----對應(yīng)的加密文件,加密文件包括用于索引與其對應(yīng)的原始文件的索引信息;接收加密后的若干個加密文件,加密文件包括用于索引與其對應(yīng)的原始文件的索引信息;分別利用與第一密鑰對應(yīng)的第二密鑰對若干個加密文件進(jìn)行解密,得到與加密文件---對應(yīng)的若干個原始文件;分別利用原始文件的索引信息重組若干個原始文件,得到可執(zhí)行程序數(shù)據(jù)包。
[0009]優(yōu)選地,分別利用第一密鑰對若干個原始文件中的各個原始文件進(jìn)行加密得到分別與各個原始文件--對應(yīng)的加密文件之后,還包括:分別生成與若干加密文件中各個加密文件一一對應(yīng)的第一校驗碼,第一校驗碼用于表征與該第一校驗碼對應(yīng)的加密文件是否完整。在接收加密后的若干個加密文件和分別利用與第一密鑰對應(yīng)的第二密鑰對若干個加密文件進(jìn)行解密之間還包括:分別利用各個第一校驗碼判斷各自對應(yīng)的加密文件是否完整;如果若干加密文件均完整,則利用與第一密鑰對應(yīng)的第二密鑰對若干個加密文件進(jìn)行解密。
[0010]優(yōu)選地,在分別利用原始文件的索引信息重組若干個原始文件,得到可執(zhí)行程序數(shù)據(jù)包之后,還包括:調(diào)用預(yù)設(shè)函數(shù)解析得到的可執(zhí)行程序數(shù)據(jù)包;利用自定義類加載器對解析后的可執(zhí)行程序數(shù)據(jù)包進(jìn)行類加載。
[0011]優(yōu)選地,在分別利用原始文件的索引信息重組若干個原始文件,得到可執(zhí)行程序數(shù)據(jù)包之后,還包括:獲取程序安裝包文件,程序安裝包文件包括重組后的可執(zhí)行程序數(shù)據(jù)包;生成程序安裝包文件的第二校驗碼,第二校驗碼用于表征程序安裝包文件是否完整;利用第二校驗碼校驗程序安裝包文件得到程序安裝包文件是否完整的校驗結(jié)果;根據(jù)校驗結(jié)果執(zhí)行相應(yīng)的操作。
[0012]優(yōu)選地,在獲取可執(zhí)行程序數(shù)據(jù)包之后,還包括:對獲取的可執(zhí)行程序數(shù)據(jù)包中的數(shù)據(jù)進(jìn)行隨機(jī)變換得到隨機(jī)變換后的可執(zhí)行程序數(shù)據(jù)包;基于預(yù)設(shè)規(guī)則將可執(zhí)行程序數(shù)據(jù)包拆分成若干個原始文件包括:基于預(yù)設(shè)規(guī)則將隨機(jī)變換后的可執(zhí)行程序數(shù)據(jù)包拆分成若干個原始文件;在分別利用原始文件的索引信息重組若干個原始文件,得到可執(zhí)行程序數(shù)據(jù)包之后,還包括:對可執(zhí)行程序數(shù)據(jù)包中的數(shù)據(jù)進(jìn)行與隨機(jī)變換相對應(yīng)的逆運(yùn)算,得到隨機(jī)變換前的可執(zhí)行程序數(shù)據(jù)包。[0013 ]本發(fā)明還提供了一種可執(zhí)行程序數(shù)據(jù)包加密/解密裝置,包括:
[0014]第一獲取單元,用于獲取可執(zhí)行程序數(shù)據(jù)包;拆分單元,用于基于預(yù)設(shè)規(guī)則將可執(zhí)行程序數(shù)據(jù)報拆分成若干個原始文件;加密單元,用于分別利用第一密鑰對若干個原始文件中的各個原始文件進(jìn)行加密得到分別與各個原始文件對應(yīng)的加密文件;接收單元,用于接收加密后的若干個加密文件;解密單元,用于分別利用第一密鑰對應(yīng)的第二密匙對若干個加密文件進(jìn)行解密;重組單元,用于分別利用原始文件的索引信息將若干個原始文件重組。
[0015]優(yōu)選地,可執(zhí)行程序數(shù)據(jù)包加密/解密裝置,還包括:第一校驗碼生成單元,用于分別生成與若干加密文件各加密文件---對應(yīng)的第一文件校驗碼;第一校驗單元,用于分別利用第一文件完整行校驗碼校驗若干加密文件。
[0016]優(yōu)選地,可執(zhí)行程序數(shù)據(jù)包加密/解密裝置,還包括:解析單元,用于調(diào)用預(yù)設(shè)函數(shù)解析得到可執(zhí)行程序數(shù)據(jù)包;類加載單元,用于利用自定義類加載器對可執(zhí)行程序數(shù)據(jù)包進(jìn)行類加載。優(yōu)選地,可執(zhí)行程序數(shù)據(jù)包加密/解密裝置,還包括:第二獲取單元,用于獲取程序安裝包文件;第二校驗碼生成單元,用于生成程序安裝包文件的第二校驗碼;第二校驗單元,用于利用第二文件校驗碼校驗程序安裝包文件得到程序安裝包文件是否完整的校驗結(jié)果。[〇〇17]優(yōu)選地,可執(zhí)行程序數(shù)據(jù)包加密/解密裝置,還包括:數(shù)據(jù)隨機(jī)變換單元,用于對獲取的可執(zhí)行程序數(shù)據(jù)包中的數(shù)據(jù)進(jìn)行隨機(jī)變換得到隨機(jī)變換后的可執(zhí)行程序數(shù)據(jù)包;數(shù)據(jù)隨機(jī)逆變換單元,對可執(zhí)行程序數(shù)據(jù)包中的數(shù)據(jù)進(jìn)行與隨機(jī)變換相對應(yīng)的逆運(yùn)算,得到隨機(jī)變換前的可執(zhí)行程序數(shù)據(jù)包。
[0018]本發(fā)明實(shí)施例提供的可執(zhí)行程序數(shù)據(jù)包加密/解密方法及裝置,通過對可執(zhí)行程序數(shù)據(jù)包拆分成若干個原始文件,并分別對這些原始文件進(jìn)行加密,得到與這些原始文件--對應(yīng)的加密后的文件;由于將可執(zhí)行程序數(shù)據(jù)包拆分成多個原始文件并分別加密,而后分別解密各個文件,根據(jù)各個文件的索引信息可以重組得到原可執(zhí)行程序數(shù)據(jù)包,從而, 能夠防止因為可執(zhí)行程序數(shù)據(jù)包中的單個密鑰被竊取后而導(dǎo)致的可執(zhí)行程序數(shù)據(jù)包遭到惡意破解,繼而,減小應(yīng)用程序遭惡意破解的概率,提高應(yīng)用程序數(shù)據(jù)安全性。能有效的確保可執(zhí)行數(shù)據(jù)包的機(jī)密性,從而能夠減小有效的防止應(yīng)用程序被篡改和被竊取源代碼的概率,大大提高了應(yīng)用程序的破解難度。
[0019]作為優(yōu)選的技術(shù)方案,生成用于校驗程序安裝包文件是否完整的第二校驗碼,利用第二校驗碼校驗程序安裝包文件得到程序安裝包是否完整的校驗結(jié)果,并根據(jù)校驗結(jié)果做出相應(yīng)的操作。這樣能準(zhǔn)確發(fā)現(xiàn)被篡改的程序安裝包文件,從而有效的隔離被篡改的應(yīng)用軟件,防止被篡改的應(yīng)用程序繼續(xù)使用服務(wù)器端提供服務(wù)?!靖綀D說明】
[0020]為了更清楚地說明本發(fā)明【具體實(shí)施方式】或現(xiàn)有技術(shù)中的技術(shù)方案,下面將對【具體實(shí)施方式】或現(xiàn)有技術(shù)描述中所需要使用的附圖作簡單地介紹,顯而易見地,下面描述中的附圖是本發(fā)明的一些實(shí)施方式,對于本領(lǐng)域普通技術(shù)人員來講,在不付出創(chuàng)造性勞動的前提下,還可以根據(jù)這些附圖獲得其他的附圖。
[0021]圖1示出了本發(fā)明實(shí)施例1的可執(zhí)行程序數(shù)據(jù)包加密/解密方法流程示意圖;
[0022]圖2示出了本發(fā)明實(shí)施例2的用可執(zhí)行程序數(shù)據(jù)包加密/解密裝置示意圖?!揪唧w實(shí)施方式】
[0023]下面將結(jié)合附圖對本發(fā)明的技術(shù)方案進(jìn)行清楚、完整地描述,顯然,所描述的實(shí)施例是本發(fā)明一部分實(shí)施例,而不是全部的實(shí)施例?;诒景l(fā)明中的實(shí)施例,本領(lǐng)域普通技術(shù)人員在沒有做出創(chuàng)造性勞動前提下所獲得的所有其他實(shí)施例,都屬于本發(fā)明保護(hù)的范圍。 [〇〇24] 實(shí)施例1
[0025]本實(shí)施了公開了一種可執(zhí)行程序數(shù)據(jù)包加密/解密方法,如圖1所示,該方法包括如下步驟:[〇〇26]在對可執(zhí)行程序數(shù)據(jù)包加密時:[〇〇27]S1.獲取可執(zhí)行程序數(shù)據(jù)包。在本實(shí)施例中,可執(zhí)行程序數(shù)據(jù)包可以是Android平臺上的可執(zhí)行文件。在具體的實(shí)施例中,可以利用加密工具獲取可執(zhí)行程序數(shù)據(jù)包。
[0028]S2.基于預(yù)設(shè)規(guī)則將可執(zhí)行程序數(shù)據(jù)包拆分成若干個原始文件。在具體的實(shí)施例中,可以預(yù)設(shè)將數(shù)據(jù)隨機(jī)變換后的可執(zhí)行程序數(shù)據(jù)包分成多個文件,例如可以等分成8個二進(jìn)制文件,這里所稱的拆分?jǐn)?shù)量是舉例說明,其他更多或更少的數(shù)量都是可行的。在對數(shù)據(jù)隨機(jī)變化后的可執(zhí)行程序數(shù)據(jù)包拆分時,拆分規(guī)則可以是多種,例如可以等分,可以不等分。
[0029]S3.分別利用第一密鑰對若干個原始文件中的各個原始文件進(jìn)行加密得到分別與各個原始文件--對應(yīng)的加密文件。加密文件包括用于索引與其對應(yīng)的原始文件的索引信息。在具體的實(shí)施例中,對隨機(jī)變換后的可執(zhí)行程序數(shù)據(jù)包拆分后得到的若干個原始文件分別生成隨機(jī)密鑰,例如可以利用AES(Advanced Encrypt1n Standard高級加密標(biāo)準(zhǔn))加密算法拆分得到的若干個原始文件生成隨機(jī)密鑰。
[0030]在解密得到加密前的可執(zhí)行程序數(shù)據(jù)包加密時:
[0031]S4.接收加密后的若干加密文件。加密文件包括用于索引與其對應(yīng)的原始文件的索引信息,具體的,在接收所有加密文件的同時,也將各個加密文件的索引信息同時接收。
[0032]S5.分別利用與第一密鑰對應(yīng)的第二密鑰對若干個加密文件進(jìn)行解密,得到與加密文件一一對應(yīng)的若干個原始文件。通過調(diào)用解密庫利用與第一密鑰對應(yīng)的第二密鑰分別對所有的加密文件一一進(jìn)行解密。在具體的實(shí)施例中,每一個第二密鑰都對應(yīng)著相對應(yīng)的第一密鑰,第二密鑰是第一密鑰的逆運(yùn)算,利用加密算法生成第一密鑰,將若干原始文件加密,再利用第一密匙的逆運(yùn)算生成第二密匙,為加密文件進(jìn)行解密。
[0033]S6.分別利用原始文件的索引信息重組若干個原始文件,得到可執(zhí)行程序數(shù)據(jù)包。 在具體的實(shí)施例中,可以利用加密文件中的標(biāo)識信息,即在將可執(zhí)行程序數(shù)據(jù)包拆分為若干個原始文件時存入拆分后的各個原始文件的位置信息,在將各個原始文件重組時,利用各個原始文件的位置信息,將各個原始文件重組在一起得到可執(zhí)行可執(zhí)行程序數(shù)據(jù)包。
[0034]通過對可執(zhí)行程序數(shù)據(jù)包拆分成若干個原始文件,分別對這些原始文件進(jìn)行加密,得到與這些原始文件對應(yīng)的加密后的文件;由于將可執(zhí)行程序數(shù)據(jù)包拆分成多個原始文件并分別加密,而后分別解密各個文件,根據(jù)各個文件的索引信息可以重組得到原可執(zhí)行程序數(shù)據(jù)包,從而,能夠防止因為可執(zhí)行程序數(shù)據(jù)包中的單個密鑰被竊取后而導(dǎo)致的可執(zhí)行程序數(shù)據(jù)包遭到惡意破解,繼而,減小應(yīng)用程序遭惡意破解的概率,提高應(yīng)用程序數(shù)據(jù)安全性。能有效的確保可執(zhí)行數(shù)據(jù)包的機(jī)密性,從而能夠減小應(yīng)用程序被篡改和被竊取源代碼的概率,大大提高了應(yīng)用程序的破解難度。
[0035]為了進(jìn)一步提高可執(zhí)行程序數(shù)據(jù)包的機(jī)密性,在優(yōu)選的實(shí)施例中,在執(zhí)行步驟S1 之后,還包括如下步驟:
[0036]S7.對獲取的可執(zhí)行程序數(shù)據(jù)包中的數(shù)據(jù)進(jìn)行隨機(jī)變換得到隨機(jī)變換后的可執(zhí)行程序數(shù)據(jù)包。在獲取可執(zhí)行程序數(shù)據(jù)包后,對可執(zhí)行數(shù)據(jù)包中的數(shù)據(jù)進(jìn)行隨機(jī)變換,經(jīng)過隨機(jī)變換處理后可執(zhí)行程序數(shù)據(jù)包可以是由標(biāo)準(zhǔn)格式的可執(zhí)行文件變換為普通的二進(jìn)制文件。通過數(shù)據(jù)隨機(jī)變換可以將原文件中的各種元素變換成難于閱讀和理解的數(shù)據(jù)形式,例如,可以將變量或函數(shù)變換成無意義簡短的數(shù)據(jù)組合。這樣可以在程序被破解或反編譯后增大其閱讀難度,對可執(zhí)行程序數(shù)據(jù)包中的數(shù)據(jù)具有一定的保護(hù)性。在執(zhí)行步驟S2時,基于預(yù)設(shè)規(guī)則將可執(zhí)行的程序數(shù)據(jù)包拆分成若干原始文件中基于預(yù)設(shè)規(guī)則拆分的是數(shù)據(jù)隨機(jī)變換后的可執(zhí)行程序數(shù)據(jù)包。
[0037]在對若干個原始文件加密后得到的加密文件,為保證每一個加密文件都是完整的,在優(yōu)選的實(shí)施例中在執(zhí)行步驟S3后,還可以包括如下步驟:
[0038]S8.分別生成與若干加密文件中各個加密文件一一對應(yīng)的第一校驗碼。第一校驗碼用于表征與該第一校驗碼對應(yīng)的加密文件是否完整。在拆分的文件進(jìn)行加密后為保證分塊加密的文件的完整性,要對分塊加密文件生成完整性校驗碼,例如可以通過利用完整性哈希算法計算文件的完整性哈希值,或通過CRC(循環(huán)冗余校驗碼)算法計算文件的校驗碼。 所有加密文件都有一一對應(yīng)的校驗碼,用于校驗所有的分塊的加密文件是否完整。
[0039]在具體的實(shí)施例中,上述S3步驟中的加密文件包括用于索引與其對應(yīng)的原始文件的索引信息,具體的,原始文件的索引信息可以包括:用于標(biāo)識可執(zhí)行程序數(shù)據(jù)包在拆分時的拆分的位置的標(biāo)識信息,即所有拆分后的文件都含有位置信息,以便在重組的時候能不出錯的組成拆分前的文件,在具體的實(shí)施例中加密文件的標(biāo)識信息可以是一個隨機(jī)數(shù);拆分后的文件的數(shù)據(jù)部分;用于校驗各個加密文件是否完整的校驗碼。
[0040]在生成校驗碼之后,執(zhí)行步驟S4時,獲取的若干加密文件中的各個文件均包含有校驗碼、標(biāo)識信息和數(shù)據(jù)部分等,為保證將要被解密的加密文件都是完整的,在優(yōu)選的實(shí)施例中,執(zhí)行步驟S5對其解密之前,還可以包括如下步驟:
[0041]S9.分別利用各個第一校驗碼判斷與其對應(yīng)的加密文件是否完整。在具體的實(shí)施例中,同時獲取各個加密文件的第一校驗碼和數(shù)據(jù)部分,調(diào)用完整性校驗數(shù)據(jù)庫利用加密文件的數(shù)據(jù)部分再次生成加密文件數(shù)據(jù)部分的校驗碼,校驗碼的生成方法例如可以是通過利用完整性哈希算法計算加密文件數(shù)據(jù)部分的完整性哈希值,或通過CRC(循環(huán)冗余校驗碼)算法計算加密文件數(shù)據(jù)部分的校驗碼,再一一驗證各個加密文件數(shù)據(jù)部分的校驗碼與各個第一校驗碼是否相同,如果數(shù)據(jù)部分的校驗碼和第一校驗碼相同,則執(zhí)行步驟S10。
[0042]S10.判斷是否存在未校驗的加密文件。如果存在未校驗的加密文件,則執(zhí)行步驟 S9,如果不存在未校驗的加密文件,即直到所有的加密文件校驗完成后,并且在確保所有的文件都是完整的之后進(jìn)入步驟S5。[〇〇43]在優(yōu)選的實(shí)施例中,在步驟S5利用原始文件的索引信息重組若干個原始文件,得到重組后的可執(zhí)行程序數(shù)據(jù)包后,還可以包括如下步驟:
[0044]S11.調(diào)用預(yù)設(shè)函數(shù)解析得到的可執(zhí)行程序數(shù)據(jù)包。在具體的實(shí)施例中,可以通過 hook在系統(tǒng)文件中的動態(tài)庫,例如libdvm.數(shù)據(jù)獲取固定的函數(shù)例,如函數(shù)“opeenDexFile ()”,調(diào)用該函數(shù),其中函數(shù)的參數(shù)為重組后的可執(zhí)行程序數(shù)據(jù)包中的數(shù)據(jù),通過hook技術(shù)到動態(tài)庫的固定的函數(shù)需要dlopen打開動態(tài)庫文件,再通過slsym()獲取固定函數(shù)指針,即可調(diào)用該固定函數(shù)。函數(shù)調(diào)用完成后,例如android虛擬機(jī)或手機(jī)就可以解析重組后的可執(zhí)行程序數(shù)據(jù)。
[0045]S12.利用自定義類加載器對解析后的可執(zhí)行程序數(shù)據(jù)包進(jìn)行類加載。在具體的實(shí)施例中,首先,自定義生成類加載器,例如可以生成DynamicDexClassLoder類加載器,調(diào)用類加載器中的例如defineClassO函數(shù),將可執(zhí)行程序數(shù)據(jù)包對應(yīng)的類加載。
[0046]在對可執(zhí)行程序進(jìn)行加解密/解密,保證了可執(zhí)行程序數(shù)據(jù)包的是安全的,為了進(jìn)一步保證應(yīng)用程序的數(shù)據(jù)安全,在優(yōu)選的實(shí)施例中,還可以進(jìn)一步對安裝程序包中的文件進(jìn)行數(shù)據(jù)安全監(jiān)測,可執(zhí)行程序數(shù)據(jù)包加密/解密方法還可以包括如下步驟:
[0047]S13.獲取程序安裝包文件。在具體的實(shí)施例中,程序安裝包文件可以包括重組后的可執(zhí)行程序數(shù)據(jù)包、資源目錄、libs目錄和AndroidManifest.xml等所有的應(yīng)用程序所需要的文件。在對可執(zhí)行程序進(jìn)行加解密/解密,保證了可執(zhí)行程序數(shù)據(jù)包的是安全的,為了進(jìn)一步保證應(yīng)用程序的數(shù)據(jù)安全,在優(yōu)選的實(shí)施例中,還可以進(jìn)一步對安裝程序包中的文件進(jìn)行數(shù)據(jù)安全監(jiān)測,
[0048]S14.生成程序安裝包文件的第二校驗碼。在獲取安裝程序包中的文件后,分別對程序安裝包中的各個文件生成與各個文件一一對應(yīng)的第二校驗碼,例如可以通過利用完整性哈希算法計算文件的完整性哈希值,或通過CRC (循環(huán)冗余校驗碼)算法計算文件的校驗碼。所有程序安裝包中的文件都有與之一一對應(yīng)的第二校驗碼,用于校驗所有程序安裝包文件是否完整。優(yōu)選地,在生成與程序安裝包中的各個文件一一對應(yīng)的第二校驗碼后,可以利用第二校驗碼生成校驗數(shù)據(jù)庫,并將生成的第二校驗碼在相應(yīng)的文件中進(jìn)行隨機(jī)插粧, 以便運(yùn)行程序時可以不確定時機(jī)的校驗各個文件的完整性。
[0049]S15.利用第二校驗碼校驗所述程序安裝包文件得到所述程序安裝包文件是否完整的校驗結(jié)果;根據(jù)所述校驗結(jié)果執(zhí)行相應(yīng)的操作。在具體的實(shí)施例中,由于上述步驟S14中將第二校驗碼隨機(jī)在相應(yīng)的文件中隨機(jī)插粧,程序在運(yùn)行過程中會執(zhí)行到第二校驗碼的插粧代碼,再通調(diào)用底層的文件校驗數(shù)據(jù)庫計算運(yùn)行中的文件的完整行校驗碼,與本地保存的文件的完整性校驗碼進(jìn)行比較,判斷二者是否相同,當(dāng)比較結(jié)果相同時,則說明可以正常運(yùn)行程序安裝包文件。當(dāng)比較結(jié)果不同時,則說明鎖定該程序安裝包文件,終止運(yùn)行該程序安裝包文件。,優(yōu)選地,還可以進(jìn)一步輸出程序被篡改的提示信息。為保證校驗結(jié)果的正確性,優(yōu)選的,在本地校驗完成后,還可以通過反射調(diào)用Java層代碼進(jìn)行遠(yuǎn)程校驗,具體的, 將文件完整性校驗碼、應(yīng)用程序的來源信息、用戶信息等請求參數(shù)發(fā)送至服務(wù)器端。服務(wù)器端接收到這些請求參數(shù)后,比較客戶端傳遞的完整性校驗碼與服務(wù)器端保存的完整性校驗碼是否相同,當(dāng)比較結(jié)果相同時,正常響應(yīng)客戶端下一次請求。當(dāng)比較結(jié)果不同時,則對該客戶端其他API請求(認(rèn)證權(quán))進(jìn)行封堵,防止被篡改的應(yīng)用程序繼續(xù)使用服務(wù)器提供服務(wù)。
[0050]對校驗程序安裝包文件的完整性進(jìn)行校驗?zāi)軠?zhǔn)確發(fā)現(xiàn)被篡改的程序安裝包文件, 從而有效的隔離被篡改的應(yīng)用軟件,防止被篡改的應(yīng)用程序繼續(xù)使用服務(wù)器端提供服務(wù)。 [〇〇51 ] 實(shí)施例2
[0052]本實(shí)施例提供了一種可執(zhí)行程序數(shù)據(jù)包加密/解密裝置。如圖2所示,該可執(zhí)行程序數(shù)據(jù)包加密/解密裝置包括:第一獲取單元111、拆分單元112、加密單元113、接收單元 114、解密單元115和重組單元116其中,
[0053]第一獲取單元111用于獲取可執(zhí)行程序數(shù)據(jù)包;
[0054]拆分單元112,用于基于預(yù)設(shè)規(guī)則將可執(zhí)行程序數(shù)據(jù)報拆分成若干個原始文件;
[0055]加密單元113,用于分別利用第一密鑰對若干個原始文件中的各個原始文件進(jìn)行加密得到分別與各個原始文件---對應(yīng)的加密文件;
[0056]接收單元114,用于接收加密后的若干個加密文件;
[0057]解密單元115,用于分別利用第一密鑰對應(yīng)的第二密匙對若干個加密文件進(jìn)行解密;
[0058]重組單元116,用于分別利用原始文件的索引信息將若干個原始文件重組。根據(jù)可執(zhí)行程序數(shù)據(jù)包加密/解密裝置,通過獲取單元獲取可執(zhí)行程序數(shù)據(jù)包,再通過拆分單元將可執(zhí)行程序數(shù)據(jù)包拆分加密單元對拆分后文件進(jìn)行加密,解密單元對加密文件解密,重組單元重組解密后的文件,這樣就能夠有效地確??蓤?zhí)行程序數(shù)據(jù)包的完整性與機(jī)密性,使應(yīng)用程序被破解或被篡改的困難大大增加。
[0059]在優(yōu)選的實(shí)施例中,該可執(zhí)行程序數(shù)據(jù)包加密/解密裝置還可以包括:
[0060] 第一校驗碼生成單元,用于分別生成與若干加密文件各加密文件-對應(yīng)的第一文件校驗碼;
[0061]第一校驗單元,用于分別利用第一文件完整行校驗碼校驗若干加密文件。
[0062]在優(yōu)選的實(shí)施例中,該可執(zhí)行程序數(shù)據(jù)包加密/解密裝置還可以包括:
[0063]解析單元,用于調(diào)用預(yù)設(shè)函數(shù)解析得到可執(zhí)行程序數(shù)據(jù)包;
[0064]類加載單元,用于利用自定義類加載器對可執(zhí)行程序數(shù)據(jù)包進(jìn)行類加載。
[0065]在優(yōu)選的實(shí)施例中,該可執(zhí)行程序數(shù)據(jù)包加密/解密裝置還可以包括:
[0066]第二獲取單元,用于獲取程序安裝包文件;
[0067]第二校驗碼生成單元,用于生成程序安裝包文件的第二校驗碼;
[0068]第二校驗單元,用于利用第二文件校驗碼校驗程序安裝包文件得到程序安裝包文件是否完整的校驗結(jié)果。
[0069]在優(yōu)選的實(shí)施例中,該可執(zhí)行程序數(shù)據(jù)包加密/解密裝置還可以包括:
[0070]數(shù)據(jù)隨機(jī)變換單元,用于對獲取的可執(zhí)行程序數(shù)據(jù)包中的數(shù)據(jù)進(jìn)行隨機(jī)變換得到隨機(jī)變換后的可執(zhí)行程序數(shù)據(jù)包;
[0071]逆數(shù)據(jù)隨機(jī)變換單元,對可執(zhí)行程序數(shù)據(jù)包中的數(shù)據(jù)進(jìn)行與隨機(jī)變換相對應(yīng)的逆運(yùn)算,得到隨機(jī)變換前的可執(zhí)行程序數(shù)據(jù)包。
[0072]本領(lǐng)域內(nèi)的技術(shù)人員還應(yīng)理解,本發(fā)明的實(shí)施例可提供為方法、系統(tǒng)、或計算機(jī)程序產(chǎn)品。因此,本發(fā)明可采用完全硬件實(shí)施例、完全軟件實(shí)施例、或結(jié)合軟件和硬件方面的實(shí)施例的形式。而且,本發(fā)明可采用在一個或多個其中包含有計算機(jī)可用程序代碼的計算機(jī)可用存儲介質(zhì)(包括但不限于磁盤存儲器、CD-ROM、光學(xué)存儲器等)上實(shí)施的計算機(jī)程序產(chǎn)品的形式。
[0073]本發(fā)明是參照根據(jù)本發(fā)明實(shí)施例的方法、設(shè)備(系統(tǒng))、和計算機(jī)程序產(chǎn)品的流程圖和/或方框圖來描述的,應(yīng)理解可由計算機(jī)程序指令實(shí)現(xiàn)流程圖和/或方框圖中的每一流程和/或方框、以及流程圖和/或方框圖中的流程和/或方框的結(jié)合??商峁┻@些計算機(jī)程序指令到通用計算機(jī)、專用計算機(jī)、嵌入式處理機(jī)或其他可編程數(shù)據(jù)處理設(shè)備的處理器以產(chǎn)生一個機(jī)器,使得通過計算機(jī)或其他可編程數(shù)據(jù)處理設(shè)備的處理器執(zhí)行的指令產(chǎn)生用于實(shí)現(xiàn)在流程圖一個流程或多個流程和/或方框圖一個方框或多個方框中指定的功能的裝置。
[0074]這些計算機(jī)程序指令也可存儲在能引導(dǎo)計算機(jī)或其他可編程數(shù)據(jù)處理設(shè)備以特定方式工作的計算機(jī)可讀存儲器中,使得存儲在該計算機(jī)可讀存儲器中的指令產(chǎn)生包括指令裝置的制造品,該指令裝置實(shí)現(xiàn)在流程圖一個流程或多個流程和/或方框圖一個方框或多個方框中指定的功能。
[0075]這些計算機(jī)程序指令也可裝載到計算機(jī)或其他可編程數(shù)據(jù)處理設(shè)備上,使得在計算機(jī)或其他可編程設(shè)備上執(zhí)行一系列操作步驟以產(chǎn)生計算機(jī)實(shí)現(xiàn)的處理,從而在計算機(jī)或其他可編程設(shè)備上執(zhí)行的指令提供用于實(shí)現(xiàn)在流程圖一個流程或多個流程和/或方框圖一個方框或多個方框中指定的功能的步驟。
[0076]雖然結(jié)合附圖描述了本發(fā)明的實(shí)施方式,但是本領(lǐng)域技術(shù)人員可以在不脫離本發(fā)明的精神和范圍的情況下作出各種修改和變型,這樣的修改和變型均落入由所附權(quán)利要求所限定的范圍之內(nèi)。
【主權(quán)項】
1.一種可執(zhí)行程序數(shù)據(jù)包加密/解密方法,其特征在于,包括如下步驟:獲取可執(zhí)行程序數(shù)據(jù)包;基于預(yù)設(shè)規(guī)則將所述可執(zhí)行程序數(shù)據(jù)包拆分成若干個原始文件;分別利用第一密鑰對所述若干個原始文件中的各個原始文件進(jìn)行加密得到分別與各 個原始文件—對應(yīng)的加密文件,所述加密文件包括用于索引與其對應(yīng)的原始文件的索引 信息;接收所述加密后的若干個加密文件,所述加密文件包括用于索引與其對應(yīng)的原始文件 的索引彳目息;分別利用與所述第一密鑰對應(yīng)的第二密鑰對所述若干個加密文件進(jìn)行解密,得到與所 述加密文件—對應(yīng)的所述若干個原始文件;分別利用所述原始文件的索引信息重組所述若干個原始文件,得到所述可執(zhí)行程序數(shù) 據(jù)包。2.根據(jù)權(quán)利要求1所述的可執(zhí)行程序數(shù)據(jù)包加密/解密方法,其特征在于,所述分別利 用第一密鑰對所述若干個原始文件中的各個原始文件進(jìn)行加密得到分別與各個原始文件 ---對應(yīng)的加密文件之后,還包括:分別生成與所述若干加密文件中各個加密文件一一對應(yīng)的第一校驗碼,所述第一校驗 碼用于表征與該第一校驗碼對應(yīng)的加密文件是否完整;在所述接收加密后的若干個加密文件和所述分別利用與所述第一密鑰對應(yīng)的第二密 鑰對所述若干個加密文件進(jìn)行解密之間還包括:分別利用各個所述第一校驗碼判斷各自對應(yīng)的加密文件是否完整;如果所述若干加密文件均完整,則利用與所述第一密鑰對應(yīng)的第二密鑰對所述若干個 加密文件進(jìn)行解密。3.根據(jù)權(quán)利要求1或2所述的可執(zhí)行程序數(shù)據(jù)包加密/解密方法,其特征在于,在所述分 別利用所述原始文件的索引信息重組所述若干個原始文件,得到所述可執(zhí)行程序數(shù)據(jù)包之 后,還包括:調(diào)用預(yù)設(shè)函數(shù)解析得到的所述可執(zhí)行程序數(shù)據(jù)包;利用自定義類加載器對解析后的所述可執(zhí)行程序數(shù)據(jù)包進(jìn)行類加載。4.根據(jù)權(quán)利要求1所述的可執(zhí)行程序數(shù)據(jù)包加密/解密方法,其特征在于,在所述分別 利用所述原始文件的索引信息重組所述若干個原始文件,得到所述可執(zhí)行程序數(shù)據(jù)包之 后,還包括:獲取程序安裝包文件,所述程序安裝包文件包括重組后的所述可執(zhí)行程序數(shù)據(jù)包;生成所述程序安裝包文件的第二校驗碼,所述第二校驗碼用于表征所述程序安裝包文 件是否完整;利用第二校驗碼校驗所述程序安裝包文件得到所述程序安裝包文件是否完整的校驗 結(jié)果;根據(jù)所述校驗結(jié)果執(zhí)行相應(yīng)的操作。5.根據(jù)權(quán)利要求1或2所述的可執(zhí)行程序數(shù)據(jù)包加密/解密方法,其特征在于,在所述獲 取可執(zhí)行程序數(shù)據(jù)包之后,還包括:對獲取的所述可執(zhí)行程序數(shù)據(jù)包中的數(shù)據(jù)進(jìn)行隨機(jī)變換得到隨機(jī)變換后的可執(zhí)行程序數(shù)據(jù)包;所述基于預(yù)設(shè)規(guī)則將所述可執(zhí)行程序數(shù)據(jù)包拆分成若干個原始文件包括:基于預(yù)設(shè)規(guī) 則將所述隨機(jī)變換后的可執(zhí)行程序數(shù)據(jù)包拆分成若干個原始文件;在所述分別利用所述原始文件的索引信息重組所述若干個原始文件,得到所述可執(zhí)行 程序數(shù)據(jù)包之后,還包括:對所述可執(zhí)行程序數(shù)據(jù)包中的數(shù)據(jù)進(jìn)行與所述隨機(jī)變換相對應(yīng)的逆運(yùn)算,得到隨機(jī)變 換前的可執(zhí)行程序數(shù)據(jù)包。6.—種可執(zhí)行程序數(shù)據(jù)包加密/解密裝置,其特征在于,包括:第一獲取單元,用于獲取可執(zhí)行程序數(shù)據(jù)包;拆分單元,用于基于預(yù)設(shè)規(guī)則將所述可執(zhí)行程序數(shù)據(jù)報拆分成若干個原始文件;加密單元,用于分別利用第一密鑰對所述若干個原始文件中的各個原始文件進(jìn)行加密得到分別與各個原始文件 對應(yīng)的加密文件;接收單元,用于接收所述加密后的若干個加密文件;解密單元,用于分別利用所述第一密鑰對應(yīng)的第二密匙對所述若干個加密文件進(jìn)行解 密;重組單元,用于分別利用所述原始文件的索引信息將所述若干個原始文件重組。7.根據(jù)權(quán)利要求6所述的可執(zhí)行程序數(shù)據(jù)包加密/解密裝置,其特征在于,還包括: 第一校驗碼生成單元,用于分別生成與所述若干加密文件各加密文件 對應(yīng)的第一文件校驗碼;第一校驗單元,用于分別利用所述第一文件完整行校驗碼校驗所述若干加密文件。8.根據(jù)權(quán)利要求6或7所述的可執(zhí)行程序數(shù)據(jù)包加密/解密裝置,其特征在于,還包括:解析單元,用于調(diào)用預(yù)設(shè)函數(shù)解析得到所述可執(zhí)行程序數(shù)據(jù)包;類加載單元,用于利用自定義類加載器對所述可執(zhí)行程序數(shù)據(jù)包進(jìn)行類加載。9.根據(jù)權(quán)利要求6所述的可執(zhí)行程序數(shù)據(jù)包加密/解密裝置,其特征在于,還包括: 第二獲取單元,用于獲取程序安裝包文件;第二校驗碼生成單元,用于生成所述程序安裝包文件的第二校驗碼;第二校驗單元,用于利用第二文件校驗碼校驗程序安裝包文件得到所述程序安裝包文 件是否完整的校驗結(jié)果。10.根據(jù)權(quán)利要求6或7所述的可執(zhí)行程序數(shù)據(jù)包加密/解密裝置,其特征在于,還包括: 數(shù)據(jù)隨機(jī)變換單元,用于對獲取的所述可執(zhí)行程序數(shù)據(jù)包中的數(shù)據(jù)進(jìn)行隨機(jī)變換得到隨機(jī)變換后的可執(zhí)行程序數(shù)據(jù)包;數(shù)據(jù)隨機(jī)逆變換單元,對所述可執(zhí)行程序數(shù)據(jù)包中的數(shù)據(jù)進(jìn)行與所述隨機(jī)變換相對應(yīng) 的逆運(yùn)算,得到隨機(jī)變換前的可執(zhí)行程序數(shù)據(jù)包。
【文檔編號】G06F21/64GK106055936SQ201610334722
【公開日】2016年10月26日
【申請日】2016年5月18日
【發(fā)明人】蔡樹彬, 明仲, 黃榮杰
【申請人】深圳大學(xué)