呂苗苗
基于JAVA的安卓應用代碼混淆技術研究
呂苗苗
江蘇醫藥職業學院醫學技術學院, 江蘇 鹽城 224005
隨著安卓應用軟件的使用量不斷增加,關于安卓應用安全保護問題也越來越突出。本文在分析安卓軟件攻擊的基礎上,提出一種基于JAVA的安卓應用代碼混淆技術,旨在提高安卓應用代碼的隱蔽性,進而使安卓應用得到更有效的保護。該技術包括對安卓應用代碼的抽離、映射、注冊以及解釋執行等步驟。然后通過實驗分析,以驗證該技術的有效性及相關性能。結果表明:該技術有較強的有效性,能夠更好地保護安卓應用,但是在性能方面,無論是APK文件包大小還是內存消耗量,都有比較明顯的增加,因此在技術推廣中需要考慮性能方面的影響。
JAVA; 安卓應用代碼; 混淆技術
安卓是目前應用最廣泛的移動終端系統,基于安卓平臺的各種軟件應用數不勝數,在給手機用戶帶來便捷體驗的同時,安全問題也不斷涌現,極大地威脅到人們的財產權和隱私權。安卓系統有著很強的開放性,攻擊者可以隨時隨地獲取目標的動態行為數據,探測用戶的隱私[1]。由于安卓軟件基本上都是通過JAVA代碼構建的,采用DEX格式的編譯形成可執行文件,在APK文件包中直接打包,方便用戶的操作使用,但也給攻擊者留下漏洞。攻擊者可以逆向編譯JAVA代碼,將可執行文件重新修改和打包,形成惡意代碼的注入,若手機用戶中木馬,很有可能造成財產損失[2]。據相關統計,在惡意應用中有80%以上屬于修改JAVA代碼重新打包型[3]。針對這種現狀,本文提出一種基于JAVA的安卓應用代碼混淆技術,通過抽離和映射代碼,達到代碼混淆的目的,以抵御惡意攻擊。首先抽離安卓軟件中的code_item代碼,然后映射混淆抽離出的代碼,形成混淆代碼索引表,在SO中進行封裝。最后采取JNI機制注冊封裝后的代碼,生成特定的執行環境。安卓應用代碼混淆技術可以有效實現安卓應用保護,有較大的推廣價值。
在各種安卓應用軟件中,通常采用JAVA語言將操作程序編譯成DEX格式的可執行文件,該類型文件主要由code_item代碼組成。所以基于JAVA的安卓應用代碼抽離,首要步驟就是在APK文件包中的DEX文件里找出相應的code_item代碼,然后將該代碼抽離出來。在這一過程中需要分析code_item中的Dalvik字節碼,并通過運算指令和返回指令實現代碼抽離。
當安卓應用代碼抽離出來之后,下一步執行映射操作,將Dalvik字節碼進行映射混淆。按照DEX文件格式,通過映射使code_item代碼中的insns字段能夠指向Dalvik。首先按照Dalvik語法確定insns的指令操作信息,其次以操作碼映射表為依據,一步步將每一個操作碼重新映射為新操作碼,以達到映射混淆的目的,最后將這些新操作碼組成code_item代碼索引表,利用C或者C++語言編譯并在SO中封裝該索引表。
為使映射后的Dalvik字節碼能夠在安卓應用Native層中被正確執行,需要通過JAVA語言注冊該混淆代碼。首先定義解釋執行的入口類,即MethodStub類,按照JAVA下不同的返回類型,使入口方法得到不同的定義。入口參數一般是可變參數,利用JNI機制在Native層中實現解釋執行的調用。基于JAVA注冊混淆代碼之后,原code_item代碼會變更為注冊后的code_item代碼,因而在執行原code_item代碼時,并不會在安卓運行環境中動態加載,同時經過注冊的code_item代碼,也不會包含原有邏輯,從而能夠有效抵御惡意攻擊的風險。
當code_item代碼經過映射混淆之后,需要在安卓應用Native層中通過映射解釋器實施映射解釋執行操作,構建映射解釋執行環境是關鍵一步。映射解釋器主要按照操作碼映射表以及Dalvik標準解釋混淆代碼,在映射解釋執行環境中處于核心地位,如圖1所示。未使用代碼混淆技術的安卓應用會直接在ART中執行,而混淆后的安卓應用代碼,則可以使用映射解釋器以及JNI接口與安卓ART實施交互,而沒有混淆的部分代碼也可以直接在ART中執行。
通過實驗測試基于JAVA的安卓應用代碼混淆技術,測試用例包括算術運算、系統方法和自定義方法調用、JNI方法調用、Native方法等。整個實驗由安卓應用代碼混淆技術有效性驗證以及相關性能測試組成。
為驗證安卓應用代碼混淆技術的有效性,第一步采用Jadx、Jeb等JAVA的逆向編譯工具,分析抽離映射之后的混淆代碼在靜態下能否逆向發現原邏輯。其中使用Jadx逆向編譯算術運算用例,得出的結果并不能發現原邏輯。進一步測試其它用例,整個測試結果如表1所示。
表 1靜態下能否逆向發現原邏輯的測試結果

Table 1 Whether the test results of the original logic can be retrieved in static state
從實驗測試結果看,所有測試用例在靜態下都不能發現原邏輯,這是因為在DEX可執行文件中抽離映射code_item代碼之后,形成了混淆代碼,而JAVA的逆向編譯工具是以DEX可執行文件為基礎分析code_item代碼,當代碼混淆時,JAVA的逆向編譯工具就無法正確發現原邏輯,這極大地提高了安卓應用的安全性。第二步采用安卓通用脫殼工具Dexhunter分析動態下能否發現混淆代碼的原邏輯,其中算術運算用例的實驗結果如圖2所示。

圖2 動態下能否逆向發現原邏輯的測試結果
從圖2的測試結果可以看出,安卓通用脫殼工具獲得算術運算APK文件,然后利用ART加載對內存數據進行運算,但是混淆后的代碼并不會加載原始信息,因此也不能逆向發現原邏輯。其它測試用例的結果同樣如此。這說明無論在靜態和動態下,本技術都能很好地保護安卓應用。
本實驗對安卓應用代碼混淆技術的性能測試,主要從APK文件包大小測試、內存消耗測試兩個方面進行,對比代碼混淆技術使用前后的性能情況。第一步選取算術運算和自定義方法調用兩個用例進行測試,查看APK文件包大小變化,測試結果如表2所示。根據表2測試結果,使用代碼混淆技術之后,APK文件包增加20多KB,主要是因為混淆映射及解釋處理所增加的代碼量導致APK文件包變大。

表 2 安卓應用代碼混淆技術使用前后的APK文件包大小變化情況(Byte)
第二步選取算術運算和自定義方法調用兩個用例,利用adb shell命令查看安卓應用在代碼混淆技術使用前后的內存消耗情況,測試結果如表3所示。從實驗測試結果可以看出,當使用代碼混淆技術之后,安卓應用的內存增加7000多KB,主要是因為映射解釋執行時加載SO文件所消耗的內存量,還有增加保護方法所消耗的內存量。當前的智能手機內存基本在64 GB以上,因此所增加的內存消耗量并不會影響手機的正常使用。

表 3 安卓應用代碼混淆技術使用前后的內存消耗量變化情況(KB)
安卓應用軟件的廣泛使用也導致安全問題頻發,用戶的隱私與財產受到嚴重威脅,如何保護安卓應用成為國內外的一個熱門課題。Vecchiato等研究了安卓通用脫殼工具使用情況,認為以加密技術為基礎對安卓應用進行加殼保護能夠收到一定效果,該方案首先對DEX文件進行加密處理,使相關文件得到隱藏,然后通過殼程序封裝處理后的文件。在需要使用時再次通過殼程序解密,實現DEX文件的動態加載,但是在加密解密的過程中,攻擊者依然有機會利用脫殼技術得到原DEX文件[4]。Azfar等針對安卓應用DEX文件脫殼破解的問題,提出一種基于JNI機制的SO加固技術,主要使用C或C++語言在SO中封裝DEX文件,利用JNI機制實現動態加載,能夠起到較好的反編譯阻斷效果,但無法形成安卓應用的全過程保護[5]。Peisen等提出一種以LZW編碼技術為基礎的安卓應用混淆技術,通過該技術重新排列指令次序,以提高安卓應用指令的隱蔽性,但這種方法的編碼表較多,而且每一個編碼表都是獨立的,這影響到加密的工作量,該技術的安全效果與編碼表的加密強度息息相關[6]。總體來看,相關研究或多或少都存在一些缺陷,而本文的安卓應用代碼混淆技術,則從代碼方面打亂邏輯,形成安卓應用全過程保護,因此有較大的推廣價值。
隨著智能手機的普及以及安卓應用軟件的大量開發,關于安卓應用安全保護問題在國內外引起了廣泛關注。本文針對惡意攻擊的路徑原理,提出一種基于JAVA的安卓應用代碼混淆技術,旨在提高代碼的隱蔽性,防止安卓應用數據信息的原邏輯被輕易破解。首先對安卓應用代碼混淆技術的步驟過程進行介紹,然后通過實驗分析,驗證代碼混淆技術的有效性及相關性能。總體來看,該技術對安卓應用的保護效果較高,但也要考慮到性能方面的影響,尤其要注意內存消耗的影響。目前的性能影響并不大,若隨著該技術的不斷開發,會出現更多的保護方法,內存消耗的增加難以避免,因此在今后的研究中應加以重視。
[1] 繆小川,汪睿,許蕾,等.使用敏感路徑識別方法分析安卓應用安全性[J].軟件學報,2017,28(9):2248-2263
[2] Mente R, Bagadi A. Android Application Security[J]. Advances in computational sciences and technology, 2017,10(5):1207-1210
[3] Chanajitt R, Viriyasitavat W, Choo KKR.Forensic analysis and security assessment of Android m-banking apps[J]. Australian journal of forensic sciences, 2017,50(1):3-19
[4] Vecchiato D, Vieira M, Martins E.The Perils of Android Security Configuration[J].Computer, 2016,49(6):15-21
[5] Azfar A, Choo KKR, Lin L. Android mobile VoIP apps: a survey and examination of their security and privacy[J]. Electronic commerce research, 2016,16(1):73-111
[6] Yu BC, Song P, Xu XY. An android malware static detection scheme based on cloud security structure[J]. International Journal of Security and Networks, 2018,13(1):51-57
Study on Android Application Code Obfuscation Technology on Java
LV Miao-miao
224005,
With the increasing use of Android application software, the security protection of Android application is becoming more and more prominent. Based on the analysis of Android software attacks, this paper proposes a JAVA-based code obfuscation technology for Android applications, aiming at improving the concealment of Android application code and making Android applications more effectively protected. The technology includes the steps of extracting, mapping, registering and interpreting the Android application code. Then, the effectiveness and related performance of the technology are verified through experimental analysis. The results show that the technology is effective and can better protect Android applications, but in terms of performance, whether APK file package size or memory consumption, there is a significant increase, so the impact of performance needs to be considered in the promotion of technology.
JAVA; Android application code; obfuscation technology
TP309
A
1000-2324(2019)04-0671-04
2018-04-28
2018-05-30
江蘇省社會科學基金項目:大數據背景下智慧校園建設的策略與實踐研究(15JYC001)
呂苗苗(1983-),女,碩士,講師,主要研究方向為計算機技術和醫學信息技術. E-mail:277243949@qq.com