Android 反編譯三種方式

首先反編譯別人的APK,主要是學習別人的實現邏輯,給自己一個思路。比較商業的APK也不會給你留下這個漏洞,一些核心的業務處理會在後臺進行操作;本地的 APK 也會進行混淆加密等。

好了廢話不多說,步入正題:

方法一:在線反編譯

很簡單方便的一個方法,只要打開網頁,把APK放進入,就可以在線編譯了,不過速度比較慢,對於比較大型的APK還是不要用這種方法,容易出錯。

網址:http://www.javadecompilers.com/apk

方法二:利用apktool工具

需要用的工具有:

1、APK TOOL:這是谷歌提供的的編譯工具,我們知道APK其實就是一個壓縮文件,我們完全可以把.apk文件後綴改成.zip,這樣我們就可以獲取裏面的資源文件(圖片,res目錄下的xml文件)和AndroidManifest.xml(這個是亂碼的)如果你使用 apk tool 來進行反編譯 apk 就不會出現這種問題了。下載地址:https://ibotpeaches.github.io/Apktool/install/ (需要fq)

2、dex2jar:將apk反編譯成java源碼(classes.dex轉化成jar文件) 下載地址:http://sourceforge.net/projects/dex2jar/files/

3、jd-gui:用來查看 jar 包裏面的代碼的一種工具。官網下載地址:http://jd.benow.ca/

如果不方便fq,這裏打包好三個工具下載:https://download.csdn.net/download/li815705994/12367490

下面說一下具體如何使用這個工具

第一步:apk反編譯得到程序的源代碼、圖片、XML配置、語言資源等文件

下載上述工具中的apktool,解壓得到3個文件:aapt.exe,apktool.bat,apktool.jar ,將需要反編譯的APK文件放到該目錄下,

打開命令行界面(運行-CMD) ,定位到apktool文件夾,輸入以下命令:apktool.bat d -f  winsh.apk  -o text(apktool2.0以後用這個命令)   

注意:(命令中winsh.apk指的是要反編譯的APK文件全名, text爲反編譯後資源文件存放的目錄名稱,即爲:apktool.bat   d  -f    [apk文件 ]  -o  [輸出文件夾])

如果成功了那你的目錄下會出現一個text的文件夾

text就是我們反編譯的內容了,當然如果修改完想打包apk也是可以的,因爲主題的原因這個就不細說了,網上有很多。

第二步:Apk反編譯得到Java源代碼

所需工具:dex2jar

將要反編譯的APK後綴名改爲.rar或則 .zip,並解壓,得到其中的額classes.dex文件(它就是java文件編譯再通過dx工具打包而成的),將獲取到的classes.dex放到之前解壓出來的工具dex2jar-2.0 文件夾內,

在命令行下定位到dex2jar.bat所在目錄,輸入d2j-dex2jar.bat classes.dex,效果如下:

在該目錄下會生成一個classes_dex2jar.jar的文件,這個就是反編譯後的java代碼文件了,只是需要特定的工具查看

第三步:使用jd-gui打開classes_dex2jar.jar文件

直接打開jd-gui.exe工具,在裏面找到剛纔的classes_dex2jar.jar,就可以瞭如下:

注意:被混淆過的效果圖(類文件名稱以及裏面的方法名稱都會以a,b,c....之類的樣式命名):

方法三:圖形化反編譯apk

需要下載Gapktool.jar,其實這個原理跟方法二是差不多的,只是這個更智能,不需要我們手動敲寫命令,都是可視化的,簡單方便。下載地址:https://download.csdn.net/download/li815705994/12367497

下載後直接點擊Gapktool.bat,就會開啓一個界面,把需要編譯的apk放進去,在指定一個輸出目錄就可以了。

1.運行Gapktool.bat
2.apk文件和輸出目錄使用英文路徑

注意:默認使用jad反編譯,如果編譯出來的java代碼難以閱讀,請選擇使用jd-gui反編譯。
保留smali文件刪除gen、src修改res裏的文件後可以重修打包成apk使用。

總結:

開發者辛辛苦苦將自己的應用開發出來被別人一反編譯便成爲了他自己的東西,所以要進行混淆處理:

以下是我轉載的混淆的教程:http://blog.csdn.net/vipzjyno1/article/details/21042823