• 
    

    
    

      99热精品在线国产_美女午夜性视频免费_国产精品国产高清国产av_av欧美777_自拍偷自拍亚洲精品老妇_亚洲熟女精品中文字幕_www日本黄色视频网_国产精品野战在线观看 ?

      基于JAVA的安卓應(yīng)用代碼混淆技術(shù)研究

      2019-09-12 11:49:04呂苗苗
      關(guān)鍵詞:安卓逆向內(nèi)存

      呂苗苗

      基于JAVA的安卓應(yīng)用代碼混淆技術(shù)研究

      呂苗苗

      江蘇醫(yī)藥職業(yè)學院醫(yī)學技術(shù)學院, 江蘇 鹽城 224005

      隨著安卓應(yīng)用軟件的使用量不斷增加,關(guān)于安卓應(yīng)用安全保護問題也越來越突出。本文在分析安卓軟件攻擊的基礎(chǔ)上,提出一種基于JAVA的安卓應(yīng)用代碼混淆技術(shù),旨在提高安卓應(yīng)用代碼的隱蔽性,進而使安卓應(yīng)用得到更有效的保護。該技術(shù)包括對安卓應(yīng)用代碼的抽離、映射、注冊以及解釋執(zhí)行等步驟。然后通過實驗分析,以驗證該技術(shù)的有效性及相關(guān)性能。結(jié)果表明:該技術(shù)有較強的有效性,能夠更好地保護安卓應(yīng)用,但是在性能方面,無論是APK文件包大小還是內(nèi)存消耗量,都有比較明顯的增加,因此在技術(shù)推廣中需要考慮性能方面的影響。

      JAVA; 安卓應(yīng)用代碼; 混淆技術(shù)

      安卓是目前應(yīng)用最廣泛的移動終端系統(tǒng),基于安卓平臺的各種軟件應(yīng)用數(shù)不勝數(shù),在給手機用戶帶來便捷體驗的同時,安全問題也不斷涌現(xiàn),極大地威脅到人們的財產(chǎn)權(quán)和隱私權(quán)。安卓系統(tǒng)有著很強的開放性,攻擊者可以隨時隨地獲取目標的動態(tài)行為數(shù)據(jù),探測用戶的隱私[1]。由于安卓軟件基本上都是通過JAVA代碼構(gòu)建的,采用DEX格式的編譯形成可執(zhí)行文件,在APK文件包中直接打包,方便用戶的操作使用,但也給攻擊者留下漏洞。攻擊者可以逆向編譯JAVA代碼,將可執(zhí)行文件重新修改和打包,形成惡意代碼的注入,若手機用戶中木馬,很有可能造成財產(chǎn)損失[2]。據(jù)相關(guān)統(tǒng)計,在惡意應(yīng)用中有80%以上屬于修改JAVA代碼重新打包型[3]。針對這種現(xiàn)狀,本文提出一種基于JAVA的安卓應(yīng)用代碼混淆技術(shù),通過抽離和映射代碼,達到代碼混淆的目的,以抵御惡意攻擊。首先抽離安卓軟件中的code_item代碼,然后映射混淆抽離出的代碼,形成混淆代碼索引表,在SO中進行封裝。最后采取JNI機制注冊封裝后的代碼,生成特定的執(zhí)行環(huán)境。安卓應(yīng)用代碼混淆技術(shù)可以有效實現(xiàn)安卓應(yīng)用保護,有較大的推廣價值。

      1 安卓應(yīng)用代碼混淆技術(shù)分析

      1.1 基于JAVA的安卓應(yīng)用代碼抽離和映射

      在各種安卓應(yīng)用軟件中,通常采用JAVA語言將操作程序編譯成DEX格式的可執(zhí)行文件,該類型文件主要由code_item代碼組成。所以基于JAVA的安卓應(yīng)用代碼抽離,首要步驟就是在APK文件包中的DEX文件里找出相應(yīng)的code_item代碼,然后將該代碼抽離出來。在這一過程中需要分析code_item中的Dalvik字節(jié)碼,并通過運算指令和返回指令實現(xiàn)代碼抽離。

      當安卓應(yīng)用代碼抽離出來之后,下一步執(zhí)行映射操作,將Dalvik字節(jié)碼進行映射混淆。按照DEX文件格式,通過映射使code_item代碼中的insns字段能夠指向Dalvik。首先按照Dalvik語法確定insns的指令操作信息,其次以操作碼映射表為依據(jù),一步步將每一個操作碼重新映射為新操作碼,以達到映射混淆的目的,最后將這些新操作碼組成code_item代碼索引表,利用C或者C++語言編譯并在SO中封裝該索引表。

      1.2 基于JAVA的安卓應(yīng)用代碼注冊

      為使映射后的Dalvik字節(jié)碼能夠在安卓應(yīng)用Native層中被正確執(zhí)行,需要通過JAVA語言注冊該混淆代碼。首先定義解釋執(zhí)行的入口類,即MethodStub類,按照JAVA下不同的返回類型,使入口方法得到不同的定義。入口參數(shù)一般是可變參數(shù),利用JNI機制在Native層中實現(xiàn)解釋執(zhí)行的調(diào)用?;贘AVA注冊混淆代碼之后,原code_item代碼會變更為注冊后的code_item代碼,因而在執(zhí)行原code_item代碼時,并不會在安卓運行環(huán)境中動態(tài)加載,同時經(jīng)過注冊的code_item代碼,也不會包含原有邏輯,從而能夠有效抵御惡意攻擊的風險。

      1.3 映射解釋執(zhí)行環(huán)境的構(gòu)建

      當code_item代碼經(jīng)過映射混淆之后,需要在安卓應(yīng)用Native層中通過映射解釋器實施映射解釋執(zhí)行操作,構(gòu)建映射解釋執(zhí)行環(huán)境是關(guān)鍵一步。映射解釋器主要按照操作碼映射表以及Dalvik標準解釋混淆代碼,在映射解釋執(zhí)行環(huán)境中處于核心地位,如圖1所示。未使用代碼混淆技術(shù)的安卓應(yīng)用會直接在ART中執(zhí)行,而混淆后的安卓應(yīng)用代碼,則可以使用映射解釋器以及JNI接口與安卓ART實施交互,而沒有混淆的部分代碼也可以直接在ART中執(zhí)行。

      2 實驗與分析

      通過實驗測試基于JAVA的安卓應(yīng)用代碼混淆技術(shù),測試用例包括算術(shù)運算、系統(tǒng)方法和自定義方法調(diào)用、JNI方法調(diào)用、Native方法等。整個實驗由安卓應(yīng)用代碼混淆技術(shù)有效性驗證以及相關(guān)性能測試組成。

      2.1 安卓應(yīng)用代碼混淆技術(shù)有效性驗證

      為驗證安卓應(yīng)用代碼混淆技術(shù)的有效性,第一步采用Jadx、Jeb等JAVA的逆向編譯工具,分析抽離映射之后的混淆代碼在靜態(tài)下能否逆向發(fā)現(xiàn)原邏輯。其中使用Jadx逆向編譯算術(shù)運算用例,得出的結(jié)果并不能發(fā)現(xiàn)原邏輯。進一步測試其它用例,整個測試結(jié)果如表1所示。

      表 1靜態(tài)下能否逆向發(fā)現(xiàn)原邏輯的測試結(jié)果

      Table 1 Whether the test results of the original logic can be retrieved in static state

      從實驗測試結(jié)果看,所有測試用例在靜態(tài)下都不能發(fā)現(xiàn)原邏輯,這是因為在DEX可執(zhí)行文件中抽離映射code_item代碼之后,形成了混淆代碼,而JAVA的逆向編譯工具是以DEX可執(zhí)行文件為基礎(chǔ)分析code_item代碼,當代碼混淆時,JAVA的逆向編譯工具就無法正確發(fā)現(xiàn)原邏輯,這極大地提高了安卓應(yīng)用的安全性。第二步采用安卓通用脫殼工具Dexhunter分析動態(tài)下能否發(fā)現(xiàn)混淆代碼的原邏輯,其中算術(shù)運算用例的實驗結(jié)果如圖2所示。

      圖2 動態(tài)下能否逆向發(fā)現(xiàn)原邏輯的測試結(jié)果

      從圖2的測試結(jié)果可以看出,安卓通用脫殼工具獲得算術(shù)運算APK文件,然后利用ART加載對內(nèi)存數(shù)據(jù)進行運算,但是混淆后的代碼并不會加載原始信息,因此也不能逆向發(fā)現(xiàn)原邏輯。其它測試用例的結(jié)果同樣如此。這說明無論在靜態(tài)和動態(tài)下,本技術(shù)都能很好地保護安卓應(yīng)用。

      2.2 安卓應(yīng)用代碼混淆技術(shù)的性能測試

      本實驗對安卓應(yīng)用代碼混淆技術(shù)的性能測試,主要從APK文件包大小測試、內(nèi)存消耗測試兩個方面進行,對比代碼混淆技術(shù)使用前后的性能情況。第一步選取算術(shù)運算和自定義方法調(diào)用兩個用例進行測試,查看APK文件包大小變化,測試結(jié)果如表2所示。根據(jù)表2測試結(jié)果,使用代碼混淆技術(shù)之后,APK文件包增加20多KB,主要是因為混淆映射及解釋處理所增加的代碼量導(dǎo)致APK文件包變大。

      表 2 安卓應(yīng)用代碼混淆技術(shù)使用前后的APK文件包大小變化情況(Byte)

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

      表 3 安卓應(yīng)用代碼混淆技術(shù)使用前后的內(nèi)存消耗量變化情況(KB)

      3 討論

      安卓應(yīng)用軟件的廣泛使用也導(dǎo)致安全問題頻發(fā),用戶的隱私與財產(chǎn)受到嚴重威脅,如何保護安卓應(yīng)用成為國內(nèi)外的一個熱門課題。Vecchiato等研究了安卓通用脫殼工具使用情況,認為以加密技術(shù)為基礎(chǔ)對安卓應(yīng)用進行加殼保護能夠收到一定效果,該方案首先對DEX文件進行加密處理,使相關(guān)文件得到隱藏,然后通過殼程序封裝處理后的文件。在需要使用時再次通過殼程序解密,實現(xiàn)DEX文件的動態(tài)加載,但是在加密解密的過程中,攻擊者依然有機會利用脫殼技術(shù)得到原DEX文件[4]。Azfar等針對安卓應(yīng)用DEX文件脫殼破解的問題,提出一種基于JNI機制的SO加固技術(shù),主要使用C或C++語言在SO中封裝DEX文件,利用JNI機制實現(xiàn)動態(tài)加載,能夠起到較好的反編譯阻斷效果,但無法形成安卓應(yīng)用的全過程保護[5]。Peisen等提出一種以LZW編碼技術(shù)為基礎(chǔ)的安卓應(yīng)用混淆技術(shù),通過該技術(shù)重新排列指令次序,以提高安卓應(yīng)用指令的隱蔽性,但這種方法的編碼表較多,而且每一個編碼表都是獨立的,這影響到加密的工作量,該技術(shù)的安全效果與編碼表的加密強度息息相關(guān)[6]??傮w來看,相關(guān)研究或多或少都存在一些缺陷,而本文的安卓應(yīng)用代碼混淆技術(shù),則從代碼方面打亂邏輯,形成安卓應(yīng)用全過程保護,因此有較大的推廣價值。

      4 結(jié)論

      隨著智能手機的普及以及安卓應(yīng)用軟件的大量開發(fā),關(guān)于安卓應(yīng)用安全保護問題在國內(nèi)外引起了廣泛關(guān)注。本文針對惡意攻擊的路徑原理,提出一種基于JAVA的安卓應(yīng)用代碼混淆技術(shù),旨在提高代碼的隱蔽性,防止安卓應(yīng)用數(shù)據(jù)信息的原邏輯被輕易破解。首先對安卓應(yīng)用代碼混淆技術(shù)的步驟過程進行介紹,然后通過實驗分析,驗證代碼混淆技術(shù)的有效性及相關(guān)性能??傮w來看,該技術(shù)對安卓應(yīng)用的保護效果較高,但也要考慮到性能方面的影響,尤其要注意內(nèi)存消耗的影響。目前的性能影響并不大,若隨著該技術(shù)的不斷開發(fā),會出現(xiàn)更多的保護方法,內(nèi)存消耗的增加難以避免,因此在今后的研究中應(yīng)加以重視。

      [1] 繆小川,汪睿,許蕾,等.使用敏感路徑識別方法分析安卓應(yīng)用安全性[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

      江蘇省社會科學基金項目:大數(shù)據(jù)背景下智慧校園建設(shè)的策略與實踐研究(15JYC001)

      呂苗苗(1983-),女,碩士,講師,主要研究方向為計算機技術(shù)和醫(yī)學信息技術(shù). E-mail:277243949@qq.com

      猜你喜歡
      安卓逆向內(nèi)存
      逆向而行
      文物表情包
      “春夏秋冬”的內(nèi)存
      當代陜西(2019年13期)2019-08-20 03:54:22
      逆向解答
      一種基于安卓系統(tǒng)的手機側(cè)抓包分析方法
      安卓L未至安卓M來了!安卓首泄漏M系統(tǒng)
      逆向工程技術(shù)及應(yīng)用
      基于內(nèi)存的地理信息訪問技術(shù)
      安卓開發(fā)者之煩惱
      上網(wǎng)本為什么只有1GB?
      西宁市| 上饶县| 瑞安市| 祥云县| 阳朔县| 应用必备| 靖远县| 璧山县| 白水县| 大冶市| 金湖县| 万宁市| 微博| 泰顺县| 通江县| 清涧县| 涿鹿县| 万年县| 西充县| 马山县| 武陟县| 开封县| 揭东县| 肇源县| 黎川县| 石屏县| 上犹县| 长丰县| 日土县| 定日县| 安溪县| 阳春市| 庄河市| 农安县| 天津市| 蓝山县| 斗六市| 乐昌市| 武汉市| 龙井市| 含山县|