淺談安卓apk加固原理和實現

2020-12-14 OFweek維科網

(3)Dex文件整體加固原理

上圖對象解析:

源apk:需要加密的apk程序,源dex來自於源apk

殼程序:Android工程,提供殼dex,殼dex主要作為工程入口,解密出源dex,映射到源dex等操作

加密程序:java工程,主要是做對源dex加密且和殼dex合併成新dex的操作

(4)整個工程加載原理

APP啟動——>自定義Application中attachBaseContext()方法——>自定義Application工程onCreate()方法——>源Application

1、自定義Application來自於殼程序的dex,加密合成的新dex前半部分就是殼程序的dex,這部分是沒任何問題,可以正常加載。該Application中attachBaseContext方法會做解密操作,解密出源dex並放置在固定目錄下,添加dex的加載映射;映射到源dex目錄。

2、自定義Application工程onCreate()方法添加源dex加載的入口;即源dex的application和mainActivity。

3、程序正常啟動;源dex被正確加載。

三、apk加固實現

準備:

SourceProject

需要加密源程序,自定義application為:

com. targetapk

MyApplication,主activity為:

com. targetapk.MainActivity

jiaguApk:java工程,dex加密合併操作

shellApk:android工程,提供殼dex;自定義Application設定為:

org.hackcode.ProxyApplication

SourceProject是簡單的Android工程demo,編譯生成生成被殼加密的sourceProject.apk

jiaguApk是主要作用是加密源sourceProject.apk中dex文件;然後拼接到殼dex後面生成新的dex

shellApk是殼工程,主要是作為加密後apk的偽入口,加密後的apk工程會先加載殼工程提供Application:org.hackcode.ProxyApplication,解密、映射等操作

整體加密步驟:

1.反編譯目標app(sourceProject.apk),得到sourceProject文件;sourceProject.apk來源於SourceProject工程

2.修改sourceProject文件中的manifest文件,將自定義Application設定為「org.hackcode.ProxyApplication」

3.拿到sourceProject文件中的dex文件,壓縮為TargetApk.zip

4.反編譯殼apk:apktool.bat d shellApk.apk,得到shellApk文件

5.拿到shellApk文件下的classes.dex和TargetApk.zip,加密合成新的classes.dex文件

6.新合成的class.dex替換sourceProject文件中的class.dex

7.刪除sourceProject文件中的META-INF文件,重壓縮成zip文件

8.重新籤名

步驟2主要是是為了加載殼dex中的代碼;正確解析dex。

步驟6主要是jiaguApk工程的工作。

jiaguApk關鍵代碼

以上代碼主要作用是源程序dex壓縮成TargetApk.zip後加密,加密後拼接在殼dex的後面,然後生成新的dex文件,dex文件修改頭部參數,保證dex文件正確讀取。

此時生成的新的dex文件前部分是能正確被運行的殼dex的代碼。

shellApk殼工程關鍵代碼

attachBaseContext方法:

主要作用是程序apk中dex拷貝、解密出源dex放在data/data目錄下;設置dex加載目錄映射。

onCreate:

主要作用替換源應用dex的application,使解密出的源dex正確加載;保證源入口正確,保證項目正確加載。

以上就是apk加殼實現整個過程。實現起來基本沒什麼問題,需要注意的點是源工程有多dex問題:源程序中有多個dex的時候,多個dex同時一塊壓縮成TargetApk.zip,然後其他步驟不變。親測沒問題!

四、apk該方式加固後缺陷

(1)首次打開加載慢的問題。加固後的工程首次打開會有延時,延時時間會跟源工程的dex大小有關。就拿普元客戶端來說,裡面有兩個dex,總共有8M左右;加固後首次打開會慢3s左右;而且以後每次打開會有2s左右的延時。

(2)安全性問題。大家會發現源dex文件還是會落地,在工程的data/data目錄下面,越獄的手機可以直接看到。拿到dex資源,一樣可以通過反編譯拿到java代碼。網上有不落地的方法,嘗試一直沒有成功;如果哪位大神有可行方法的話,歡迎分享交流。

精選提問:

問1:能講講.so加固嗎?

答:.so反編譯比較困難,比dex的反編譯困難。一般做法是抽取Android工程的關鍵java代碼轉為c/c++, 然後生成so文件。so加密我只是了解了一下破壞.so部分頭文件的方式加固。

問2:加固裡面的VMP(虛擬機)是什麼?

答:VMP(虛擬軟體保護技術)大概思路就是自定義一套虛擬機指令和對應的解釋器,並將標準的指令轉換成自己的指令,然後由解釋器將自己的指令給對應的解釋器。

關於作者:張存徵,普元移動高級研發工程師,普元移動產品研發團隊成員之一,擁有首鋼集團、郵政集團等移動平臺項目實施研發經驗。

轉載本文需註明出處:微信公眾號EAWorld,違者必究。

相關焦點

  • Android中apk加固完善篇之內存加載dex方案實現原理(不落地方式加載dex)
    就是關於之前的一個話題:Android中Apk加固關於這個問題,之前的一篇文章已經說過了,沒有了解的同學可以點擊這裡:Android中apk加固技術實現  請務必仔細的看完這篇文章,不然今天說的內容會感覺很蛋疼的,因為今天的文章就是為了解決當初的加固技術遺留的問題。
  • Andorid APK反逆向解決方案:梆梆加固原理探尋
    1. apk加固前後靜態文件結構及動態運行時對比分析(1)加固前後靜態文件結構變化(左為加固前,右為加固後)初步懷疑該進程為assets\com.example.hellojni可執行文件運行結果。如上圖所示,組件類的加載類已經被修改為com.secapk.wrapper.MyClassLoader類,可以得出結論,該方式和我提出方式基本相同,通過修改系統組件類ClassLoader來實現。
  • 【訓練營】安卓APP逆向分析必備技能,你掌握了嗎?
    為了實現對安卓APP的逆向分析工作,往往在拿到一個apk以後需要首先使用靜態分析對apk進行反編譯和代碼審計。 但是,隨著APP加殼技術的普及與加固服務的便捷,越來越多的安卓App在發布前便使用代碼加固來增加逆向分析難度,對加固App的脫殼便成了首要解決的難題。
  • unity發布出來的安卓apk怎麼加密
    ,代碼邏輯、類名和方法名等一覽無餘。對於網路遊戲,還可以將一些場景資源的材質屬性改為透明,實現透視效果。需求一:安卓U3D-APK的加密保護兩種編譯方式:ill2cpp和mono。不同的編譯方式,加密方式也不同。
  • 乾貨| 淺議安卓客戶端移動應用加固技術
    安卓客戶端移動應用加固技術經歷了從代碼混淆保護技術到虛擬機保護技術的五個代際迭代更新。本文以通付盾移動安全實驗室講師的講解為依託,詳細闡述了安卓客戶端不同種類移動應用加固技術的性能差別,以期能夠為移動應用加固產品的選擇提供參考依據。
  • Tacticool手遊安卓apk下載教程 Tacticool如何下載
    Tacticool手遊安卓apk下載教程 Tacticool如何下載 Tacticool手遊安卓
  • IT之家學院:安卓的APK安裝包裡都有些什麼?
    應用程式是系統重要的組成部分,我們可以通過很多方式在安卓系統上安裝應用程式,就像Windows系統的exe和塞班系統的sis一樣,安卓系統的應用程式也有其專屬的安裝包格式——apk。安卓apk的全稱是Package,翻譯成中文就是「安卓安裝包」。既然apk是「包」,那就說明裡面包著很多東西,這就讓我很好奇了,裡面到底有些什麼啊?
  • 華為鴻蒙系統可以安裝安卓應用APP了:apk就可以
    搭載鴻蒙系統的榮耀智慧屏在使用體驗上來說一個字就是「快」,而且跟使用安卓系統的小米電視等等其他智能電視不同,榮耀智慧屏沒有開機廣告,不過鴻蒙系統有一個最大的缺點就是不能安裝第三方應用APP,現在這個缺點也沒有了,因為鴻蒙系統更新後可以安裝第三方安卓應用APP了。
  • 安卓手機apk惡意網址在線檢測工具推薦【圖文】
    前些天,又有新聞曝出手機惡意網址導致網銀被盜刷,另一方面在安卓平臺上惡意應用apk越來越多,一不小心就是導致後臺偷跑流量、惡意廣告彈窗,甚至竊取隱私。下面提供幾個比較主流的針對Android應用的在線查毒網站,供大家參考。
  • 如何手動注入Payload後門到安卓APK文件並維持訪問
    *本文原創作者:永生,本文屬FreeBuf原創獎勵計劃,未經許可禁止轉載聲明:本文內容可能具有攻擊性,只供安全研究和警示作用,請勿用於非法用途,非法使用後果與我無關。本人小白一枚,前段時間看到@鳶尾 大神寫的文章《如何用kwetza給安卓應用加後門》。大神自己寫的自動化注入工具,看過程也並不困難,我就產生了自己手動注入的想法,折騰了一天終於搞定了。
  • 一文了解安卓APP逆向分析與保護機制
    3月17日,安卓巴士全球開發者論壇在重慶舉辦,網易資深安全工程師鍾亞平出席交流活動,並做了《安卓APP逆向與保護》的演講。在分享中,他介紹了 Android App常見保護方法及其對應的逆向分析方法,以及分析了常見的加固方案原理與對抗方法。
  • 安卓系統adb命令是幹什麼用的?安卓系統adb命令意思詳解
    安卓系統adb命令是什麼意思?安卓系統adb命令詳解。安卓系統是手機行業使用最廣泛的系統之一。安卓系統常見的adb命令介紹。  安卓系統常用adb命令:  1、顯示當前連接的設備:adb devices  2、安裝apk文件(必須保存和adb同目錄,*為apk文件名稱):adb install *.apk  3、安裝apk文件到sd卡(必須保存和adb同目錄,*為apk文件名稱):adb install -s *.apk
  • 微信中,一鍵安裝apk安裝包
    今天分享這款APP很好用,是我安卓手機必備的一款APP。我一般找APP資源都是通過電腦去找,然後下載到電腦桌面,再通過電腦端微信傳到手機微信中,再進行下載安裝APP,或者是一些朋友通過微信直接將apk格式的安裝包發給我,但是在微信中格式會變為apk.1格式,無法直接安裝到手機裡。
  • android apk 防反編譯技術第一篇-加殼技術
    現在將最近學習成果做一下整理總結。學習的這些成果我會做成一個系列慢慢寫出來與大家分享,共同進步。這篇主要講apk的加殼技術,廢話不多說了直接進入正題。一、加殼技術原理 所謂apk的加殼技術和pc exe的加殼原理一樣,就是在程序的外面再包裹上另外一段代碼,保護裡面的代碼不被非法修改或反編譯,在程序運行的時候優先取得程序的控制權做一些我們自己想做的工作。
  • 安卓手機端編程工具
    AIDE一 、AIDE集成開發環境可以在安卓手機上運行java程序,開發安卓應用、遊戲。還有學習java、安卓開發、安卓遊戲開發的教程。安卓應用寫好後可直接在手機上打包、安裝、運行。擁有sdl、sdl2、sfml、allegro遊戲庫,可用開開發跨平臺遊戲,能把所有在軟體內開發、並成功運行的遊戲打包成apk,進行安裝。沒有代碼自動補全功能。
  • 一份禮物apk什麼梗?O泡果奶一份禮物apk下載連結
    這個名為「一份禮物」的apk文件裡面只有一個循環,劫持你的返回鍵,然後把音量開最大,但是循環執行快所以你的音量是調不下來的。至於截圖那是因為這個Lua模塊本身封裝了這個功能,實際沒有調用過。而且也不是病毒,在確保不會社會性死亡的時候可以放心玩耍。
  • 安卓逆向工程師面試指南【乾貨】
    畢竟相信很多和小編一樣願意花錢學好安卓逆向的人,應該都不是心血來潮,而是真的希望藉此技術謀得一份高薪的工作。 好工作待遇 Interview Guide 五險一金、出國旅遊、年底雙薪、帶薪年假、員工生日會、住房補貼 安卓逆向工程必須掌握的技能: Interview Guide必備技能: 1、負責安卓程序的加解密和數據傳輸分析
  • 建築結構加固力學原理,就這麼簡單
    如果經過驗算,通過建築結構加固後,建築物可繼續使用的,可以進行加固施工,然後投入使用。建築加固是根據什麼原理來進行計算的呢?我們在這裡先了解建築結構的基本受力構件。建築基本受力構件分為:受壓構件、受剪構件、受彎構件。受壓構件,主要的力作用在垂直於截面方向的構件。比如:建築物的柱、牆等。
  • 安卓手機安裝軟體出現解析包錯誤的解決方法
    目前的大部分智慧型手機作業系統還是安卓的,在安卓手機安裝軟體的時候一般需要解析apk安裝包,但是有時候會遇到解析包出現異常或者錯誤的提示,那麼應該怎麼解決呢?今天就為大家分享幾種實用的安裝包解析錯誤解決方案!