麻豆精品无码国产在线播放,国产亚洲精品成人AA片新蒲金,国模无码大尺度一区二区三区,神马免费午夜福利剧场

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

文檔序號:12669711閱讀:451來源:國知局
一種APK的加固方法和裝置,及動態加載方法和裝置與流程

本發明涉及終端應用安全技術領域,特別涉及一種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文件中的所述原數據。

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

當前第1頁1 2 3 
網友詢問留言 已有0條留言
  • 還沒有人留言評論。精彩留言會獲得點贊!
1
主站蜘蛛池模板: 静宁县| 北碚区| 济阳县| 墨脱县| 根河市| 馆陶县| 大洼县| 衢州市| 三原县| 马关县| 新蔡县| 永善县| 奉节县| 翼城县| 禄劝| 裕民县| 海丰县| 连平县| 金昌市| 凤庆县| 凤城市| 南漳县| 陈巴尔虎旗| 石渠县| 旺苍县| 桂东县| 玉林市| 家居| 凤台县| 六盘水市| 永济市| 望奎县| 郴州市| 深州市| 营口市| 英山县| 武义县| 滨海县| 保德县| 绥宁县| 玉树县|