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