前言:
普通常見的反編譯模式相對來說比較簡單 但對于使用了?360加固 棒棒 愛加密 等等的加固應(yīng)用就沒辦法了、
你會發(fā)現(xiàn)反編譯出來的dex 只有幾個類 邏輯都是調(diào)用so ??
真正的dex會被加載到內(nèi)存中隱藏起來 加固應(yīng)用都是多dex這種形式
要想拿到他真正的dex 需要進(jìn)行脫殼處理 ?基本原理都是從內(nèi)存中dump?我一般會先用工具來嘗試 不行的話就得上 IDA(反匯編神器)超級強的一個工具 殺手級別 貫穿移動端 PC端的逆向 但使用IDA 進(jìn)行靜態(tài)分析 動態(tài)調(diào)試脫殼就變的很麻煩了 而且并不是一兩天能學(xué)會的
我們今天先用工具嘗試簡單的脫殼
現(xiàn)在市場中加固apk的方式一般有兩種:
第一種是對源apk整體做一個加固,放到指定位置,運行的時候再解密動態(tài)加載。
第二種是對so進(jìn)行加固,在so加載內(nèi)存的時候進(jìn)行解密釋放。
我們今天主要針對第一種加固方式進(jìn)行dex文件的獲取。
一、工具準(zhǔn)備
1.一部Root過的Android手機。
2.安裝Xposed模塊。
下載Xposed框架:打開手機瀏覽器,xposed installer,點擊下載。


Xposed框架是一款可以在不修改APK的情況下影響程序運行(修改系統(tǒng))的框架服務(wù),基于它可以制作出許多功能強大的模塊,且在功能不沖突的情況下同時運作。當(dāng)前,Per APP Setting(為每個應(yīng)用設(shè)置單獨的dpi或修改權(quán)限)、XPrivacy(防止隱私泄露)、對原生Launcher替換圖標(biāo)等應(yīng)用或功能均基于此框架。
3.安裝DumpDex。(脫殼神器)
打開https://github.com/WrBug/dumpDex, 從這個頁面下載APK安裝包,或者直接下載源碼進(jìn)行編譯項目到手機上。
注意在下載源碼進(jìn)行編譯時,因為這個apk安裝是沒有啟動頁面的,所以你可能會遇到簽名問題和Run configuration配置問題。但都容易解決。配置問題解決方法:Run configuration中Launch Options選項選為Nothing,因為此項目是插件,沒有啟動頁。
4.安裝jadx或者jeb。(用于對dex文件進(jìn)行分析)
這里提一下jeb和jadx的優(yōu)勢 可以直接打開apk進(jìn)行反編譯 而已還原效果好
jd-gui看反編譯出來的jar(源碼)有些代碼為注釋狀態(tài) 顯示不出來 ?但JEB 和jadx肯定可以全部還原
個人比較喜歡jadx看代碼更加舒服,因為習(xí)慣java的格式。
jadx使用文檔 可以直接打開apk dex文件,反編譯神器??
JEB官網(wǎng),這個是有的需要收費功能的,破解版的可以去看雪論壇工具里面找找?
二、脫殼過程
打開【Xposed Installer】App,在【模塊】菜單中勾選DumpDex插件,然后重啟設(shè)備。

打開需要脫殼的App(此App應(yīng)該已加固)。
安裝一個MT文件管理器,或者re或es文件瀏覽器都可以,百度都能很容易搜到
打開文件瀏覽器,在根目錄/data/data/應(yīng)用包名/dump文件下,
如果脫殼成功,就可以搜索到一個或多個dump文件夾,里面就是目標(biāo)dex,里面有可能有多個dex,要一個個看才知道是不是源碼的dex,這個只能自己去一個個看,到底哪個是源碼(系統(tǒng)自帶文件瀏覽器,大多找不到root后的data目錄)
三、jadx查看完整源碼
上面三步是脫殼過程。如果前面已順利得到dex文件,那么現(xiàn)在就要把dex發(fā)送到自己電腦上面,文件管理器有分享功能可以使用QQ傳文件或者自己電腦連接手機傳輸,由于dex文件在root目錄下, Android Studio的Device File Explorer沒有copy權(quán)限,一個便捷的方法是在手機上把這些文件拷貝到外面的一些可見,這里就不多說了。
不過新版本360已經(jīng)native化原DEX的onCreate中的所有指令了,還用老方法是拿不到onCreate的,所以是看不到onCreate里面的方法的,運行時有一個函數(shù)專門解析每一條DEX指令,通過jni反射執(zhí)行,這里360要想進(jìn)一步查看代碼,還是要進(jìn)行修復(fù)的,修復(fù)這個太難了,一時半會學(xué)不會,所以暫時放棄。
總結(jié)下來發(fā)現(xiàn),對360加固和一些其他第三方加固等加固包都成功拿到dex文件。無論第三方加固怎么加殼,dex文件的加載到內(nèi)存的時候代碼肯定是要進(jìn)行還原的時候,因為只要在這個時候dump出來就可以,360加固把dex加密了,總歸是要解密的,解密操作有可能在dalvik模式里面的dex優(yōu)化的過程,也有可能在art模式下dex2oat的過程,360就在dex2oat的過程中實現(xiàn)對dex解密然后編譯成oat,因此通過修改dex2oat的代碼編譯一個新的dex2oat可以dump出解密后的dex,然后就可以分析源碼了。