轉(zhuǎn)載:https://www.cnblogs.com/mfrbuaa/p/4588057.html
工具介紹:
apktool
? ? ?作用:資源文件獲取,能夠提取出圖片文件和布局文件進(jìn)行使用查看
dex2jar
? ? ?作用:將apk反編譯成java源代碼(classes.dex轉(zhuǎn)化成jar文件)
jd-gui
? ? ?作用:查看APK中classes.dex轉(zhuǎn)化成出的jar文件我抠,即源代碼文件
反編譯流程:
一谐鼎、apk反編譯得到程序的源碼颠锉、圖片淑玫、XML配置馏颂、語言資源等文件
下載上述工具中的apktool纳猪,解壓得到3個(gè)文件:aapt.exe淀散,apktool.bat右莱。apktool.jar 。將須要反編譯的APK文件放到該文件夾下档插,
打開命令行界面(執(zhí)行-CMD)?慢蜓,定位到apktool目錄。輸入下面命令:apktool.bat d -f ?test.apk ?test ? ?
(命令中test.apk指的是要反編譯的APK文件全名郭膛,test為反編譯后資源文件存放的文件夾名稱晨抡,即為:apktool.bat ? d ?-f ? ?[apk文件 ]?? [輸出目錄])
說明獲取成功,之后發(fā)如今目錄下多了個(gè)test文件则剃。點(diǎn)擊便能夠查看該應(yīng)用的全部資源文件了耘柱。
假設(shè)你想將反編譯完的文件又一次打包成apk,那你能夠:輸入apktool.bat ? b ? ?test(你編譯出來目錄)便可棍现,效果例如以下:
之后在之前的test文件下便能夠發(fā)現(xiàn)多了2個(gè)目錄:
build
dist(里面存放著打包出來的APK文件)
二调煎、Apk反編譯得到Java源碼
下載上述工具中的dex2jar和jd-gui?,解壓
將要反編譯的APK后綴名改為.rar或則 .zip己肮,并解壓士袄,得到當(dāng)中的額classes.dex文件(它就是java文件編譯再通過dx工具打包而成的)。將獲取到的classes.dex放到之前解壓出來的工具dex2jar-0.0.9.15?目錄內(nèi)谎僻,
在命令行下定位到dex2jar.bat所在文件夾娄柳,輸入dex2jar.bat???classes.dex。效果例如以下:
在改文件夾下會(huì)生成一個(gè)classes_dex2jar.jar的文件艘绍,然后打開工具jd-gui文件夾里的jd-gui.exe赤拒,之后用該工具打開之前生成的classes_dex2jar.jar文件,便能夠看到源代碼了诱鞠。效果例如以下:
被混淆過的效果圖(類文件名以及里面的方法名稱都會(huì)以a,b,c....之類的樣式命名):
三挎挖、 圖形化反編譯apk(本人未使用過)
上述步驟一、二講述了命令行反編譯apk般甲。如今提供一種圖形化反編譯工具:Androidfby
首先肋乍。下載上述反編譯工具包,打開Androidfby文件夾敷存。雙擊Android反編譯工具.exe,就能夠?yàn)g覽打開要反編譯的apk
通過反編譯,你能夠獲知該應(yīng)用用到了什么第3方的庫文件锚烦。它的代碼是怎樣編寫的等等觅闽。
然而。假設(shè)該APK進(jìn)行了混淆處理涮俄,那么你看到的類文件名以及里面的方法名稱都會(huì)以a,b,c....之類的樣式命名蛉拙,所以你能夠想找到你所想得知的界面代碼可能會(huì)十分費(fèi)勁,找到了代碼可能看起來也會(huì)非常費(fèi)勁彻亲,但是一個(gè)大體的思路會(huì)獲得孕锄,有了這個(gè)思路,你就能夠自己去嘗試了苞尝。
本人以前想寫一個(gè)類似唱吧的名人界面布局畸肆。但是當(dāng)初第一次接觸不知道怎樣去寫,進(jìn)進(jìn)行了反編譯宙址,即使他的那個(gè)代碼是混淆過的轴脐,我也看出來他是通過LISTVIEW的TYPE設(shè)定不同的ITEM布局實(shí)現(xiàn)了÷丈埃可能好多引用都是採用重寫VIEW來實(shí)現(xiàn)效果大咱。你能夠得到他的大體思路對你的開發(fā)故意無害。
還有處于一個(gè)開發(fā)人員辛辛苦苦將自己的應(yīng)用開發(fā)出來被別人一反編譯便成為了他自己的東西注益,所以要進(jìn)行混淆處理: