一種APK安裝方法及裝置與流程
2023-06-03 04:49:31
本申請涉及信息安全技術領域,尤其涉及一種apk安裝方法及裝置。
背景技術:
隨著安卓作業系統(android)的快速發展,在安卓電子設備上的第三方應用(application,app)也越來越多,比如安卓手機上的app數量逐年增加。但是由於安卓作業系統自身開源的特點,也產生了眾多的軟體逆向工具,通過這些軟體逆向工具能夠對app的安裝文件,即apk(androidpackage,安卓壓縮包)進行逆向分析,從而對app的開發者和使用者造成危害。因此,如何對apk進行加固從而防止逆向分析,是本申請實施例所需要解決的技術問題。
技術實現要素:
本申請實施例提供一種apk安裝方法及裝置,能夠在apk的安裝過程中,防止目標函數被竊取,從而對apk進行加固。
本申請實施例提供了一種apk安裝方法,該方法包括:
接收apk安裝請求;
將apk的so文件加載至內存,其中所述so文件中包括解密密鑰以及目標函數已加密的代碼;
當接收到執行所述目標函數的指令時,獲取所述so文件中的解密密鑰,並通過所述解密密鑰對所述已加密的代碼進行解密;
根據解密後的代碼執行所述目標函數,用於安裝所述apk。
優選地,所述方法還包括:
當所述目標函數執行結束後,刪除所述解密後的代碼。
優選地,已加密的代碼具體為已通過對稱加密算法進行加密的代碼;
通過所述解密密鑰對所述已加密的代碼進行解密,具體包括:
通過所述對稱加密算法的逆算法以及所述解密密鑰,對已通過對所述稱加密算法進行加密的代碼進行解密。
優選地,在接收apk安裝請求之前,所述方法還包括:
將所述目標函數加密前的代碼通過對稱加密算法進行加密並生成所述解密密鑰;
將所述解密密鑰保存在所述so文件datasection數據段中;
根據所述so文件生成所述apk。
優選地,生成所述解密密鑰,具體包括:根據所述apk所對應的app的唯一標識生成所述解密密鑰,所述唯一標識用於唯一表示所述app。
本申請實施例還提供了一種apk安裝裝置,該裝置包括:接收單元、加載單元、解密單元以及執行單元,其中:
接收單元,用於接收apk安裝請求;
加載單元,用於將apk的so文件加載至內存,其中所述so文件中包括解密密鑰以及目標函數已加密的代碼;
解密單元,用於當接收到執行所述目標函數的指令時,獲取所述so文件中的解密密鑰,並通過所述解密密鑰對所述已加密的代碼進行解密;
執行單元,用於根據解密後的代碼執行所述目標函數,用於安裝所述apk。
優選地,所述裝置還包括刪除單元,當所述目標函數執行結束後,刪除所述解密後的代碼。
優選地,已加密的代碼具體為已通過對稱加密算法進行加密的代碼;
通過所述解密密鑰對所述已加密的代碼進行解密,具體包括:
通過所述對稱加密算法的逆算法以及所述解密密鑰,對已通過對所述稱加密算法進行加密的代碼進行解密。
優選地,在接收單元之前,所述裝置還包括:生成單元,用於將所述目標函數加密前的代碼通過對稱加密算法進行加密並生成所述解密密鑰,將所述解密密鑰保存在所述so文件datasection數據段中,根據所述so文件生成所述apk。
優選地,生成所述解密密鑰,具體包括:根據所述apk所對應的app的唯一標識生成所述解密密鑰,所述唯一標識用於唯一表示所述app。
本申請實施例採用的上述至少一個技術方案能夠達到以下有益效果:
採用本申請實施例所提供的apk安裝方法,接收apk安裝請求之後,將apk的so文件加載至內存,由於該so文件中包括目標函數已加密的代碼,即目標函數的原始代碼已被加密,從而能夠防止非法逆向分析者竊取原始代碼,因此能夠對apk進行加固;另外,還將解密密鑰保存在so文件中,這樣在apk安裝的過程中,一方面由於從運行效率更高的so文件中獲取解密密鑰,使得安裝速度相對更快,另一方面由於so文件通過c++/c語言編輯,難以進行反編譯,因此能夠進一步對apk進行加固,在apk安裝過程中更加不易於被非法逆向分析者進行逆向分析。
附圖說明
此處所說明的附圖用來提供對本申請的進一步理解,構成本申請的一部分,本申請的示意性實施例及其說明用於解釋本申請,並不構成對本申請的不當限定。在附圖中:
圖1為本申請實施例提供的apk安裝方法的具體實現流程示意圖;
圖2為本申請實施例提供的apk生成方法的具體實現流程示意圖;
圖3為本申請實施例提供的apk安裝裝置的具體結構示意圖。
具體實施方式
為使本申請的目的、技術方案和優點更加清楚,下面將結合本申請具體實施例及相應的附圖對本申請技術方案進行清楚、完整地描述。顯然,所描述的實施例僅是本申請一部分實施例,而不是全部的實施例。基於本申請中的實施例,本領域普通技術人員在沒有做出創造性勞動前提下所獲得的所有其他實施例,都屬於本申請保護的範圍。
以下結合附圖,詳細說明本申請各實施例提供的技術方案。
在apk中通常會包括so(shareobject,共享對象)文件,由於so文件採用二進位,沒有額外的解釋編譯過程,在運行時速度更快。因此在app開發過程中,通常會將apk中的部分核心代碼放到so文件中,從而加快apk的安裝速度。本申請通過apk中的so文件來對該apk進行加固。
本申請實施例提供了一種apk安裝方法。該方法的具體流程示意圖如圖1所示,包括下述步驟:
步驟s11:接收apk安裝請求。
該安裝請求用於請求安卓作業系統運行並安裝apk,從而最終安裝於該apk相對應的app。
在實際應用中,當用戶需要在諸如手機、平板電腦上安裝第三方應用時,可以觸控第三方應用的apk,通過安裝該apk來實現第三方應用的安裝。當用戶觸控第三方應用的apk之後,這些電子設備上的安卓作業系統能夠接收到apk安裝請求。
比如,用戶觸控手機「qq」所對應的apk之後,手機上的安卓作業系統會接收到該apk的安裝請求,運行該apk從而最終實現手機「qq」的安裝。
步驟s12:將apk中的so文件加載至內存,其中所述so文件中包括目標函數已加密的代碼以及解密密鑰。
這裡的so文件位於該apk中。apk中通常會包括classes.dex、so文件、androidmanifest.xml等,其中so文件採用c++/c語言編輯。在該so文件中包括目標函數加密後的代碼,也即目標函數已加密的代碼,這裡的目標函數通常是需要進行保護的函數,比如正常運行該apk所需要的資源函數,或者apk核心功能模塊的函數等;在實際應用中目標函數可以是一個或多個需要進行保護的函數。
在手機、平板電腦等電子設備上安裝第三方應用時,電子設備上的安卓作業系統通過運行安裝該apk從而實現第三方應用的安裝。在運行安裝apk時,需要先將apk中的classes.dex、so文件等至內存中。
在該apk的so文件中還包括解密密鑰,該解密密鑰可以用於對目標函數加密後的代碼進行解密,從而得到目標函數解密後的到代碼(也稱之為目標函數的原始代碼)。
需要說明的是,實際應用中將so文件中的目標函數的代碼進行加密得到加密後的代碼之後,為了使得該目標函數能夠順利執行,通常可以將解密密鑰保存在apk中。但apk中有諸如classes.dex、so文件等多個文件,其中,so文件之外的文件一般通過java語言編輯,而so文件通過c++/c語言編輯;因此如果將解密密鑰保存在apk的so文件之外的文件中,非法逆向分析者能夠通過逆向分析工具對保存了解密密鑰的文件進行逆向分析,從而得到相應的smali代碼,並對smali代碼進行分析最終獲取解密密鑰;而如果將解密密鑰保存在apk的so文件中,逆向分析工具對c++/c語言所編輯的代碼進行逆向分析的難度較大,並且最終也只能得到彙編語言的代碼,而相對於smali代碼,對彙編語言的代碼進行分析的難度較大,因此並不易於so文件進行逆向分析從而獲取其中的解密密鑰。在實際應用中,可以將解密密鑰保存在so文件中,從而進一步對apk進行加固,保證其安全性。
步驟s13:當接收到執行所述目標函數的指令時,獲取所述so文件中的解密密鑰,並通過所述解密密鑰對所述已加密的代碼進行解密。
步驟s14:根據解密後的代碼執行所述目標函數,用於安裝所述apk。
這裡可以對步驟s13和步驟s14進行整體性說明。
在安裝apk的過程中,函數之間通常會出現互相調用的情況,當某個函數需要調用目標函數時,可以發出執行目標函數的指令(對該目標函數的調用指令),從而執行該目標函數。安卓作業系統在接收到該指令之後,可以根據該指令從so文件中獲取解密密鑰,從而通過該解密密鑰對已加密的代碼進行解密得到解密後的代碼,即目標函數加密前的原始代碼。
安卓作業系統在得到解密後的代碼之後,可以根據該解密後的代碼執行目標函數,從而進行相應的apk的安裝。
採用本申請實施例所提供的apk安裝方法,接收apk安裝請求之後,將apk的so文件加載至內存,由於該so文件中包括目標函數已加密的代碼,即目標函數的原始代碼已被加密,從而能夠防止非法逆向分析者竊取原始代碼,因此能夠對apk進行加固;另外,還將解密密鑰保存在so文件中,這樣在apk安裝的過程中,一方面由於從運行效率更高的so文件中獲取解密密鑰,使得安裝速度相對更快,另一方面由於so文件通過c++/c語言編輯,難以進行反編譯,因此能夠進一步對apk進行加固,在apk安裝過程中更加不易於被非法逆向分析者進行逆向分析。
在實際應用中,在步驟s14根據解密後的代碼執行目標函數之後,該方法還可以包括下面的步驟s15和步驟s16
步驟s15:對目標函數的執行狀態進行監控。
通常目標函數的執行狀態可以包括未執行、執行中以及執行結束等。
安卓作業系統能夠提供相應的api(applicationprogramminginterface,應用程式編程接口),可以編輯相應的監控程序,通過這些api對某個函數或者某些函數的執行狀態進行監控。因此,可以編輯針對目標函數的監控程序,通過安卓作業系統提供的api來實現對目標函數執行狀態的監控。
另外,對目標函數的執行狀態進行監控,可以是實時監控目標函數的執行狀態,也可以是每隔一個時間周期(比如1分鐘,也可以為其它)獲取目標函數的執行狀態,也可以是其它的監控方式。對於實時監控的方式通常能夠及時獲知目標函數的執行狀態,但所消耗的計算資源較大;對於周期性獲取目標函數的執行狀態的監控方式,所消耗的計算資源相對較少,但實時性較差;因此在應用過程中,可以根據電子設備cpu的運算能力、對實時性的需求等選擇具體的監控方式,這裡就不再一一贅述。
步驟s16:當監控到目標函數執行結束時,刪除目標函數解密後的代碼。
在實際應用中,部分的逆向分析技術可以通過內存dump等技術竊取解密後的代碼,從而進行發編譯,對apk的安全造成影響。因此,當根據解密後的代碼執行目標函數,並在目標函數執行結束之後,可以刪除該解密後的代碼,防止通過內存dump等方式竊取該代碼。
在實際應用中,apk開發者可以將apk部分核心代碼中的函數分別作為目標函數,對目標函數的原始碼進行加密,並在apk的安裝過程中對目標函數執行狀態進行監控,當監控到目標函數執行結束時,將目標函數解密後的代碼進行清除,能夠進一步防止非法逆向分析者通過內存dump等方式竊取目標函數的原密碼,造成核心代碼的洩露,實現了apk的加固。特別是當需要保護的函數數量較多時,可以分別將這些函數作為目標函數,對這些函數的代碼進行加密,並在這些函數先後執行的過程中,依次清除這些函數解密後的代碼,從而使得非法逆向分析者難以從內存中獲取完整的so文件的代碼,從而難以對apk進行逆向分析。
上述步驟s12中提到,apk的so文件中包括目標函數已加密的代碼以及解密密鑰。
這裡的已加密的代碼可以是已通過對稱加密算法進行加密的代碼,比如將目標函數加密前的代碼(目標函數的原始代碼)通過對稱加密算法進行加密,然後將加密後的代碼放入so文件中。此時,so文件中包括的解密密碼,可以用於對已通過對稱加密算法進行加密的代碼進行解密,從而的得到目標函數的原始代碼。在實際應用中,該so文件通常為elf文件,因此可以將解密密碼保存在所述so文件datasection數據段中,從而提高非法獲取該解密密鑰的難度。
相應的,在步驟s13中提到的通過該解密密鑰對已加密的代碼進行解密可以是,通過該對稱加密算法的逆算法以及該解密密鑰,對已通過對該稱加密算法進行加密的代碼進行解密。
其中,上述的對稱加密算法可以是如下任意一種對稱加密算法:des(dataencryptionstandard)加密算法、3des(tripledes)加密算法、rc2加密算法、rc4加密算法、rc5加密算法或blowfish加密算法,當然,也可以是其它的對稱加密算法。
通常可以先生成apk,然後對apk進行安裝。因此在用戶觸控apk,從而使得電子設備的安卓作業系統接收安裝請求之前,還可以包括如何生成apk的步驟。如圖2所示,這些步驟如下所示:
步驟s21:將目標函數加密前的代碼通過對稱加密算法進行加密並生成解密密鑰。
這裡目標函數加密前的代碼可以是目標函數的原始代碼;
另外,在生成所述解密密鑰時,可以根據所生成的apk所對應的app的唯一標識生成該解密密鑰,其中app的唯一標識可以用於唯一表示app,通常可以是該app的名稱、版本號等。
步驟s22:將解密密鑰保存在so文件datasection數據段中;
步驟s23:根據so文件生成所述apk。
通常根據so文件生成apk時,可以先該so文件通過androidndk進行處理,然後將生成apk所需要的全部文件(包括該so文件、dex文件等)進行組包生成apk。
基於與本申請實施例所提供的apk安裝方法相同的發明構思,本申請實施例還提供了一種apk安裝裝置。如圖3所示,該裝置30包括:接收單元301、加載單元302、解密單元303以及執行單元304,其中:
接收單元301,用於接收apk安裝請求;
加載單元302,用於將apk的so文件加載至內存,其中所述so文件中包括解密密鑰以及目標函數已加密的代碼;
解密單元303,用於當接收到執行所述目標函數的指令時,獲取所述so文件中的解密密鑰,並通過所述解密密鑰對所述已加密的代碼進行解密;
執行單元304,用於根據解密後的代碼執行所述目標函數,用於安裝所述apk。
採用本申請實施例所提供的裝置30,由於該裝置30採用與本申請實施例速提供的apk安裝方法相同的發明構思,因此也能夠解決現有技術中的問題,這裡對此就不在一一贅述。
另外,所述裝置30還包括刪除單元305,當所述目標函數執行結束後,刪除所述解密後的代碼。
上述的加載單元302,所加載至內存中的so文件中包括解密密鑰以及目標函數已加密的代碼,其中該已加密的代碼可以是,已通過對稱加密算法進行加密的代碼;相應的,解密單元303通過所述解密密鑰對所述已加密的代碼進行解密,可以具體是,通過所述對稱加密算法的逆算法以及所述解密密鑰,對已通過對所述稱加密算法進行加密的代碼進行解密。
在實際應用中,該裝置30在接收單元301之前還可以包括:生成單元,用於將所述目標函數加密前的代碼通過對稱加密算法進行加密並生成所述解密密鑰,將所述解密密鑰保存在所述so文件datasection數據段中,根據所述so文件生成所述apk;其中,這裡的生成所述解密密鑰,可以具體為,根據所述apk所對應的app的唯一標識生成所述解密密鑰,所述唯一標識用於唯一表示所述app,比如app的名稱、版本號等。
本領域內的技術人員應明白,本申請的實施例可提供為方法、系統、或電腦程式產品。因此,本申請可採用完全硬體實施例、完全軟體實施例、或結合軟體和硬體方面的實施例的形式。而且,本申請可採用在一個或多個其中包含有計算機可用程序代碼的計算機可用存儲介質(包括但不限於磁碟存儲器、cd-rom、光學存儲器等)上實施的電腦程式產品的形式。
本申請是參照根據本申請實施例的方法、設備(系統)、和電腦程式產品的流程圖和/或方框圖來描述的。應理解可由電腦程式指令實現流程圖和/或方框圖中的每一流程和/或方框、以及流程圖和/或方框圖中的流程和/或方框的結合。可提供這些電腦程式指令到通用計算機、專用計算機、嵌入式處理機或其他可編程數據處理設備的處理器以產生一個機器,使得通過計算機或其他可編程數據處理設備的處理器執行的指令產生用於實現在流程圖一個流程或多個流程和/或方框圖一個方框或多個方框中指定的功能的裝置。
這些電腦程式指令也可存儲在能引導計算機或其他可編程數據處理設備以特定方式工作的計算機可讀存儲器中,使得存儲在該計算機可讀存儲器中的指令產生包括指令裝置的製造品,該指令裝置實現在流程圖一個流程或多個流程和/或方框圖一個方框或多個方框中指定的功能。
這些電腦程式指令也可裝載到計算機或其他可編程數據處理設備上,使得在計算機或其他可編程設備上執行一系列操作步驟以產生計算機實現的處理,從而在計算機或其他可編程設備上執行的指令提供用於實現在流程圖一個流程或多個流程和/或方框圖一個方框或多個方框中指定的功能的步驟。
在一個典型的配置中,計算設備包括一個或多個處理器(cpu)、輸入/輸出接口、網絡接口和內存。
內存可能包括計算機可讀介質中的非永久性存儲器,隨機存取存儲器(ram)和/或非易失性內存等形式,如只讀存儲器(rom)或快閃記憶體(flashram)。內存是計算機可讀介質的示例。
計算機可讀介質包括永久性和非永久性、可移動和非可移動媒體可以由任何方法或技術來實現信息存儲。信息可以是計算機可讀指令、數據結構、程序的模塊或其他數據。計算機的存儲介質的例子包括,但不限於相變內存(pram)、靜態隨機存取存儲器(sram)、動態隨機存取存儲器(dram)、其他類型的隨機存取存儲器(ram)、只讀存儲器(rom)、電可擦除可編程只讀存儲器(eeprom)、快閃記憶體或其他內存技術、只讀光碟只讀存儲器(cd-rom)、數字多功能光碟(dvd)或其他光學存儲、磁盒式磁帶,磁帶磁磁碟存儲或其他磁性存儲設備或任何其他非傳輸介質,可用於存儲可以被計算設備訪問的信息。按照本文中的界定,計算機可讀介質不包括暫存電腦可讀媒體(transitorymedia),如調製的數據信號和載波。
還需要說明的是,術語「包括」、「包含」或者其任何其他變體意在涵蓋非排他性的包含,從而使得包括一系列要素的過程、方法、商品或者設備不僅包括那些要素,而且還包括沒有明確列出的其他要素,或者是還包括為這種過程、方法、商品或者設備所固有的要素。在沒有更多限制的情況下,由語句「包括一個……」限定的要素,並不排除在包括要素的過程、方法、商品或者設備中還存在另外的相同要素。
本領域技術人員應明白,本申請的實施例可提供為方法、系統或電腦程式產品。因此,本申請可採用完全硬體實施例、完全軟體實施例或結合軟體和硬體方面的實施例的形式。而且,本申請可採用在一個或多個其中包含有計算機可用程序代碼的計算機可用存儲介質(包括但不限於磁碟存儲器、cd-rom、光學存儲器等)上實施的電腦程式產品的形式。
以上僅為本申請的實施例而已,並不用於限制本申請。對於本領域技術人員來說,本申請可以有各種更改和變化。凡在本申請的精神和原理之內所作的任何修改、等同替換、改進等,均應包含在本申請的權利要求範圍之內。