在進行安卓開發或者爬蟲開發過程中,偶爾會遇到需要將app進行反編譯分析參考源碼的需求,接下來,筆者將自己實踐過程記錄下來,給需要的朋友一個參考。僅供學習之用,勿做壞事兒,哈哈哈!
準備工作:確保電腦已經配置好了java環境,最好是jdk1.8以上
使用工具:
apktool (作用:資源文件獲取,可以提取出圖片文件和佈局文件進行使用查看) 下載地址:https://bitbucket.org/iBotPeaches/apktool/downloads/
dex2jar(作用:將apk反編譯成java源碼(classes.dex轉化成jar文件)) 下載地址:https://sourceforge.net/projects/dex2jar/files/
jd-gui (作用:查看APK中classes.dex轉化成出的jar文件,即源碼文件) 下載地址: http://java-decompiler.github.io/
百度雲盤下載地址:https://pan.baidu.com/s/1u7h1VT8WCW4vhQXpzq6png
將下載好的工具放在指定目錄,解壓,如下圖所示:
1.用apktool反編譯apk得到圖片、XML配置、語言資源等文件
1.1 使用cmd命令cd到工具所在的目錄,例如
cd C:\Users\lyl\Desktop\app反編譯相關
1.2 使用 apktool 反編譯得到 圖片、XML等靜態資源
java -jar [apktool_2.4.0.jar] d -f [apk地址] -o [輸出的目錄名稱]
例如下圖所示,我這裏需要反編譯的app爲非常準的app,名字爲:feichangzhun_142.apk:
執行成功之後,將會在指定的 fcz 目下生成如下圖類似的文件,資源都在這裏面:
如果你想將反編譯完的文件重新打包成apk,那你可以:
java -jar [apktool_2.4.0.jar] b fcz (你編譯出來文件夾)
例如:
java -jar apktool_2.4.0.jar b fcz
之後在之前的fcz文件下便可以發現多了2個文件夾:
build
dist(裏面存放着打包出來的APK文件)
2.Apk反編譯得到Java源代碼
將要反編譯的APK後綴名改爲.rar或則 .zip,並解壓,得到其中的額classes.dex文件(它就是java文件編譯再通過dx工具打包而成的),將獲取到的 classes.dex放到之前解壓出來的工具 dex2jar-0.0.9.13文件夾內,例如下圖
2.1 在命令行下定位到 dex2jar.bat所在目錄,輸入
dex2jar.bat classes.dex
如圖:
在該目錄下會生成一個 classes_dex2jar.jar 的文件,然後打開工具 jd-gui 文件夾裏的 jd-gui.exe,之後用該工具打開之前生成的classes_dex2jar.jar文件,便可以看到源碼了,效果如下:
備註:如果要反編譯的app是加了殼的話,需要脫殼,這裏推薦有個大佬的文章地址可以參考一下:http://www.52bug.cn/cracktool/4794.html
作者我這裏這個app也是使用的360加殼過的,所以也需要進行脫殼處理,具體脫殼步驟將在下一篇文章進行記錄
3.簽名
在從新打包之後,需要進行重新簽名,這樣才能在手機上成功安裝,這裏需要下載 Auto-sign.zip 工具,我這裏有整理一份以上傳百度雲盤,下載地址:https://pan.baidu.com/s/1JeA4MkS7BWdeQkSHLvUs1w
將 Auto-sign.zip 解壓,然後通過命令行 cd 到路徑下,並且把要簽名的app拷貝進去,例如我這裏要簽名的app爲 飛常準.apk ,拷貝進去之後,目錄結構如下圖:
在命令行使用此命令進行簽名
java -jar signapk.jar testkey.x509.pem testkey.pk8 飛常準.apk fcz.apk
注意:這裏的 fcz.apk 是指的簽名成功之後,要生成的新的app名稱
執行成功之後,將會在當前目錄生成已經簽名好的新文件,如下圖
我這裏遇到一個問題,就是我已經從新簽名之後,並且把安裝包發到手機上也成功安裝了,但是打開運行app之後,會閃退,不不知道是否是我修改源碼之後,修改出了問題,如有遇到同樣問題的朋友,可以留言互相交流下喔!