安卓系統(tǒng)中應(yīng)用程序加密方法及系統(tǒng)的制作方法
【技術(shù)領(lǐng)域】
[0001]本發(fā)明涉及移動終端軟件系統(tǒng)技術(shù)領(lǐng)域,特別是涉及安卓系統(tǒng)中應(yīng)用程序加密方法及系統(tǒng)。
【背景技術(shù)】
[0002]避免Android軟件被破解和攻擊是對開發(fā)者的技術(shù)方案的保護(hù)。目前,市場上有很多用于破解Android應(yīng)用APK的工具,可以反編譯出界面布局文件,甚至Java源碼文件。這使得盜版軟件遍地而出,也影響整個軟件行業(yè)的發(fā)展。本發(fā)明提出了一種對Android應(yīng)用軟件進(jìn)行加密的安全技術(shù),通過動態(tài)加載classes, dex來實現(xiàn)對核心代碼的加密,從而有效地保護(hù)軟件的知識產(chǎn)權(quán),通過加密后,反編譯也難以看到原來的文件
[0003]具體的,Android平臺使用Java編程語言,而Java源代碼編譯后的二進(jìn)制文件極易被反編譯,導(dǎo)致比其它的語言更容易被破解。目前有一些工具如dex2jar、apktool等便可以反編譯出Android的源碼文件。采用復(fù)雜的簽名算法可以保護(hù)Java文件、jar和so等鏈接庫文件,這些被破解的難度很大;但是資源文件,主要是軟件的UI (圖片、音頻等文件)和界面布局(xml文件)可以輕易的破解,這些資源也是UI工程師和前臺工程師開發(fā)的作品,目前的技術(shù)還保護(hù)不了。
[0004]申請?zhí)枮镃N201310509543.1的中國專利揭露了一種移動應(yīng)用的軟件加固技術(shù),方法是為每個應(yīng)用定制微型的虛擬機(jī),在應(yīng)用程序運(yùn)行時先運(yùn)行微型虛擬機(jī),對應(yīng)用程序整體進(jìn)行安全性檢查或驗證,并在安全通過后再運(yùn)行應(yīng)用程序的功能模塊,所述預(yù)設(shè)的安全要求包括應(yīng)用程序的簽名驗證,應(yīng)用程序中無效指令、非法指令的去除以及加密信息的解密。但是這一技術(shù)偏理論化,難以在真實的場景中普及。
[0005]申請?zhí)枮镃N201110429661.2的中國專利揭露了 Android系統(tǒng)中Dalvik虛擬機(jī)和Linux系統(tǒng)庫增加接口,使Android具有從內(nèi)存中直接加載DEX格式文件和SO格式文件的能力;將應(yīng)用軟件的核心代碼存儲在在線服務(wù)器中,加密并簽名后發(fā)送給安裝在客戶端的應(yīng)用軟件;應(yīng)用軟件接收到核心代碼后驗證簽名并解密,然后將明文存儲在內(nèi)存中,直接加載到系統(tǒng)中,然后調(diào)用其中的代碼,最后釋放內(nèi)存。
[0006]但是這種方法比較復(fù)雜,一是要在Android平臺上修改系統(tǒng)代碼,增加額外的接口 ;二是需要在線服務(wù)器,這無形中增加了開發(fā)者的壓力。
【發(fā)明內(nèi)容】
[0007]鑒于以上所述現(xiàn)有技術(shù)的缺點,本發(fā)明的目的在于提供安卓系統(tǒng)中應(yīng)用程序加密方法及系統(tǒng),解決現(xiàn)有技術(shù)中的種種問題,提升軟件安全性的同時降低開發(fā)成本。
[0008]為實現(xiàn)上述目標(biāo)及其他相關(guān)目標(biāo),本發(fā)明提供一種安卓系統(tǒng)中應(yīng)用程序加密方法,所述方法包括:將應(yīng)用程序文件內(nèi)容劃分,劃分后的內(nèi)容包括:主體部分及核心部分;從所述主體部分提取虛擬機(jī)運(yùn)行程序文件;將所述核心部分進(jìn)行加密以形成加密文件;修改所述虛擬機(jī)運(yùn)行程序文件,包括:將加密文件寫入所述虛擬機(jī)運(yùn)行程序文件尾部,并在所述尾部添加所述加密文件的描述信息,并更新所述虛擬機(jī)運(yùn)行程序文件的屬性信息;將修改后的虛擬機(jī)運(yùn)行程序文件放回所述主體部分中,來生成完成所述加密后的應(yīng)用程序文件。
[0009]可選的,所述主體部分及核心部分均編譯為獨立的.apk文件。
[0010]可選的,所述虛擬機(jī)運(yùn)行程序文件為classes, dex文件。
[0011]可選的,所述描述信息包括:加密文件的名稱、位置及長度。
[0012]可選的,所述更新屬性信息包括:重新計算所述虛擬機(jī)運(yùn)行程序文件所包含的:校驗和字段、簽名字段和文件長度字段的值并替換原有值。
[0013]可選的,所述的安卓系統(tǒng)中應(yīng)用程序加密方法,還包括:通過安卓軟件開發(fā)包中提供的簽名工具所述加密后的應(yīng)用程序文件進(jìn)行簽名。
[0014]為實現(xiàn)上述目標(biāo)及其他相關(guān)目標(biāo),本發(fā)明提供一種安卓系統(tǒng)中應(yīng)用程序加密系統(tǒng),包括:劃分模塊,用于將應(yīng)用程序文件內(nèi)容劃分,劃分后的內(nèi)容包括:主體部分及核心部分;提取模塊,用于從所述主體部分提取虛擬機(jī)運(yùn)行程序文件;加密模塊,用于將所述核心部分進(jìn)行加密以形成加密文件;修改模塊,用于修改所述虛擬機(jī)運(yùn)行程序文件,包括:將加密文件寫入所述虛擬機(jī)運(yùn)行程序文件尾部,并在所述尾部添加所述加密文件的描述信息,并更新所述虛擬機(jī)運(yùn)行程序文件的屬性信息;文件生成模塊,用于將修改后的虛擬機(jī)運(yùn)行程序文件放回所述主體部分中,來生成完成所述加密后的應(yīng)用程序文件。
[0015]可選的,所述主體部分及核心部分均編譯為獨立的.apk文件。
[0016]可選的,所述虛擬機(jī)運(yùn)行程序文件為classes, dex文件。
[0017]可選的,所述描述信息包括:加密文件的名稱、位置及長度。
[0018]可選的,所述更新屬性信息包括:重新計算所述虛擬機(jī)運(yùn)行程序文件所包含的:校驗和字段、簽名字段和文件大小字段的值并替換原有值。
[0019]可選的,所述的安卓系統(tǒng)中應(yīng)用程序加密系統(tǒng),還包括:簽名模塊,用于通過安卓軟件開發(fā)包中提供的簽名工具對所述加密后的應(yīng)用程序文件進(jìn)行簽名。
[0020]如上所述,本發(fā)明提供的安卓系統(tǒng)中應(yīng)用程序加密方法及系統(tǒng),將應(yīng)用程序文件內(nèi)容劃分,劃分后的內(nèi)容包括:主體部分及核心部分;從所述主體部分提取虛擬機(jī)運(yùn)行程序文件;將所述核心部分進(jìn)行加密以形成加密文件;修改所述虛擬機(jī)運(yùn)行程序文件,包括:將加密文件寫入所述虛擬機(jī)運(yùn)行程序文件尾部,并在所述尾部添加所述加密文件的描述信息,并更新所述虛擬機(jī)運(yùn)行程序文件的屬性信息;將修改后的虛擬機(jī)運(yùn)行程序文件放回所述主體部分中,來生成完成所述加密后的應(yīng)用程序文件;通過本發(fā)明的技術(shù)方案,逆向工程所獲得的代碼中仍然是只有軟件主體部分代碼,核心功能部分的代碼被隱藏可以有效對抗各種針對安卓系統(tǒng)中應(yīng)用軟件的逆向工程攻擊,提高安全性。
【附圖說明】
[0021]圖1顯示為本發(fā)明一實施例中的安卓系統(tǒng)中應(yīng)用程序加密方法的流程示意圖。
[0022]圖2顯示為本發(fā)明一具體實例中安卓系統(tǒng)中應(yīng)用程序加密方法的流程示意圖。
[0023]圖3顯示為本發(fā)明一實施例中的安卓系統(tǒng)中應(yīng)用程序加密系統(tǒng)的結(jié)構(gòu)示意圖。
[0024]元件標(biāo)號說明
[0025]I 應(yīng)用程序加密系統(tǒng)
[0026]11 劃分模塊
[0027]12 提取模塊
[0028]13 加密模塊
[0029]14 修改模塊
[0030]15 文件生成模塊
[0031]SI?S5方法步驟
【具體實施方式】
[0032]以下通過特定的具體實例說明本發(fā)明的實施方式,本領(lǐng)域技術(shù)人員可由本說明書所揭露的內(nèi)容輕易地了解本發(fā)明的其他優(yōu)點與功效。本發(fā)明還可以通過另外不同的【具體實施方式】加以實施或應(yīng)用,本說明書中的各項細(xì)節(jié)也可以基于不同觀點與應(yīng)用,在沒有背離本發(fā)明的精神下進(jìn)行各種修飾或改變。需說明的是,在不沖突的情況下,本申請中的實施例及實施例中的特征可以相互組合。
[0033]本發(fā)明的技術(shù)方案應(yīng)用于安卓(Android)系統(tǒng)中,安卓系統(tǒng)(Android)是一種基于Linux的自由及開放源代碼的操作系統(tǒng),主要使用于移動設(shè)備,如智能手機(jī)和平板電腦,由Google公司和開放手機(jī)聯(lián)盟領(lǐng)導(dǎo)及開發(fā),因此,在以下實施例中,涉及的專業(yè)性詞匯可在Android相關(guān)的在先技術(shù)中查找,故不作詳細(xì)贅述。
[0034]如圖1所示,本發(fā)明提供一種安卓系統(tǒng)中應(yīng)用程序加密方法,所述方法包括:
[0035]步驟S1:將應(yīng)用程序文件內(nèi)容劃分,劃分后的內(nèi)容包括:主體部分及核心部分。
[0036]在一實施例中,所述應(yīng)用程序文件在安卓系統(tǒng)中一般是以.apk后綴名的形式出現(xiàn)的,所述軟件主體部分是實際安裝在Android系統(tǒng)中的部分,核心功能部分是軟件主體部分調(diào)用的需要重點保護(hù)的功能代碼,由于該內(nèi)容本領(lǐng)域技術(shù)人員均可根據(jù)本發(fā)明的教示來結(jié)合實際需求加以變化,因此此處不作贅述;優(yōu)選的,所述主體部分及核心部分皆編譯為獨立的.apk格式。
[0037]步驟S2:從所述主體部分提取虛擬機(jī)運(yùn)行程序文件。
[0038]在一實施例中,所述虛擬機(jī)運(yùn)行程序文件為classes, dex文件,Android系統(tǒng)中的應(yīng)用都運(yùn)行在虛擬機(jī)上,因此classes, dex就是包含其的應(yīng)用程序在虛擬機(jī)運(yùn)行的執(zhí)行文件。
[0039]步驟S3:將所述核心部分進(jìn)行加密以形成加密文件。
[0040]在一實施例中,對核心部分.apk文件的加密方式可為現(xiàn)有的加密算法或通過現(xiàn)有的反編譯工具進(jìn)行,故此處不作贅述;優(yōu)選的,所述加密方式中可加入簽名的字段值作為特征值。
[0041]步驟S4:修改所述虛擬機(jī)運(yùn)行程序文件,包括:將加密文件寫入所述虛擬機(jī)運(yùn)行程序文件尾部,并在所述尾部添加所述加密文件的描述信息,并更新所述虛擬機(jī)運(yùn)行程序文件的屬性信息。
[0042]在一實施例中,所述描述信息包括:加密文件的名稱、位置及長度,用以解密時找到核心部分代碼的起始位置;而所述更新屬性信息包括:重新計算所述虛擬機(jī)運(yùn)行程序文件所包含的:校驗和字段、簽名字段和文件長度字段的值并替換原有值,即classes, dex文件的 checksum、signature 和 file_size 字段值。
[0043]步驟S5:將修改后的虛擬機(jī)運(yùn)行程序文件放回所述主體部分中,來生成完成所述加密后的應(yīng)用程序文件。
[0044]本發(fā)明之所以利用該文件的原因在于,Android系統(tǒng)在解析執(zhí)行classes, dex文件的時候,如果發(fā)現(xiàn)其文件頭的校驗碼字段與SHA-1簽名字段無誤,則認(rèn)為此文件未損壞或未被篡改,是可以執(zhí)行的。因此,可以猜想,如果在classes, dex文件后面增加一些內(nèi)容,同