新四季網

一種APK的加固方法和裝置,及動態加載方法和裝置與流程

2024-04-01 02:01:05


本發明涉及終端應用安全技術領域,特別涉及一種APK的加固方法和裝置、以及動態加載方法和裝置。



背景技術:

APK(Android Package)即安卓Android安裝包,是Android作業系統上的應用程式安裝文件,該應用安裝文件由安裝文件打包工具根據多個文件生成,生成APK的文件一般採用java程式語言編寫,用戶將通過安裝文件打包工具生成的APK文件上傳到安卓模擬器或安卓作業系統的用戶設備中執行即可安裝。

隨著Android移動終端平臺的日益發展,第三方應用程式大量湧現,對應用的盜版和重打包現象日益嚴重。由於Android平臺採用Java語言開發,導致APK中的代碼易於被反編譯,通過反編譯APK文件,進行代碼的分析、修改或者插入,再重新籤名打包為新的APK文件,以達到改變程序原有行為的目的,APK的篡改行為嚴重損害了應用程式開發商的利益和積極性,而利用APK篡改技術,通過加入惡意代碼使得Android用戶面臨隱私洩露和財產損失的危險,嚴重影響了用戶的應用安全。因此,開發者們對於Android程序代碼的加固防護也越來越關注。

現有安卓軟體安裝包APK的加固方法中,對APK中的某些重要數據進行加密,將加密數據以文件形式存放在資源存放目錄res目錄下或者額外資源目錄assets目錄下,程序執行執行過程中去對應目錄下尋找這個加密文件並加載,從而完APK文件的運行,但是該種加密數據的存放方式隱蔽性差,容易被發現,導致APK被破解的風險仍然較大。



技術實現要素:

針對現有技術中存在的缺陷,本發明實施例的目的在於提供一種能夠克服上述問題或者至少能夠部分地解決上述問題的一種APK的加固方法和裝置、以及動態加載方法和裝置。

為實現上述目的,本發明的一個實施例中提供了一種APK文件的加固方法,所述加固方法包括:

一種APK文件的加固方法,其特徵在於,包括:

獲取待加固的原APK中需要保護的原數據;

將所述原數據進行加密處理,得到加密數據;

對所述原APK進行加固處理,生成目標APK,其中,所述加密數據以文件形式存儲於所述目標APK的預設位置。

優選的,如上所述的加固方法,所述預設位置為目標APK的classes.dex文件中的位置。

優選的,如上所述的加固方法,所述預設位置為目標APK的classes.dex文件的文件頭和/或數據區的N個指定位置,N≥1。

優選的,如上所述的加固方法,所述N=1,所述指定位置為所述數據區的頭部或尾部。

優選的,如上所述的加固方法,所述N=2;所述加密數據包括第一加密數據和第二加密數據;

所述指定位置包括第一指定位置和第二指定位置,第一加密數據在目標APK的classes.dex文件中的位置為所述第一指定位置,第二加密數據在目標APK的classes.dex文件中的位置為所述第二指定位置。

優選的,如上所述的加固方法,所述第一指定位置為所述數據區的頭部,所述第二指定位置為所述數據區的尾部。

優選的,如上所述的加固方法,所述原數據為原APK中的非classes.dex文件中的數據;

所述對所述原APK進行加固處理,生成目標APK,包括:

根據加密數據在目標APK中的所述預設位置,將加密數據添加到原APK中的對應位置;

將添加後的原APK中除所述原數據之外的其它文件進行重新打包籤名,生成目標APK。

優選的,如上所述的加固方法,若所述預設位置為目標APK的classes.dex文件中的位置,所述將添加後的原APK中除所述原數據之外的其它文件進行重新打包籤名,生成目標APK,包括:

重新計算並更新添加加密數據後的原APK的classes.dex文件的文件頭信息,得到更新後的第一classes.dex文件;

將第一classes.dex文件和原APK的除所述原數據之外的其它文件進行重新打包籤名,生成目標APK。

優選的,如上所述的加固方法,所述原數據為原APK的classes.dex文件中的數據;

所述對所述原APK進行加固處理,生成目標APK,包括:

記錄原數據在原APK的classes.dex文件中的原位置信息;

根據加密數據在目標APK中的所述預設位置,將加密數據和所述原位置信息添加到原APK中的的對應位置;

刪除原APK的classes.dex文件中的所述原數據,得到第二classes.dex文件;

重新計算並更新第二classes.dex文件的文件頭信息,得到第三classes.dex文件;

將第三classes.dex文件和原APK的除其classes.dex文件外的其它文件進行重新打包籤名,生成目標APK。

在本發明的一個實施例中還提供了一種APK文件的加固裝置,該裝置包括:

加密數據生成模塊,用於獲取待加固的原APK中需要保護的原數據,將所述原數據進行加密處理,得到加密數據;

目標APK生成模塊,用於對所述原APK進行加固處理,生成目標APK,其中,所述加密數據以文件形式存儲於所述目標APK的預設位置。

在本發明的一個實施例中,還提供了一種加固APK的動態加載方法,其中,所述加固APK為採用上述任一APK文件的加固方法生成的目標APK,所述動態加載方法包括:

解壓所述目標APK;

根據加密數據在目標APK中的存儲位置,提取所述加密數據,並對加密數據進行解密得到原數據;

根據所述原數據和解壓後的目標APK,通過dex類加載器對目標APK的classes.dex文件的進行動態加載。

優選的,如上所述的動態加載方法,若所述原數據為原APK中的classes.dex文件中的數據,所述根據加密數據在目標APK的存儲位置,提取所述加密數據,還包括:獲取加密數據所對應的原數據的原位置信息;

所述根據所述原數據和解壓後的目標APK,通過dex類加載器對目標APK的classes.dex文件的進行動態加載,包括:

根據所述原數據的原始位置信息,將所述原數據放回到第三classes.dex文件中的對應位置,得到目標APK的完整classes.dex文件;

通過dex類加載器對目標APK的完整classes.dex文件的進行動態加載。

優選的,如上所述的動態加載方法,所述通過dex類加載器對目標APK的完整classes.dex文件的進行動態加載,包括:

所述完整classes.dex文件中原數據被加載到內存空間中後,刪除所述完整classes.dex文件中的所述原數據。

在本發明的一個實施例中,還提供了一種加固APK的動態加載裝置,所述動態加載裝置包括:

目標APK解壓模塊,用於解壓所述目標APK;

原數據提取模塊,用於根據加密數據在目標APK中的的存儲位置,提取所述加密數據,並對加密數據進行解密得到原數據;

APK動態加載模塊,用於根據所述原數據和解壓後的目標APK,通過dex類加載器對目標APK的classes.dex文件的進行動態加載。

優選的,如上所述的動態加載裝置,若所述原數據為原APK中的classes.dex文件中的數據,所述原數據提取模塊還用於獲取加密數據所對應的原數據的原位置信息;

所述APK動態加載模塊包括:

完整dex獲取單元,用於根據所述原數據的原始位置信息,將所述原數據放回到第三classes.dex文件中的對應位置,得到目標APK的完整classes.dex文件;

dex動態加載單元,用於通過dex類加載器對目標APK的完整classes.dex文件的進行動態加載。

優選的,如上所述的動態加載裝置,所述dex動態加載單元還包括:

原數據刪除子單元,用於在所述完整classes.dex文件中的原數據被加載到內存空間中後,刪除所述完整classes.dex文件中的所述原數據。

本發明的有益效果在於:本發明實施例中所提供的APK的加固方法和裝置、及動態加載方法和裝置,通過將運行APK所不可或缺的原數據加密處理後,隱藏存儲於目標APK文件中的預設位置中,在APK運行時,根據加密數據的文件在目標APK中的存儲位置,找到所述預設位置處的加密數據,以完成APK的整個動態加載運行過程,採用本發明實施例中所提供的方法和裝置,提高了加密數據的存儲隱蔽性,增加了反編譯的難度,極大程度地提高了APK文件的安全性。在本發明的另一實施例中,加載運行本實施例提供的加固方法生成目標APK時,若原數據被被加載到內存中,則還可以在加載完成後,刪除所述原數據,進一步避免了原數據被竊取,提高了APK反編譯難度。

附圖說明

為了更清楚地說明本發明實施例或現有技術中的技術方案,下面將對實施例或現有技術描述中所需要使用的附圖作簡單地介紹,顯而易見地,下面描述中的附圖僅僅是本發明的一些實施例,附圖僅限於示出優選實施方式的目的,而並不認為是本發明的限制,且對於本領域普通技術人員來講,在不付出創造性勞動的前提下,還可以根據這些附圖獲得其他的附圖。

圖1為本發明一個實施例中的一種APK文件的加固方法的流程示意圖;

圖2為本發明一個實施例中的原APK的dex文件的結構示意圖;

圖3為本發明的一個實施例中的目標APK的dex文件的結構示意圖;

圖4為本發明的一個實施例中的一種APK文件的加固裝置的結構示意圖;

圖5為本發明的一個實施例中的目標APK生成模塊的結構示意圖;

圖6為本發明的一個實施例中的目標APK生成模塊的結構示意圖;

圖7為本發明的一個實施例中的一種加固APK的動態加載方法的流程示意圖;

圖8為本發明的一個實施例中的一種加固APK的動態加載裝置的結構示意圖;

圖9為本發明的一個實施例中的APK動態加載模塊的結構示意圖;

圖10為本發明的一個實施例中的APK動態加載模塊的結構示意圖。

具體實施方式

下面將結合本發明實施例中的附圖,對本發明實施例中的技術方案進行清楚、完整地描述,顯然,所描述的實施例僅僅是本發明一部分實施例,而不是全部的實施例。基於本發明的實施例,本領域普通技術人員在沒有做出創造性勞動前提下所獲得的所有其他實施例,均屬於本發明保護的範圍。

圖1示出了本發明的一個實施例中提供的一種APK文件的加固方法的流程示意圖,由圖中可以看出,該方法主要可以包括以下幾個步驟:

步驟S110:獲取待加固的原APK中需要保護的原數據;

步驟S120:將所述原數據進行加密處理,得到加密數據;

步驟S130:對所述原APK進行加固處理,生成目標APK,所述加密數據以文件形式存儲於所述目標APK的預設位置。

為了描述方便,本發明的實施例中,將待加固的APK記為原APK,對原APK進行加固處理後生成的APK記為目標APK。

本實施例中所提供的所述加固方法,首先確定需要進行保護的原數據,所述原數據指的是對APK運行來說不可或缺的數據,也就是反編譯APK時所必不可少的數據。具體選擇哪些數據作為原數據,可以根據實際需要確定,可以是與原APK的classes.dex文件有關的數據,也可以是與原APK的classes.dex文件無關的數據。例如,在實際操作中,開發者人員可以通過註解來標識出希望得到保護的內容,在進行APK加固時,即可以根據註解來確定原始APK中需要保護的數據。

確定好需要保護的原數據後,通過對原APK進行反編譯處理,提取出原數據。將原數據進行加密處理,得到加密數據時,可以根據需要選擇任意的一種加密方式。得到加密數據後,根據加密數據,對原APK文件進行加固處理,得到目標APK,使加密數據最終以文件形式存儲於所述目標APK的預設位置。

本實施例所提供的加固方法,通過將運行APK必不可少的文件加密存儲與目標APK的預設位置中,提高了加密數據的存儲隱蔽性,增加了反編譯的難度,提高了APK文件的安全性。

在本發明的一個實施例中,所述預設位置為目標APK的classes.dex文件中的位置。

在本發明的一個實施例中,所述預設位置為目標APK的classes.dex文件的文件頭header和/或數據區的N個指定位置,N≥1。

也就是說,最終在目標APK的classes.dex文件中存在的加密數據可以是一個或者多個,指定位置的個數N由加密數據的個數決定,具體選取幾個以及哪些位置可以根據實際需要來確定。

在本發明的一個實施例中,所述N=1,此時,所述指定位置可以為目標APK的classes.dex文件的數據區的頭部,也就是目標APK的classes.dex文件的文件頭header的尾部。

在本發明的一個實施例中,所述N=2,即所述指定位置包括第一指定位置和第二指定位置,此時,所述加密數據包括第一加密數據和第二加密數據,第一加密數據在目標APK的classes.dex文件中的位置為所述第一指定位置,第二加密數據在目標APK的classes.dex文件中的位置為所述第二指定位置。第一指定位置和第二指定位置均可以根據實際需要確定。

在本發明的一個實施例中,所述第一指定位置為所述數據區的頭部,所述第二指定位置為所述數據區的尾部。

其中,所述第一加密數據和第二加密數據,可以是分別對原APK中需要保護的兩部分數據分別進行加密處理得到,即所確定的需要原數據包括第一原數據和第二原數據;也可以是對APK中的所有需要保護的原數據進行加密處理後得到的加密數據進行再處理得到,即第一加密數據和第二加密數據可以是直接對原數據加密後得到,也可以對加密數據進行再處理得到,具體如何處理可以根據實際需要設置。同樣的,也可以是所述加密數據也可以多個,此時指定位置也對應為多個。

在本發明的一個實施例中,所述原數據為原APK中的非classes.dex文件中的數據,即原數據與原APK的dex文件中的數據無關,例如,原數據可以是原APK的程序全局配置文件AndroidManifest.xml中APK運行時不可或缺的數據、或者數據連接庫目錄lib中運行運行時不可或缺的數據,也可以是在APK運行時所需要用到的一些秘鑰信息或者其它與與APK的應用程式運行有關的數據。

當所述原數據為原APK中的非classes.dex文件中的數據時,步驟S130中,所述對所述原APK進行加固處理,生成目標APK,包括:

根據加密數據在目標APK中的所述預設位置,將加密數據添加到原APK中的對應位置;

將添加後的原APK中除所述原數據之外的其它文件進行重新打包籤名,生成目標APK。

在本發明的一個實施例中,若所述預設位置為目標APK的classes.dex文件中的位置,則所述將添加後的原APK中除所述原數據之外的其它文件進行重新打包籤名,生成目標APK,包括:

重新計算並更新添加加密數據後的原APK的classes.dex文件的文件頭信息,得到更新後的第一classes.dex文件;

將第一classes.dex文件和原APK的除所述原數據之外的其它文件進行重新打包籤名,生成目標APK。

本實施例中,由於原數據是與原APK的classes.dex無關的數據,因此,加密數據在目標APK的classes.dex文件中的位置與原APK的classes.dex文件中是相對應的,在將加密數據添加到原APK的classes.dex文件後,對於添加加密數據後的classes.dex文件,只需要再重新計算並更新其文件頭信息,然後將得到的新的classes.dex文件替換原APK的原dex文件,並與原APK的除原數據外的其它文件重新打包籤名,生成目標APK即可。

其中,所需要重新計算並更新的文件頭信息與加密數據存儲在的目標APK的位置有關,例如,若加密數據以文件存儲在目標APK的dex文件的文件頭header的尾部,此時若加密數據文件作為文件頭的一部分,則需要更新的文件頭信息包括dex文件的總長度filesize和文件頭大小headersize,若此時加密數據文件作為數據區的一部分,則需要更新的文件頭中的信息則包括dex文件的總長度filesize以及文件頭中各偏移地址off欄位的信息等;若加密數據以文件存於dex文件的數據區的尾部,則需要更新的文件頭中的信息則包括dex文件的總長度filesize。採用本實施例中的加固方法生成的目標APK,其classes.dex文件即所述的第一classes.dex文件。

例如,在本發明的一個實施例中,圖2示出了一個原APK的classes.dex文件的結構示意圖,包括文件頭header和數據區(省略號部分)兩大部分,原APK的classes.dex文件的總長度為fileSize,文件頭大小為headerSize,假設預設位置即加密數據在目標APK中的存儲位置為目標APK的classes.dex文件的文件頭header的尾部(圖中data size/off位置之後),則目標APK的classes.dex文件的結構示意圖如圖3中所示,其中,extra data即為加密數據,加密數據位於目標APK的classes.dex文件的文件頭header的尾部,該位置與原APK的classes.dex文件中的位置是相同的,此時,更新後的文件頭header中的dex文件的總長度為原APK的fileSize+extraSize(加密數據的長度),文件頭大小為headerSize+extraSize,將更新後的dex文件替換原APK的原dex文件,與原APK中的除原數據外的其它文件進行重新打包籤名,完成目標APK的生成。

需要說明的是,圖2和圖3中的英文欄位信息均為安卓dex文件的常用信息,對本領域技術人員來說是清楚的,在此不再一一說明。

在本發明的一個實施例中,所述原數據為原APK的classes.dex文件中的數據,此時,步驟S130中,所述對所述原APK進行加固處理,生成目標APK,包括:

記錄原數據在原APK的classes.dex文件中的原位置信息;

根據加密數據在目標APK中的所述預設位置,將加密數據和所述原位置信息添加到原APK中的的對應位置;

刪除原APK的classes.dex文件中的所述原數據,得到第二classes.dex文件;

重新計算並更新第二classes.dex文件的文件頭信息,得到第三classes.dex文件;

將第三classes.dex文件和原APK的除其classes.dex文件外的其它文件進行重新打包籤名,生成目標APK。

本實施例中,由於原數據是dex文件中的數據,為了保證後續APK文件能夠正常加載運行,在加載運行時需要首先還原出完成的dex文件,因此,需要記錄原數據的原位置信息。採用本實施例中所提供的加固方法生成的目標APK,其classes.dex文件即所述第三classes.dex文件。

本實施例中,對於圖2中所示的一個原APK的dex文件的示意圖中,需要保護的數據即原數據是其中的一部分數據,具體是哪部份數據,可以根據需要選定,可以是文件頭header中的數據和/或圖2中未示出的數據區中的數據。例如,假設所述原數據為圖2中的dex文件的整個數據區中的數據(省略號部分的數據,原APK的classes.dex文件中的功能代碼),將該部分數據加密後,假設確定的加密數據的位置為目標APK的classes.dex文件的數據區的頭部即文件頭header的尾部,則將加密數據及其對應的原數據的原始位置信息添加到圖2中所示的datasize/off位置的下方,並刪除原APK的dex文件中的數據區,更新修改後的dex文件的文件頭信息,然後將更新後的dex文件替換原APK的原dex,與原APK的除dex文件之外的其它部分進行重新籤名打包,得到目標APK,在運行APK時,則首先在dex文件的數據區頭部即datasize/off的下方提取加密數據,然後解密得到數據區的數據,並根據原位置信息添加到數據區位置,得到完整的dex文件。

本發明實施例中所提供的APK的加固方法,通過將運行APK所不可或缺的原數據進行加密處理後,將加密數據隱藏存儲於目標APK文件中的指定位置中,在APK運行時,首先在目標APK中的所述指定位置處找到加密數據,以完成APK的整個加載運行過程。採用該加固方法,提高了加密數據的存儲隱蔽性,增加了反編譯的難度,極大程度地提高了APK文件的安全性。

在本發明的一個實施例中,還提供了一種APK文件的加固裝置,如圖4所示,所述加固裝置包括加密數據生成模塊110和目標APK生成模塊120。其中:

加密數據生成模塊110,用於獲取待加固的原APK中需要保護的原數據,將所述原數據進行加密處理,得到加密數據;

目標APK生成模塊120,用於對所述原APK進行加固處理,生成目標APK,其中,所述加密數據以文件形式存儲於所述目標APK的預設位置。

採用本實施例中所提供的加固裝置,能夠對Android下的APK應用程式進行加固處理,使運行APK所必須的原數據加密後以文件形式隱藏於目標APK的預設位置中,可有效規避Android逆向工具的反編譯,增加反編譯的難度,提高了目標APK的安全性。

在本發明的一個實施例中,所述預設位置可以為目標APK的classes.dex文件中的位置。

在本發明的一個實施例中,所述預設為目標APK的classes.dex文件的文件頭和/或數據區的N個指定位置,N≥1。在實際應用中,具體選擇幾個指定位置以及具體選取文件頭或數據區的什麼位置可以根據實際需要進行選定。

在本發明的一個實施例中,所述N=1,所述指定位置為所述數據區的頭部或尾部。

在本發明的一個實施例中,所述N=2,即所述指定位置包括第一指定位置和第二指定位置,對應的,所述加密數據包括第一加密數據和第二加密數據,此時,第一加密數據在目標APK的classes.dex文件中的位置為所述第一指定位置,第二加密數據在目標APK的classes.dex文件中的位置為所述第二指定位置。

在本發明的一個實施例中,所述第一指定位置為所述數據區的頭部即dex文件的文件頭header的尾部,所述第二指定位置為所述數據區的尾部。

在本發明的一個實施例中,所述原數據可以為原APK的非classes.dex文件中的數據。此時,所述目標APK生成模塊120可以包括第一加密數據插入單元121和第一目標APK生成單元122,如圖5所示。其中:

第一加密數據插入單元121,根據加密數據在目標APK中的所述預設位置,將加密數據添加到原APK中的對應位置;

第一目標APK生成單元122,用於將添加後的原APK中除所述原數據之外的其它文件進行重新打包籤名,生成目標APK。

在本發明的一個實施例中,若所述預設位置為目標APK的classes.dex文件中的位置,所述第一目標APK生成單元122包括目標dex生成子單元和目標APK生成子單元。其中:

目標dex生成子單元,用於重新計算並更新添加加密數據後的原APK的classes.dex文件的文件頭信息,得到更新後的第一classes.dex文件;

目標APK生成子單元,用於將第一classes.dex文件和原APK的除所述原數據之外的其它文件進行重新打包籤名,生成目標APK。

在本發明的一個實施例中,所述原數據可以為原APK的classes.dex文件中的數據;此時,所述目標APK生成模塊120包括原位置記錄單元123、第二加密數據插入單元124、原數據刪除單元125、目標dex生成單元126和第二目標APK生成單元127,如圖6所示。其中:

原位置記錄單元123,用於記錄原數據在原APK的classes.dex文件中的原位置信息;

第二加密數據插入單元124,用於根據加密數據在目標APK中的所述預設位置,將加密數據和所述原位置信息添加到原APK中的的對應位置;

原數據刪除單元125,用於刪除原APK的classes.dex文件中的所述原數據,得到第二classes.dex文件;

目標dex生成單元126,用於重新計算並更新第二classes.dex文件的文件頭信息,得到第三classes.dex文件;

第二目標APK生成單元127,用於將第三classes.dex文件和原APK的除其classes.dex文件外的其它文件進行重新打包籤名,生成目標APK。

在本發明的一個實施例中,還提供了一種加固APK的動態加載方法,其中,所述加固APK為採用上述任一實施例中APK的加固方法或加固裝置生成的目標APK,圖7示出了本發明的一個實施例中的一種加固APK的動態加載方法的流程圖,該動態加載方法包括以下步驟:

步驟S710:解壓所述目標APK;

步驟S720:根據加密數據在目標APK的的存儲位置,提取所述加密數據,並對加密數據進行解密得到原數據;

步驟S730:根據所述原數據和解壓後的目標APK,通過dex類加載器對目標APK的classes.dex文件的進行動態加載。

本實施例中所提供的加載方法,首先解壓目標APK,APK文件是指是zip格式的壓縮包,只是後綴名被修改後apk,因此,可以通過解壓得到APK文件的目錄文件,解壓後根據加密數據在目標APK中的存儲位置(即前文中的所述預設位置),即可提取得到所述加密數據,對加密數據進行解密處理得到對應的原數據。所述解密處理的解密方式為與加密數據生成時採用的加密方式相對應。解密得到原數據後,便可以根據原數據和解壓後的目標APK,通過Android API提供的dex類加載器DexClassLoader類完成目標APK的classes.dex文件加載運行。其中,具體的加載運行步驟根據原數據的不同而有所有不同。

在本發明的一個實施例中,若所述原數據為原APK的非classes.dex文件中的數據時,從dex中提取出加密數據,解密加密數據得到原數據後,便結合原數據和目標APK的dex文件其它數據完成APK的運行。根據原數據的不同,原數據參與APK運行的步驟也不同,例如,假設原數據為原APK的動態庫.so文件,則dex類加載器DexClassLoader類在加載dex的過程中,需要調用該原數據才能夠完成dex的加載。

在本發明的一個實施例中,若所述原數據為原APK中的classes.dex文件中的數據,所述根據加密數據在目標APK的中的存儲位置,提取所述加密數據,還包括:獲取加密數據所對應的原數據的原位置信息;此時,根據所述原數據和解壓後的目標APK,通過dex類加載器對目標APK的classes.dex文件的進行動態加載,包括:

根據所述原數據的原始位置信息,將所述原數據放回到第三classes.dex文件中的對應位置,得到目標APK的完整classes.dex文件;

通過dex類加載器對目標APK的完整classes.dex文件的進行動態加載。

由於原數據為原APK的dex文件中的數據,因此,為了保證目標APK的正常加載運行,需要首先還原出完成的dex文件,再由dex類加載器DexClassLoader類完成dex文件的加載。

在發明的一個實施例中,若所述原數據為原APK中的classes.dex文件中的數據,所述通過dex類加載器對目標APK的完整classes.dex文件的進行動態加載時,當所述完整classes.dex文件中原數據被加載到內存空間中後,刪除所述完整classes.dex文件中的所述原數據。

本實施例中,由於原數據為dex文件中的數據,因此會被加載到內存空間中,當原數據已經被加載存儲到內存空間後,通過將該原數據從完整classes.dex文件中刪除,進一步避免了dexdump等工具能夠從內存中竊取到原數據的風險。

對應於圖7中所示的動態加載方法,在本發明的一個實施例中還提供了一種加固APK的動態加載裝置,如圖8所示,該動態加載裝置包括目標APK解壓模塊810、原數據提取模塊820和APK動態加載模塊830。其中:

目標APK解壓模塊810,用於解壓所述目標APK;

原數據提取模塊820,用於根據加密數據在目標APK中的存儲位置,提取所述加密數據,並對加密數據進行解密得到原數據;

APK動態加載模塊830,用於根據所述原數據和解壓後的目標APK,通過dex類加載器對目標APK的classes.dex文件的進行動態加載。

在本發明的一個實施例中,若所述原數據為原APK中的classes.dex文件中的數據,所述原數據提取模塊820還用於獲取加密數據所對應的原數據的原位置信息;此時,所述APK動態加載模塊830包括完整dex獲取單元831和dex動態加載單元832,如圖9所示。其中:

完整dex獲取單元831,用於根據所述原數據的原始位置信息,將所述原數據放回到第三classes.dex文件中的對應位置,得到目標APK的完整classes.dex文件;

dex動態加載單元832,用於通過dex類加載器對目標APK的完整classes.dex文件的進行動態加載。

在本發明的一個實施例中,所述dex動態加載單元832還可以包括原數據刪除子單元8321,如圖10所示。其中:

所述原數據刪除子單元8321,用於在所述完整classes.dex文件中的原數據被加載到內存空間中後,刪除所述完整classes.dex文件中的所述原數據。

本發明實施例中所提供的APK文件的加固方法和裝置、以及動態加載方法和裝置,適用於眾多通用或專用的計算機系統環境和配置中,包括但不限於個人計算機、伺服器、手持設備或可攜式設備、平板型設備、基於安卓系統的電子設備等等。

需要說明的是,在本文中,諸如第一和第二等之類的關係術語僅僅用來將一個實體或者操作與另一個實體或操作區分開來,而不一定要求或者暗示這些實體或操作之間存在任何這種實際的關係或者順序。而且,術語「包括」、「包含」或者其任何其他變體意在涵蓋非排他性的包含,從而使得包括一系列要素的過程、方法、物品或者設備不僅包括那些要素,而且還包括沒有明確列出的其他要素,或者是還包括為這種過程、方法、物品或者設備所固有的要素。在沒有更多限制的情況下,由語句「包括一個……」限定的要素,並不排除在包括所述要素的過程、方法、物品或者設備中還存在另外的相同要素。

本說明書中的各個實施例均採用相關的方式描述,各個實施例之間相同相似的部分互相參見即可,每個實施例重點說明的都是與其他實施例的不同之處。尤其,對於裝置實施例而言,由於其基本相似於方法實施例,所以描述的比較簡單,相關之處參見方法實施例的部分說明即可。

本領域普通技術人員可以理解實現上述裝置實施方式中各部分的全部或部分可以以硬體實現,或者以在一個或多個硬體上運行的軟體模塊來實現,方法實施方式中的全部或部分步驟是可以通過程序來指令相關的硬體來完成。本領域技術人員應該明白,本發明所述的方法和裝置並不限於具體實施方式中所述的實施例,上面的具體描述只是為了解釋本發明的目的,並非用於限制本發明。本領域技術人員根據本發明的技術方案得出其他的實施方式,同樣屬於本發明的技術創新範圍,本發明的保護範圍由權利要求及其等同物限定。

本發明的實施例公開了:A1、一種APK文件的加固方法,該方法包括:

獲取待加固的原APK中需要保護的原數據;

將所述原數據進行加密處理,得到加密數據;

對所述原APK進行加固處理,生成目標APK,其中,所述加密數據以文件形式存儲於所述目標APK的預設位置。

A2、根據A1所述的加固方法,所述預設位置為目標APK的classes.dex文件中的位置。

A3、根據A2所述的加固方法,所述預設位置為目標APK的classes.dex文件的文件頭和/或數據區的N個指定位置,N≥1。

A4、根據A3所述的加固方法,所述N=1,所述指定位置為所述數據區的頭部或尾部。

A5、根據A3所述的加固方法,所述N=2;所述加密數據包括第一加密數據和第二加密數據;

所述指定位置包括第一指定位置和第二指定位置,第一加密數據在目標APK的classes.dex文件中的位置為所述第一指定位置,第二加密數據在目標APK的classes.dex文件中的位置為所述第二指定位置。

A6、根據A5所述的加固方法,所述第一指定位置為所述數據區的頭部,所述第二指定位置為所述數據區的尾部

A7、根據A1所述的加固方法,所述原數據為原APK中的非classes.dex文件中的數據;

所述對所述原APK進行加固處理,生成目標APK,包括:

根據加密數據在目標APK中的所述預設位置,將加密數據添加到原APK中的對應位置;

將添加後的原APK中除所述原數據之外的其它文件進行重新打包籤名,生成目標APK。

A8、根據A7所述的加固方法,若所述預設位置為目標APK的classes.dex文件中的位置,所述將添加後的原APK中除所述原數據之外的其它文件進行重新打包籤名,生成目標APK,包括:

重新計算並更新添加加密數據後的原APK的classes.dex文件的文件頭信息,得到更新後的第一classes.dex文件;

將第一classes.dex文件和原APK的除所述原數據之外的其它文件進行重新打包籤名,生成目標APK。

A9、根據A1所述的加固方法,所述原數據為原APK的classes.dex文件中的數據;

所述對所述原APK進行加固處理,生成目標APK,包括:

記錄原數據在原APK的classes.dex文件中的原位置信息;

根據加密數據在目標APK中的所述預設位置,將加密數據和所述原位置信息添加到原APK中的的對應位置;

刪除原APK的classes.dex文件中的所述原數據,得到第二classes.dex文件;

重新計算並更新第二classes.dex文件的文件頭信息,得到第三classes.dex文件;

將第三classes.dex文件和原APK的除其classes.dex文件外的其它文件進行重新打包籤名,生成目標APK。

本發明的實施例中公開了:B10、一種APK文件的加固裝置,包括:

加密數據生成模塊,用於獲取待加固的原APK中需要保護的原數據,將所述原數據進行加密處理,得到加密數據;

目標APK生成模塊,用於對所述原APK進行加固處理,生成目標APK,其中,所述加密數據以文件形式存儲於所述目標APK的預設位置。

B11、根據B10所述的加固裝置,所述預設位置為目標APK的classes.dex文件中的位置。

B12、根據B11所述的加固裝置,所述預設位置為目標APK的classes.dex文件的文件頭和/或數據區的N個指定位置,N≥1。

B13、根據B12所述的加固裝置,所述N=1,所述指定位置為所述數據區的頭部或尾部。

B14、根據B12所述的加固裝置,所述N=2;所述加密數據包括第一加密數據和第二加密數據;

所述指定位置包括第一指定位置和第二指定位置,第一加密數據在目標APK的classes.dex文件中的位置為所述第一指定位置,第二加密數據在目標APK的classes.dex文件中的位置為所述第二指定位置。

B15、根據B14所述的加固裝置,所述第一指定位置為所述數據區的頭部,所述第二指定位置為所述數據區的尾部。

B16、根據10所述的加固裝置,所述原數據為原APK中的非classes.dex文件中的數據;

所述目標APK生成模塊包括:

第一加密數據插入單元,用於根據加密數據在目標APK中的所述預設位置,將加密數據添加到原APK中的對應位置;

第一目標APK生成單元,用於將添加後的原APK中除所述原數據之外的其它文件進行重新打包籤名,生成目標APK。

B17、根據B16所述的加固裝置,若所述預設位置為目標APK的classes.dex文件中的位置,所述第一目標APK生成單元包括:

目標dex生成子單元,用於重新計算並更新添加加密數據後的原APK的classes.dex文件的文件頭信息,得到更新後的第一classes.dex文件;

目標APK生成子單元,用於將第一classes.dex文件和原APK的除所述原數據之外的其它文件進行重新打包籤名,生成目標APK。

B18、根據B10所述的加固裝置,所述原數據為原APK的classes.dex文件中的數據;

所述目標APK生成模塊包括:

原位置記錄單元,用於記錄原數據在原APK的classes.dex文件中的原位置信息;

第二加密數據插入單元,用於根據加密數據在目標APK中的所述預設位置,將加密數據和所述原位置信息添加到原APK中的的對應位置;

原數據刪除單元,用於刪除原APK的classes.dex文件中的所述原數據,得到第二classes.dex文件;

目標dex生成單元,用於重新計算並更新第二classes.dex文件的文件頭信息,得到第三classes.dex文件;

第二目標APK生成單元,用於將第三classes.dex文件和原APK的除其classes.dex文件外的其它文件進行重新打包籤名,生成目標APK。

本發明的實施例中公開了:C19、一種加固APK的動態加載方法,所述加固APK為採用A1-A9中任一APK文件的加固方法生成的目標APK,所述動態加載方法包括:

解壓所述目標APK;

根據加密數據在目標APK的存儲位置,提取所述加密數據,並對加密數據進行解密得到原數據;

根據所述原數據和解壓後的目標APK,通過dex類加載器對目標APK的classes.dex文件的進行動態加載。

C20、根據C19所述的動態加載方法,若所述原數據為原APK中的classes.dex文件中的數據,所述根據加密數據在目標APK的存儲位置,提取所述加密數據,還包括:獲取加密數據所對應的原數據的原位置信息;

所述根據所述原數據和解壓後的目標APK,通過dex類加載器對目標APK的classes.dex文件的進行動態加載,包括:

根據所述原數據的原始位置信息,將所述原數據放回到第三classes.dex文件中的對應位置,得到目標APK的完整classes.dex文件;

通過dex類加載器對目標APK的完整classes.dex文件的進行動態加載。

C21、根據C20所述的動態加載方法,所述通過dex類加載器對目標APK的完整classes.dex文件的進行動態加載,包括:

所述完整classes.dex文件中的原數據被加載到內存空間中後,刪除所述完整classes.dex文件中的所述原數據

本發明的實施例中公開了:D22、一種加固APK的動態加載裝置,包括:

目標APK解壓模塊,用於解壓所述目標APK;

原數據提取模塊,用於根據加密數據在目標APK中的存儲位置,提取所述加密數據,並對加密數據進行解密得到原數據;

APK動態加載模塊,用於根據所述原數據和解壓後的目標APK,通過dex類加載器對目標APK的classes.dex文件的進行動態加載。

D23、根據D22所述的動態加載裝置,若所述原數據為原APK中的classes.dex文件中的數據,所述原數據提取模塊還用於獲取加密數據所對應的原數據的原位置信息;

所述APK動態加載模塊包括:

完整dex獲取單元,用於根據所述原數據的原始位置信息,將所述原數據放回到第三classes.dex文件中的對應位置,得到目標APK的完整classes.dex文件;

dex動態加載單元,用於通過dex類加載器對目標APK的完整classes.dex文件的進行動態加載。

D24、根據D23所述的動態加載裝置,所述dex動態加載單元包括:

原數據刪除子單元,用於在所述完整classes.dex文件中的原數據被加載到內存空間中後,刪除所述完整classes.dex文件中的所述原數據。

顯然,本領域的技術人員可以對本發明進行各種改動和變型而不脫離本發明的精神和範圍。這樣,倘若本發明的這些修改和變型屬於本發明權利要求及其同等技術的範圍之內,則本發明也意圖包含這些改動和變型在內。

同类文章

一種新型多功能組合攝影箱的製作方法

一種新型多功能組合攝影箱的製作方法【專利摘要】本實用新型公開了一種新型多功能組合攝影箱,包括敞開式箱體和前攝影蓋,在箱體頂部設有移動式光源盒,在箱體底部設有LED脫影板,LED脫影板放置在底板上;移動式光源盒包括上蓋,上蓋內設有光源,上蓋部設有磨沙透光片,磨沙透光片將光源封閉在上蓋內;所述LED脫影

壓縮模式圖樣重疊檢測方法與裝置與流程

本發明涉及通信領域,特別涉及一種壓縮模式圖樣重疊檢測方法與裝置。背景技術:在寬帶碼分多址(WCDMA,WidebandCodeDivisionMultipleAccess)系統頻分復用(FDD,FrequencyDivisionDuplex)模式下,為了進行異頻硬切換、FDD到時分復用(TDD,Ti

個性化檯曆的製作方法

專利名稱::個性化檯曆的製作方法技術領域::本實用新型涉及一種檯曆,尤其涉及一種既顯示月曆、又能插入照片的個性化檯曆,屬於生活文化藝術用品領域。背景技術::公知的立式檯曆每頁皆由月曆和畫面兩部分構成,這兩部分都是事先印刷好,固定而不能更換的。畫面或為風景,或為模特、明星。功能單一局限性較大。特別是畫

一種實現縮放的視頻解碼方法

專利名稱:一種實現縮放的視頻解碼方法技術領域:本發明涉及視頻信號處理領域,特別是一種實現縮放的視頻解碼方法。背景技術: Mpeg標準是由運動圖像專家組(Moving Picture Expert Group,MPEG)開發的用於視頻和音頻壓縮的一系列演進的標準。按照Mpeg標準,視頻圖像壓縮編碼後包

基於加熱模壓的纖維增強PBT複合材料成型工藝的製作方法

本發明涉及一種基於加熱模壓的纖維增強pbt複合材料成型工藝。背景技術:熱塑性複合材料與傳統熱固性複合材料相比其具有較好的韌性和抗衝擊性能,此外其還具有可回收利用等優點。熱塑性塑料在液態時流動能力差,使得其與纖維結合浸潤困難。環狀對苯二甲酸丁二醇酯(cbt)是一種環狀預聚物,該材料力學性能差不適合做纖

一種pe滾塑儲槽的製作方法

專利名稱:一種pe滾塑儲槽的製作方法技術領域:一種PE滾塑儲槽一、 技術領域 本實用新型涉及一種PE滾塑儲槽,主要用於化工、染料、醫藥、農藥、冶金、稀土、機械、電子、電力、環保、紡織、釀造、釀造、食品、給水、排水等行業儲存液體使用。二、 背景技術 目前,化工液體耐腐蝕貯運設備,普遍使用傳統的玻璃鋼容

釘的製作方法

專利名稱:釘的製作方法技術領域:本實用新型涉及一種釘,尤其涉及一種可提供方便拔除的鐵(鋼)釘。背景技術:考慮到廢木材回收後再加工利用作業的方便性與安全性,根據環保規定,廢木材的回收是必須將釘於廢木材上的鐵(鋼)釘拔除。如圖1、圖2所示,目前用以釘入木材的鐵(鋼)釘10主要是在一釘體11的一端形成一尖

直流氧噴裝置的製作方法

專利名稱:直流氧噴裝置的製作方法技術領域:本實用新型涉及ー種醫療器械,具體地說是ー種直流氧噴裝置。背景技術:臨床上的放療過程極易造成患者的局部皮膚損傷和炎症,被稱為「放射性皮炎」。目前對於放射性皮炎的主要治療措施是塗抹藥膏,而放射性皮炎患者多伴有局部疼痛,對於止痛,多是通過ロ服或靜脈注射進行止痛治療

新型熱網閥門操作手輪的製作方法

專利名稱:新型熱網閥門操作手輪的製作方法技術領域:新型熱網閥門操作手輪技術領域:本實用新型涉及一種新型熱網閥門操作手輪,屬於機械領域。背景技術::閥門作為流體控制裝置應用廣泛,手輪傳動的閥門使用比例佔90%以上。國家標準中提及手輪所起作用為傳動功能,不作為閥門的運輸、起吊裝置,不承受軸向力。現有閥門

用來自動讀取管狀容器所載識別碼的裝置的製作方法

專利名稱:用來自動讀取管狀容器所載識別碼的裝置的製作方法背景技術:1-本發明所屬領域本發明涉及一種用來自動讀取管狀容器所載識別碼的裝置,其中的管狀容器被放在循環於配送鏈上的文檔匣或託架裝置中。本發明特別適用於,然而並非僅僅專用於,對引入自動分析系統的血液樣本試管之類的自動識別。本發明還涉及專為實現讀