安卓反編譯技術大家一定不會陌生,這也是我們開發的時候知道安卓使用Progrund混淆之後,可能會引發很多異常資訊、包括友盟統計無法統計到有效的崩潰的日志資訊,需要上傳混淆上傳的mapping檔案才能正常檢視。這一系列複雜的問題也不能阻擋我們混淆代碼,因為不混淆代碼。别人拿到你的Apk檔案之後,反編譯拿到你的源碼,那麼你的項目就相當與開源了。如果你的項目裡面已經配置了簽名檔案,這就相當于别人可以替你上傳項目到應用市場,替代你的項目産品了,這是非常可拍的。
下面我們就先內建反編譯環境:比較好的文章
其中最新下載下傳的就是apktool,這個工具在Mac環境需要按照官網提供的安裝步驟,都是英文的,可以用Google翻譯一下,如下圖:
![](https://img.laitimes.com/img/__Qf2AjLwojIjJCLyojI0JCLiAzNfRHLGZkRGZkRfJ3bs92YsYTMfVmepNHL9UERNhXTq1ENNRVT3V1MMBjVtJWd0ckW65UbM5WOHJWa5kHT20ESjBjUIF2X0hXZ0xCMx81dvRWYoNHLrdEZwZ1Rh5WNXp1bwNjW1ZUba9VZwlHdssmch1mclRXY39CXldWYtlWPzNXZj9mcw1ycz9WL49zZwpmL4kDO3UjMwcTM0EzMwkTMwIzLc52YucWbp5GZzNmLn9Gbi1yZtl2Lc9CX6MHc0RHaiojIsJye.jpg)
這裡第一步需要你點選進去,直接右鍵–》另存為一個apktool檔案,然後下面的步驟一步步往下走就行。
把兩個檔案複制到/usr/local/bin目錄下之後,執行如下指令:
5)保證這兩個檔案是可讀寫的:
cd /usr/local/bin/
sudo chmod a+x apktool
sudo chmod a+x apktool.jar
6)驗證
apktool -v
如果出現下圖:
說明你已經安裝apktool工具成功,如果提示commend not fund 問題,
/usr/local/bin/apktool: line 1: #!/斌/慶典: No such file or directory /usr/local/bin/apktool: line 2: #: command not found /usr/local/bin/apktool: line 4: #: command not found /usr/local/bin/apktool: line 5: #根據Apache許可證2.0版(“許可證”)獲得許
說明你第一步操作存在問題,建議還是按照官網的建議右鍵儲存為apktool檔案,然後按照步驟執行。
apktool d -f /Users/guotianhui/Desktop/0.apk -o /Users/guotianhui/Desktop/apkfile
看指令也知道,第一個參數就是你要反編譯的Apk檔案的絕對位址,第二個參數就是你反編譯檔案的輸入路徑。
最後得到的檔案目錄如下:
這裡我們就完成了反編譯的第一步,擷取到所有的資源檔案,但是我如果想進一步的看看源代碼怎麼辦呢?
dex2jar 使用
我們現在把 apk 當成一個壓縮包解壓開來,裡面有個 .dex 檔案。dex2jar 能把 .dex 檔案轉化成 .jar 檔案
- 将 apk 中 .dex 檔案移動到我們剛剛解壓 dex2jar 安裝的目錄下
- 終端輸入 sh d2j-dex2jar.sh classes.dex
這時我們會在目錄中看到有個 .jar 檔案。
運作 sh d2j-dex2jar.sh classes.dex 如果出現了 Permission denied
隻需要終端中運作 chmod +x d2j_invoke.sh 即可
jd-gui 使用
直接打開我們安裝的 JD_GUI.app ,将 .jar 檔案拖入應用上,我們即可看到 java 代碼了。
dex2jar遇到的問題:
雖然提示出錯餓了,但是依然會生成jar檔案,直接拖到gui依然可以看的。