目錄
一、混淆程式碼
混淆程式碼逆向分析
三、拆分Dex加固
拆分Dex加固逆向分析
四、虛擬機器加固
首頁 運維 安全 安卓APP逆向分析與保護機制是怎樣的

安卓APP逆向分析與保護機制是怎樣的

May 20, 2023 pm 04:20 PM
app

想知道Android App常見的保護方法及其對應的逆向分析方法嗎?

在本次分享中,探討了多個面向的安卓APP安全,包括混淆程式碼、整體Dex加固、分割Dex加固和虛擬機器加固。這些內容已經成為國內近幾年Android App安全保護的主要趨勢。

一、混淆程式碼

Java程式碼是非常容易反編譯的,作為一種跨平台的、解釋型語言,Java 原始碼被編譯成中間「字節碼」儲存於class文件中。由於需要跨平台,這些字節碼包含大量語意訊息,容易被反編譯成Java原始碼。開發人員通常會對編譯好的class檔案進行混淆以更好地保護Java原始碼。

混淆就是將發佈出去的程式重新組織和處理,使得處理後的程式碼與處理前程式碼完成相同的功能,而混淆後的程式碼很難被反編譯,即使反編譯成功也很難得出程式的真正語意。 ProGuard是一個開源項目,它能對字節碼進行混淆、體積縮減和最佳化等處理。

Proguard處理流程圖如下所示,包含壓縮、最佳化、混淆、預檢四個主要環節:

安卓APP逆向分析與保護機制是怎樣的

壓縮(Shrink):偵測並移除程式碼中無用的類別、欄位、方法和特性(Attribute);

優化(Optimize):對字節碼進行最佳化,移除無用的指令。最佳化程式碼,非入口節點類別會加上private/static/final,沒有用到的參數會被刪除,有些方法可能會變成內聯程式碼;

混淆(Obfuscate):使用a、b 、c、d這樣簡短而無意義的名稱,對類別、欄位和方法進行重命名;

預檢(Preveirfy):在Java平台上對處理後的程式碼進行預檢,確保載入的class檔案是可執行的。

在分享中,鐘亞平展示了利用Proguard,對Dex2jar進行反編譯處理後的Apk效果範例:

安卓APP逆向分析與保護機制是怎樣的 
Proguard處理後

安卓APP逆向分析與保護機制是怎樣的    

Proguard混淆器不僅能夠保護程式碼,而且能夠精簡編譯後的程式大小,減少記憶體佔用。

混淆程式碼逆向分析

鐘亞平分享了一個名為DEGUADR的國外工具,它使用統計方法來解混淆程式碼,以便反編譯。儘管這個工具的準確性不是100%,但它仍能部分地幫助反編譯程式碼。

安卓APP逆向分析與保護機制是怎樣的    

##使用DEGUADR解混淆的範例:


   安卓APP逆向分析與保護機制是怎樣的

#com.xxxxx. common.util.CryptoUtil網站也提供了一種反編譯服務,如下所示:

java.lang.String a(byte[]) -> encodeToStringjava.lang.String a(byte[],boolean,java.lang.String) -> a byte[] a(byte[],byte[]) -> encrypt byte[] b(byte[]) -> getKey byte[] b(byte[],byte[]) -> decrypt byte[] d(java.lang.String) -> getKey java.lang.String a(byte,char[]) -> a java.lang.String a(java.io.File) -> getHash java.lang.String a(java.lang.String) -> c java.lang.String b(java.lang.String) -> encode
登入後複製
二、整體Dex加固

隨著安全技術的不斷發展,新的「加固技術「已經出現,用以加強Android的保護強度。 DEX加固是對DEX檔進行加殼防護,防止被靜態反編譯工具破解而洩漏源碼,最剛開始出現的是整體加固技術方案。

   安卓APP逆向分析與保護機制是怎樣的

整體加固技術的原理如上所示,包括取代application/classes.dex、解密/動態載入原classes.dex、呼叫原application相關方法、將原application物件/名稱設定到系統內部相關變數四大環節。其中最關鍵的一步就是解密/動態載入原classes.dex,透過加密編譯好的最終dex原始碼文件,然後在一個新專案中用新專案的application啟動來解密原專案碼並載入到記憶體中,再把當前進程替換為解密後的程式碼,能夠很好地隱藏原始碼並防止直接性的反編譯。

整體Dex加固逆向分析

整體Dex加固逆向分析有兩種常用的方法。其一是在記憶體中暴力搜尋 dex\n035,再 dump。以下是32位元系統中效果的範例:

   安卓APP逆向分析與保護機制是怎樣的

另一種方法是透過HookdvmDexFileOpenPartial(void* addr, int len, DvmDex**)。

三、拆分Dex加固

隨著業務規模發展到一定程度,不斷地加入新功能、增加新的類別庫,程式碼在急劇膨脹的同時,對應的apk包的大小也急劇增加,那麼簡單的整體加固方案就不能很好地滿足安全需求,在整體加固方案之外又出現了分割加固的技術方案。

安卓APP逆向分析與保護機制是怎樣的    

但是如上所示,dex檔案在加固時,針對中間缺少的一部分資料會以解密後的資料來替換,有的時候這種拆分替換也會導致數據不準確。需要了解dex檔案的資料結構,才能確定應該拆分哪種類型的資料。

Dex檔案結構極為複雜,以下圖示選取了其中較為重要的內容。事實上,dex文件是一個以class為核心組裝起來的文件,其中最重要的是classdata和classcode兩部分,有其特定的接口和指令數據,選取這兩部分來拆分的話,即使拆分出來也不會洩漏class數據和字節碼數據,反編譯出來也不完整,安全性較高。

安卓APP逆向分析與保護機制是怎樣的    
   

拆分Dex加固逆向分析

對於dex拆分加固的反向分析,如下所示,可用classdata替換從而組裝成新的dex文件,雖然和原來的dex文件不會完全一致,但也在一定程度上復原了被拆分資料的樣子。

安卓APP逆向分析與保護機制是怎樣的        
   

但要注意的是,這種方法只適用於被分割出去的資料變形一次完成,也就是說,在有其他保護思路的情況下盡量避免使用,而且即使有需要也盡量選在用到這個類的時候才去恢復。

此外還有一個更底層一些的工具dexhunter,這個工具較為前衛,但同時也有一些局限性,譬如部分指令數據會被優化,形成的代碼界面不是很美觀等等。

安卓APP逆向分析與保護機制是怎樣的        
   

四、虛擬機器加固

對位元組進行處理是虛擬機器加固的一種方式,也可視為dex分加固的一種。以下是經過虛擬機器加固處理的常規的Android系統程式碼

##        安卓APP逆向分析與保護機制是怎樣的    

以add-int v0, v1, v2、sub-int v0, v1, v2 、mul-int v0, v1, v2這三條指令進行替換,然後進行加固編譯,這樣子操作後,即使把替換後的資料恢復了,也不會以add-int v0, v1, v2、sub-int v0, v1, v2、mul-int v0, v1, v2這三條指令進行替換,然後進行加固編譯,這樣子操作後,即使把替換後的資料恢復了,也不會變形成為之前的字節碼,安全係數較高。

虛擬機器加固逆向分析—HOOK JNI 介面

這種方式下的逆向分析,一方面可以透過HOOK JNI 介面來實現,它有兩種實作方式。

其一是類別成員/靜態變數操作相關接口,例如:

GetStaticDoubleFieldSetStaticDoubleField GetDoubleField SetDoubleField … 

(byte, object, int,long…)

其二是反射呼叫類別方法,例如:

CallVoidMethodACallBooleanMethodA CallShortMethodA CallObjectMethodA …

CallStaticVoidMethodACallStaticBoolean,A CallStaticShort#A CallStaticObjectMethodMethod#fby#; int, long,double …)

CallObjectMethodA(JNIEnv* env, jobject object, jmethoID method, …) 

 
透過HOOKJNI 介面實現虛擬機器加固分析

安卓APP逆向分析與保護機制是怎樣的使用HOOK JNI介面可以了解APP大致的呼叫流程,無需進行底層逆向。但對於複雜的呼叫過程,或是虛擬化方法數量較多的情況,這種逆向分析手段看起來會比較混亂;對於不需要返射到Java層執行的指令,如算術、邏輯運算等,則無法監控到。

虛擬機器加強逆向分析—分析指令操作碼映射

另一方面,也可以透過分析指令操作碼映射來逆向分析。以下方法可以在使用相同加固版本或映射關係的情況下採用:

安卓APP逆向分析與保護機制是怎樣的                        
                  中下對上進行中所示時隨機化的情況下隨機化關係圖下隨機關係所示,


                       

      我。 安卓APP逆向分析與保護機制是怎樣的

                       
              

                   

#

以上是安卓APP逆向分析與保護機制是怎樣的的詳細內容。更多資訊請關注PHP中文網其他相關文章!

本網站聲明
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn

熱AI工具

Undresser.AI Undress

Undresser.AI Undress

人工智慧驅動的應用程序,用於創建逼真的裸體照片

AI Clothes Remover

AI Clothes Remover

用於從照片中去除衣服的線上人工智慧工具。

Undress AI Tool

Undress AI Tool

免費脫衣圖片

Clothoff.io

Clothoff.io

AI脫衣器

Video Face Swap

Video Face Swap

使用我們完全免費的人工智慧換臉工具,輕鬆在任何影片中換臉!

熱門文章

<🎜>:泡泡膠模擬器無窮大 - 如何獲取和使用皇家鑰匙
3 週前 By 尊渡假赌尊渡假赌尊渡假赌
北端:融合系統,解釋
3 週前 By 尊渡假赌尊渡假赌尊渡假赌
Mandragora:巫婆樹的耳語 - 如何解鎖抓鉤
3 週前 By 尊渡假赌尊渡假赌尊渡假赌

熱工具

記事本++7.3.1

記事本++7.3.1

好用且免費的程式碼編輯器

SublimeText3漢化版

SublimeText3漢化版

中文版,非常好用

禪工作室 13.0.1

禪工作室 13.0.1

強大的PHP整合開發環境

Dreamweaver CS6

Dreamweaver CS6

視覺化網頁開發工具

SublimeText3 Mac版

SublimeText3 Mac版

神級程式碼編輯軟體(SublimeText3)

熱門話題

Java教學
1665
14
CakePHP 教程
1424
52
Laravel 教程
1321
25
PHP教程
1269
29
C# 教程
1249
24
京東商城APP如何進行實名認證 京東商城APP如何進行實名認證 Mar 19, 2024 pm 02:31 PM

京東商城APP實名認證怎麼搞?京東商城是許多朋友常用的網路購物平台,大家在購物前,最好先進行實名認證,這樣才能享受到完整的服務,獲得更好的購物體驗。以下帶來京東商城實名認證方法,希望對網友們有幫助。 1.安裝並開啟京東商城,接著登入個人帳號;2、然後點選頁面下方【我的】,進入個人中心頁面;3、之後再點選右上角的【設定】小圖標,前往設定功能介面;4、選擇【帳號與安全】這一項,來到帳戶設定頁面;5、最後再點擊【實名認證】選項,前往填寫實名資訊;6、安裝系統要求填寫個人真實信息,完成實名認證

cocos2d-LUA逆向中如何解密app資源 cocos2d-LUA逆向中如何解密app資源 May 16, 2023 pm 07:11 PM

還是以大神apk為例,透過前面分析app解密lua腳本,我們能夠解密大神apk的lua腳本,現在我們來解密其資源(設定檔和圖片等)。我們以比較重要的設定檔為例,未解密之前:檔案頭也有簽名值:fuckyou!。看到這,我們首先就想到是不是也是用xxtea加密的,我們用上面的方法,先xxtea解密,再解壓,發現依舊是亂碼,在操作的過程中就出現了錯誤,顯然,要否定我們剛才的猜想。我們繼續按部就班的解密設定檔。稍微思考一下,文件頭部是:fuckyou!如果想要對文件進行解密,那麼不可避免的需要處理

微軟改進了 Windows 11 的 Smart App Control,但你可能無法使用它 微軟改進了 Windows 11 的 Smart App Control,但你可能無法使用它 Apr 17, 2023 pm 04:40 PM

微軟在今年稍早推出了Windows11安全功能SmartAppControl。當時,微軟將其描述為「阻止不受信任或具有潛在危險的應用程式」的保護工具。當時該工具的獨特之處在於它決定了它是否應該在Windows11設備上運行。 SmartAppControl一開始以評估模式運作;正是在這種模式下,應用程式決定是否應該開啟它。微軟確實透露用戶可以在Windows安全應用程式的應用程式和瀏覽器控制部分啟用智慧應用程式控制。僅根據Microsoft的說法,SmartAppC

如何在iPhone上查看和刪除App Store購買歷史記錄 如何在iPhone上查看和刪除App Store購買歷史記錄 Apr 13, 2023 pm 06:31 PM

AppStore是iOS相關應用程式的市場。在這裡,您還可以找到免費應用程式和付費應用程式。應用程式可以是遊戲應用程式、提高工作效率的應用程式、實用應用程式、社交媒體應用程式以及更多類別的應用程式。您可能已經從AppStore下載或購買了許多適用於iPhone的應用程式。現在您可能想知道如何查看在App Store中購買的應用程式的購買記錄。有時,出於隱私原因,您可能需要從購買歷史記錄中隱藏某些購買。在本文中,我們將指導您尋找購買歷史記錄以及如何根據需要從購買歷史記錄中刪除/隱藏購買。第1部

註冊香港AppleID的步驟及注意事項(享受香港AppleStore的獨特優勢) 註冊香港AppleID的步驟及注意事項(享受香港AppleStore的獨特優勢) Sep 02, 2024 pm 03:47 PM

在全球範圍內,Apple公司的產品和服務一直備受用戶喜愛。註冊一個香港AppleID將帶給用戶更多的便利和特權,讓我們一起來了解一下註冊香港AppleID的步驟以及需要注意的事項。如何註冊香港AppleID在使用蘋果設備時,許多應用程式和功能都需要使用AppleID進行登入。如果您想下載香港地區的應用程式或享受香港AppStore的優惠內容,那麼註冊一個香港AppleID就非常必要。本文將詳細介紹如何註冊香港AppleID的步驟以及需要注意的事項。步驟:選擇語言與地區:在蘋果設備上找到「設定」選項,進入

中國聯通app怎麼退訂流量包 中國聯通怎樣退訂流量包 中國聯通app怎麼退訂流量包 中國聯通怎樣退訂流量包 Mar 18, 2024 pm 10:10 PM

中國聯通app能夠輕鬆的滿足大家的使用,多樣的功能,解決你們的需求,想要辦理各種業務,都可以在這裡輕鬆的搞定,有不需要的都可以在這裡及時的退訂掉,有效的避免後續的損失,很多人在使用手機時,有時感覺流量不夠用,就購買了額外的流量包,但下個月又不想要要,就想要馬上的退訂掉,在這裡小編為大家提供退訂的方法,讓需要的朋友們,都可以來使用起來!  在中國聯通app中,找到右下角的「我的」選項,點擊它。  在我的介面裡,滑動我的服務一欄,點擊其中的「我已訂購」選

app全名是啥 app全名是啥 Aug 21, 2023 am 10:29 AM

app全名為“Application”,即應用程式的縮寫,是指針對行動裝置開發的一種軟體應用。 app的出現為使用者提供了更多種類的行動應用程式選擇,滿足了使用者在不同場景下的各類需求。 app的開發過程涉及軟體設計、程式設計、測試等多個環節,同時也需要考慮設備相容性、效能最佳化、安全性等方面的問題。

如何利用深度連結方式後門化Facebook APP 如何利用深度連結方式後門化Facebook APP May 19, 2023 pm 02:49 PM

近期,作者發現了Facebook安卓APP應用的一個深度連結漏洞,利用該漏洞,可以將用戶手機上安裝的Facebook安卓APP應用轉變成後門程式(Backdoor),實現後門化。另外,利用該漏洞還可以重打包FacebookAPP,並將其傳送給特定目標受害者安裝使用。以下就來看看作者對此漏洞的發現過程,以及如何透過Payload構造,最終將其轉化為FacebookAPP實際生產環境中的安全隱患。漏洞發現通常做眾測時,我會先認真了解目標系統的應用機制。在我的上一篇部落格中,我已經分享了透過解析Face

See all articles