概念
由于Google Android平臺(tái)選擇了Java Dalvik VM的方式铅歼,使其程序很容易破解和被修改。反編譯是破解的途徑之一换可,通過反編譯椎椰,可以推導(dǎo)出他人APP產(chǎn)品的思路、原理沾鳄、結(jié)構(gòu)慨飘、算法、處理過程译荞、運(yùn)行方法等設(shè)計(jì)要素瓤的,某些特定情況下可能推導(dǎo)出源代碼。這也給一些不法分子以可乘之機(jī)磁椒。他們對(duì)流行的APP進(jìn)行反編譯后堤瘤,竊取正版開發(fā)者的創(chuàng)意或算法,再重新生成新的APP浆熔,嚴(yán)重侵害了正版開發(fā)者的權(quán)益本辐。
一. 工具介紹
-
apktool (資源文件獲惹欧)
- 作用:資源文件獲取,可以提取出圖片文件和布局文件進(jìn)行使用查看
- apktool下載地址:https://bitbucket.org/iBotPeaches/apktool/downloads
-
dex2jar(源碼文件獲壬髦濉)
- 作用:將apk反編譯成java源碼(classes.dex轉(zhuǎn)化成jar文件)
- dex2jar下載地址:http://sourceforge.net/projects/dex2jar/files/
-
jd-gui (源碼查看)
- 作用:查看APK中classes.dex轉(zhuǎn)化成出的jar文件老虫,即源碼文件
- jd-gui下載地址:http://jd.benow.ca/
二. Apk反編譯流程
-
為了方便進(jìn)行反編譯,我們將上述下載好的3個(gè)工具統(tǒng)一放到一個(gè)文件夾中
-
為了方便進(jìn)行反編譯,我們將上述下載好的3個(gè)工具統(tǒng)一放到一個(gè)文件夾中
-
然后將【dex2jar-2.0.zip】和【jd-gui-windows-1.3.0.zip】分別解壓到當(dāng)前文件夾
- 使用apktool反編譯apk得到圖片茫多、XML配置祈匙、語(yǔ)言資源等文件
三. 使用dex2jar反編譯apk得到Java源代碼
-
將要反編譯的APK后綴名改為.rar或者 .zip,并解壓天揖,得到其中的classes.dex文件(它就是java文件編譯再通過dx工具打包而成的)
-
將獲取到的classes.dex放到之前解壓出來的工具【dex2jar-2.0】文件夾內(nèi)
-
在命令行下定位到dex2jar.bat所在目錄,輸入"d2j-dex2jar classes.dex"今膊,
-
命令執(zhí)行完成之后,在當(dāng)前目錄下就可以看到生成的Jar文件了
-
反編譯classes.dex得到classes-dex2jar.jar文件之后市埋,就可以使用【jd-gui】工具將class文件反編譯成java源代碼了
-
使用jd-gui打開classes-dex2jar.jar就可以看到源代碼了
注意:JD-GUI雖然可以將class反編譯成java源代碼恕刘,但是對(duì)于一些被混淆過的class缤谎,反編譯的效果就不是那么理想了,被混淆過的class反編譯后的效果圖(類文件名稱以及里面的方法名稱都會(huì)以a,b,c....之類的樣式命名):