Android逆向(反編譯一個(gè)APK)

一、反編譯未加固的apk

1、反編譯用到的工具

apktool:資源文件獲取,可以提取出圖片文件和布局文件進(jìn)行使用查看
dex2jar:將apk反編譯成java源碼(classes.dex轉(zhuǎn)化成jar文件)
jd-gui:查看APK中classes.dex轉(zhuǎn)化成出的jar文件,即源碼文件

2、使用apktool反編譯資源文件和Manifest文件

為了方便操作,首先將下載好的3個(gè)工具統(tǒng)一放到1個(gè)文件夾中


image.png

將gui和dex2jar分別解壓到當(dāng)前文件夾


image.png

使用apktool反編譯apk得到圖片、xml、maifest等文件
運(yùn)行CMD.exe,進(jìn)入Demo.apk路徑下
運(yùn)行apktool對(duì)apk進(jìn)行反編譯
使用如下命令將Demo.apk反編譯到【Demo】文件夾下:

java -jar apktool_2.4.0.jar d -f Demo.apk -o Demo

打開Demo文件,就可以看到反編譯后生成的文件


image.png

這時(shí)候可以看到【res】和Manifest文件了;

3、使用dex2jar反編譯java源碼

將Demo.apk直接修改后綴,改為Demo.zip,并解壓
解壓后的文件夾中,classes.dex 就是java源碼打包后的文件


image.png

將命令行定位到dex2jar.bat所在目錄
使用命令行:

d2j-dex2jar classes.dex

會(huì)生成classes-dex2jar文件,該文件就是反編譯后的java源碼文件


image.png

4、使用gui查看反編譯后的java源碼

雙擊jd-gui.exe,運(yùn)行g(shù)ui,


image.png

選擇剛剛生成的classes-dex2jar,打開后就可以看到源碼(圖中的Demo為了容易閱讀沒有加混淆,正常上線的應(yīng)用會(huì)加混淆來(lái)加大閱讀難度)


image.png

至此,一個(gè)沒有加殼的apk已經(jīng)被反編譯完成了,但是實(shí)際工作中,上線的apk包大多數(shù)都會(huì)進(jìn)行加固,有些應(yīng)用市場(chǎng)甚至后要求加固,例如360,應(yīng)用寶等,下面會(huì)介紹一中常見的脫殼技術(shù)

二、脫殼

加固后的apk在通過(guò)以上的反編譯流程后,無(wú)法得到正常的java源碼,如下圖


未加固.png

360加固保.png

樂加固.png

從上圖可以看出,經(jīng)過(guò)加固后的apk,通過(guò)常規(guī)方法反編譯無(wú)法獲取到源碼。

1、脫殼用到的工具

FDex2 :通過(guò)Hook ClassLoader的loadClass方法,反射調(diào)用getDex方法取得Dex(com.android.dex.Dex類對(duì)象),再將里面的dex寫出
VirtualXposed:無(wú)需root手機(jī)即可使用的xp框架

2、脫殼

Step1、將 【VirtualXposed】、【FDex2】和需要脫殼的apk都安裝到手機(jī)上
Step2、啟動(dòng)【VirtualXposed】,并在【VirtualXposed】中安裝【FDex2】:


image

Step3、在【VirtualXposed】中激活【FDex2】:


image

Step4、在【VirtualXposed】中安裝要脫殼的應(yīng)用,方法和Step2一樣。
Step5:啟動(dòng)【VirtualXposed】中的F【Dex2】,并配置要脫殼的應(yīng)用。
image.png

Step6:在【VirtualXposed】中運(yùn)行要脫殼的應(yīng)用。
Step7:在上【VirtualXposed】安裝文件管理器,方便將生成的dex文件導(dǎo)出
在【VirtualXposed】選中【高級(jí)設(shè)置】


image.png

選中【文件管理】,會(huì)提示安裝【Amaze】文件管理器
image.png

Step8:查看脫殼后的dex文件,打開【Amaze】,選中【Private Storage】,定位到FDex2設(shè)置的dex輸出路徑下,可以看到脫殼后的dex文件
image.png

image.png

Step9:將dex文件導(dǎo)出:長(zhǎng)按dex文件,點(diǎn)擊頂部的復(fù)制按鈕,然后回到選中【External Storage】并選擇一個(gè)路徑,點(diǎn)擊頂部的粘貼按鈕,將文件粘貼到外部存儲(chǔ),這時(shí),在手機(jī)自帶的文件管理器中就可以找到剛剛的dex文件了
image.png

image.png

image.png

Step10:通過(guò)dex2jar對(duì)脫殼的dex文件進(jìn)行反編譯,得到的3個(gè)dex文件中,有的是無(wú)用的文件,可以依次打開看看,最后可以看到,脫殼后的dex文件被成功反編譯后


image.png

至此,脫殼完成

源代碼和相關(guān)工具類已上傳碼云
https://gitee.com/xiaobug/XpDemo
https://gitee.com/xiaobug/reverse_tool

參考鏈接,感謝作者的無(wú)私奉獻(xiàn)
1、APK反編譯
2、Android APK脫殼--騰訊樂固、360加固一鍵脫殼
3、【Xposed模塊開發(fā)入門】
4、Xposed 熱更新(干貨,建議收藏)
5、android apk編譯打包過(guò)程
6、Android工程師,如何簡(jiǎn)單高效的學(xué)會(huì)smali語(yǔ)法
7、使用baksmali及smali修改apk并打包
8、MT管理器
9、Oo0代碼混淆實(shí)現(xiàn)方法
10、修改AndroidStudio混淆配置文件

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

友情鏈接更多精彩內(nèi)容