前言:
普通常見的反編譯模式相對來說比較簡單 但對于使用了?360加固 棒棒 愛加密 等等的加固應(yīng)用就沒辦法了站故、
你會發(fā)現(xiàn)反編譯出來的dex 只有幾個類 邏輯都是調(diào)用so ??
真正的dex會被加載到內(nèi)存中隱藏起來 加固應(yīng)用都是多dex這種形式
要想拿到他真正的dex 需要進(jìn)行脫殼處理 ?基本原理都是從內(nèi)存中dump?我一般會先用工具來嘗試 不行的話就得上 IDA(反匯編神器)超級強(qiáng)的一個工具 殺手級別 貫穿移動端 PC端的逆向 但使用IDA 進(jìn)行靜態(tài)分析 動態(tài)調(diào)試脫殼就變的很麻煩了 而且并不是一兩天能學(xué)會的
我們今天先用工具嘗試簡單的脫殼
現(xiàn)在市場中加固apk的方式一般有兩種:
第一種是對源apk整體做一個加固,放到指定位置屈芜,運(yùn)行的時候再解密動態(tài)加載慌洪。
第二種是對so進(jìn)行加固,在so加載內(nèi)存的時候進(jìn)行解密釋放。
我們今天主要針對第一種加固方式進(jìn)行dex文件的獲取遵绰。
一、工具準(zhǔn)備
1.一部Root過的Android手機(jī)增淹。
2.安裝Xposed模塊椿访。
下載Xposed框架:打開手機(jī)瀏覽器,xposed installer,點(diǎn)擊下載虑润。
Xposed框架是一款可以在不修改APK的情況下影響程序運(yùn)行(修改系統(tǒng))的框架服務(wù)成玫,基于它可以制作出許多功能強(qiáng)大的模塊,且在功能不沖突的情況下同時運(yùn)作。當(dāng)前哭当,Per APP Setting(為每個應(yīng)用設(shè)置單獨(dú)的dpi或修改權(quán)限)猪腕、XPrivacy(防止隱私泄露)、對原生Launcher替換圖標(biāo)等應(yīng)用或功能均基于此框架钦勘。
3.安裝DumpDex陋葡。(脫殼神器)
打開https://github.com/WrBug/dumpDex, 從這個頁面下載APK安裝包彻采,或者直接下載源碼進(jìn)行編譯項(xiàng)目到手機(jī)上腐缤。
注意在下載源碼進(jìn)行編譯時,因?yàn)檫@個apk安裝是沒有啟動頁面的颊亮,所以你可能會遇到簽名問題和Run configuration配置問題柴梆。但都容易解決。配置問題解決方法:Run configuration中Launch Options選項(xiàng)選為Nothing终惑,因?yàn)榇隧?xiàng)目是插件绍在,沒有啟動頁。
4.安裝jadx或者jeb雹有。(用于對dex文件進(jìn)行分析)
這里提一下jeb和jadx的優(yōu)勢 可以直接打開apk進(jìn)行反編譯 而已還原效果好
jd-gui看反編譯出來的jar(源碼)有些代碼為注釋狀態(tài) 顯示不出來 ?但JEB 和jadx肯定可以全部還原
個人比較喜歡jadx看代碼更加舒服偿渡,因?yàn)榱?xí)慣java的格式。
jadx使用文檔 可以直接打開apk dex文件霸奕,反編譯神器??
JEB官網(wǎng)溜宽,這個是有的需要收費(fèi)功能的,破解版的可以去看雪論壇工具里面找找?
二质帅、脫殼過程
打開【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傳文件或者自己電腦連接手機(jī)傳輸,由于dex文件在root目錄下谅畅, Android Studio的Device File Explorer沒有copy權(quán)限登渣,一個便捷的方法是在手機(jī)上把這些文件拷貝到外面的一些可見,這里就不多說了毡泻。
不過新版本360已經(jīng)native化原DEX的onCreate中的所有指令了胜茧,還用老方法是拿不到onCreate的,所以是看不到onCreate里面的方法的仇味,運(yùn)行時有一個函數(shù)專門解析每一條DEX指令呻顽,通過jni反射執(zhí)行,這里360要想進(jìn)一步查看代碼丹墨,還是要進(jìn)行修復(fù)的廊遍,修復(fù)這個太難了,一時半會學(xué)不會贩挣,所以暫時放棄喉前。
總結(jié)下來發(fā)現(xiàn),對360加固和一些其他第三方加固等加固包都成功拿到dex文件王财。無論第三方加固怎么加殼卵迂,dex文件的加載到內(nèi)存的時候代碼肯定是要進(jìn)行還原的時候,因?yàn)橹灰谶@個時候dump出來就可以绒净,360加固把dex加密了见咒,總歸是要解密的,解密操作有可能在dalvik模式里面的dex優(yōu)化的過程挂疆,也有可能在art模式下dex2oat的過程改览,360就在dex2oat的過程中實(shí)現(xiàn)對dex解密然后編譯成oat,因此通過修改dex2oat的代碼編譯一個新的dex2oat可以dump出解密后的dex缤言,然后就可以分析源碼了恃疯。