android脫殼之DexExtractor原理分析[zhuan]

來源:互聯網
上載者:User

標籤:分析師   安裝   檔案名稱   www   內容   特質   tag   and   檔案路徑   

http://www.cnblogs.com/jiaoxiake/p/6818786.html內容如下

導語:上一篇我們分析android脫殼使用對dvmDexFileOpenPartial下斷點的原理,使用這種方法脫殼的有2個缺點:1.  需要動態調試2.  對抗反調試方案為了提高工作效率, 我們不希望把寶貴的時間浪費去和加固的安全工程師去做對抗。作為一個高效率的逆向分析師, 筆者是忍不了的,所以我今天給大家帶來一種的新的脫殼方法——DexExtractor脫殼法。 資源地址:DexExtractor源碼:https://github.com/bunnyblue/DexExtractor DexExtractor脫殼原理1. 一個DEX檔案需要被解析成Dalivk虛擬機器能操作對象DvmDex, 解析過過程中就必須調用 DexFile* dexFileParse(const u1* data, size_t length, int flags)。2.   dexFileParse 函數原型如下:      DexFile* dexFileParse(const u1* data, size_t length, int flags)      data  :檔案就是DEX檔案經過最佳化後再記憶體中資料的首地址。       length:檔案就是DEX檔案經過最佳化後再記憶體中資料的長度。 3.  DexExtracctor就是重寫 dexFileParse函數,在原函數實現基礎上,將記憶體中DEX檔案中資料經過Base64加密,寫到行動裝置的SD卡4.  使用Base64加密是為了對有些加固代碼,對read.write 函數進行hook。  原理分析:根據上篇日誌《android 脫殼 之 dvmDexFileOpenPartial斷點脫殼原理分析》我們知道一個Dex檔案載入必須經過dvmDexFileOpenPartial函數,這個函數內調用 dexFileParse 進行解析Dex檔案成DexFile 我們看看Android 源碼中dexFileParse的實現 再看看DexExtractor的 dexFileParse 的實現,你發現這裡面比android 源碼多了兩行代碼,而且這兩行的編碼格式不符合一個優秀的程式員的特質,竟然沒有代碼對齊,這是作者有意為之, 引起代碼讀者的注意。  DexHacker 是DexExtraor作者自訂一個類。你會發現會調用DexHacker類的weiteDex2Encode, 分析到這你這裡關鍵字Encode, 為什麼需要加密, 所以我們繼續分析函數writeDex2Encoded。 可以看出使用base64對Dex檔案加密, 加密的Dex儲存在SD卡中, 檔案名稱和應用程式有關。注意:這裡我們看到加密的dex檔案儲存到SD卡, 我們知道這個操作需要Android應用程式有需要給這個應用添加一個寫sd卡的許可權:

<uses-permission android:name=”android.permission.WRITE_EXTERNAL_STORAGE”/>

這裡我們會有一個疑問: 為什麼要對DEX檔案進行加密,這樣還要解密,這樣不是更加的麻煩嗎?1. 這個主要是為了對抗加固策略,現在一些加固平台,比如梆梆加固,會對dex的記憶體dump脫殼進行檢測,具體的就是hook修改當前進程的read、write讀寫相關的函數,一旦檢測到read,write讀寫相關的函數的操作中有對dex檔案的dump行為會有對抗的處理,防止dex的記憶體dump。DexExtractor脫殼工具的作者考慮為了過掉這種記憶體dump的對抗,需要先將原始的dex檔案資料進行base64加密, 加密後,就沒有DEX檔案格式的特徵啦。  2. 這個解密工具也在github目錄下Decode.jar,用法:java -jar Decode.jar dexdir;這裡需要注意的是,dexdir是我們pull出dex之後的目錄,記住是目錄,不是對應的dex檔案哦!   DexExtractor脫殼法的脫殼步驟 由於筆者看過一個大牛使用DexExtrator 脫殼執行個體: http://www.wjdiankong.cn/apk%E8%84%B1%E5%A3%B3%E5%9C%A3%E6%88%98%E4%B9%8B-%E5%A6%82%E4%BD%95%E8%84%B1%E6%8E%89%E6%A2%86%E6%A2%86%E5%8A%A0%E5%9B%BA%E7%9A%84%E4%BF%9D%E6%8A%A4%E5%A3%B3/寫得很好,很詳細, 就簡單提煉出,脫殼步驟吧。 1、給Android 裝置 安裝 DexExtractor功能, 我們分析DexExtractor的原理, 我們需要重寫函數dexFileParser
  • 在Android源碼(AOSP)中,添加DexExtractor功能, 然後編譯產生system.img,但是這個system.img 只使用餘google手機和模擬器(你如果不想編譯,這裡給出了一個修改之後的system.img:https://pan.baidu.com/s/1jG3WQMU,這個檔案是Android4.4系統的)
  • 你如果沒有google手機,也不想使用模擬器, 你可以替換手機系統的libdvm.so,DexExtractor的github 有提供(ARM, X86兩個版本) 
  • 你使用你的手機支援 CM/LineageOS/TheMuppets 系統, 你可以下載他們源碼,然後使用DexExtractor源碼重寫函數dexFileParse,然後編譯,刷機。 (筆者支援這麼幹, 不過筆者還沒弄過, 這麼幹,主動權全在我們手裡)
2、添加寫SD卡許可權。如果應用程式沒有SD卡許可權, 就需要然後在AndroidManifest.xml中添加<uses-permission android:name=”android.permission.WRITE_EXTERNAL_STORAGE”/>,然後在回編譯重簽名即可。3、查看脫殼程式對應的日誌,tag是dalvikvm。發現create file end等資訊段。找到脫殼之後的dex檔案路徑。4、將sd卡中脫殼之後的dex檔案匯出到本地,在使用Decode.jar工具進行解密即可。5、解密之後的dex格式odex,所以為了使用jadx方便查看代碼邏輯,可以使用smali.jar工具將其轉化成dex檔案。

android脫殼之DexExtractor原理分析[zhuan]

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.