一兰伤、反編譯未加固的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è)文件夾中
將gui和dex2jar分別解壓到當(dāng)前文件夾
使用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
打開(kāi)Demo文件游两,就可以看到反編譯后生成的文件
這時(shí)候可以看到【res】和Manifest文件了砾层;
3漩绵、使用dex2jar反編譯java源碼
將Demo.apk直接修改后綴贱案,改為Demo.zip,并解壓
解壓后的文件夾中止吐,classes.dex 就是java源碼打包后的文件
將命令行定位到dex2jar.bat所在目錄
使用命令行:
d2j-dex2jar classes.dex
會(huì)生成classes-dex2jar文件宝踪,該文件就是反編譯后的java源碼文件
4、使用gui查看反編譯后的java源碼
雙擊jd-gui.exe,運(yùn)行g(shù)ui碍扔,
選擇剛剛生成的classes-dex2jar瘩燥,打開(kāi)后就可以看到源碼(圖中的Demo為了容易閱讀沒(méi)有加混淆,正常上線的應(yīng)用會(huì)加混淆來(lái)加大閱讀難度)
至此不同,一個(gè)沒(méi)有加殼的apk已經(jīng)被反編譯完成了厉膀,但是實(shí)際工作中,上線的apk包大多數(shù)都會(huì)進(jìn)行加固二拐,有些應(yīng)用市場(chǎng)甚至后要求加固服鹅,例如360,應(yīng)用寶等百新,下面會(huì)介紹一中常見(jiàn)的脫殼技術(shù)
二企软、脫殼
加固后的apk在通過(guò)以上的反編譯流程后,無(wú)法得到正常的java源碼饭望,如下圖
從上圖可以看出仗哨,經(jīng)過(guò)加固后的apk形庭,通過(guò)常規(guī)方法反編譯無(wú)法獲取到源碼。
1厌漂、脫殼用到的工具
FDex2 :通過(guò)Hook ClassLoader的loadClass方法萨醒,反射調(diào)用getDex方法取得Dex(com.android.dex.Dex類對(duì)象),再將里面的dex寫(xiě)出
VirtualXposed:無(wú)需root手機(jī)即可使用的xp框架
2桩卵、脫殼
Step1验靡、將 【VirtualXposed】、【FDex2】和需要脫殼的apk都安裝到手機(jī)上
Step2雏节、啟動(dòng)【VirtualXposed】胜嗓,并在【VirtualXposed】中安裝【FDex2】:
Step3、在【VirtualXposed】中激活【FDex2】:
Step4钩乍、在【VirtualXposed】中安裝要脫殼的應(yīng)用辞州,方法和Step2一樣。
Step5:啟動(dòng)【VirtualXposed】中的F【Dex2】寥粹,并配置要脫殼的應(yīng)用变过。
Step6:在【VirtualXposed】中運(yùn)行要脫殼的應(yīng)用。
Step7:在上【VirtualXposed】安裝文件管理器涝涤,方便將生成的dex文件導(dǎo)出
在【VirtualXposed】選中【高級(jí)設(shè)置】
選中【文件管理】媚狰,會(huì)提示安裝【Amaze】文件管理器
Step8:查看脫殼后的dex文件,打開(kāi)【Amaze】,選中【Private Storage】阔拳,定位到FDex2設(shè)置的dex輸出路徑下崭孤,可以看到脫殼后的dex文件
Step9:將dex文件導(dǎo)出:長(zhǎng)按dex文件,點(diǎn)擊頂部的復(fù)制按鈕糊肠,然后回到選中【External Storage】并選擇一個(gè)路徑辨宠,點(diǎn)擊頂部的粘貼按鈕,將文件粘貼到外部存儲(chǔ)货裹,這時(shí)嗤形,在手機(jī)自帶的文件管理器中就可以找到剛剛的dex文件了
Step10:通過(guò)dex2jar對(duì)脫殼的dex文件進(jìn)行反編譯,得到的3個(gè)dex文件中弧圆,有的是無(wú)用的文件赋兵,可以依次打開(kāi)看看,最后可以看到搔预,脫殼后的dex文件被成功反編譯后
至此霹期,脫殼完成
源代碼和相關(guān)工具類已上傳碼云
https://gitee.com/xiaobug/XpDemo
https://gitee.com/xiaobug/reverse_tool
參考鏈接,感謝作者的無(wú)私奉獻(xiàn)
1斯撮、APK反編譯
2经伙、Android APK脫殼--騰訊樂(lè)固、360加固一鍵脫殼
3、【Xposed模塊開(kāi)發(fā)入門(mén)】
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混淆配置文件