1. 程式人生 > >常用的Android反編譯工具

常用的Android反編譯工具

好久沒有寫部落格,一直在用自己的印象筆記記錄一些問題。2017年了,想重新的把部落格寫起來。也希望通過這個平臺交一些朋友。

什麼是反編譯?

反編譯的定義--計算機軟體反向工程(Reverse engineering)也稱為計算機軟體還原工程,是指通過對他人軟體的目標程式(比如可執行程式)進行“逆向分析、研究”工作,以推匯出他人的軟體產品所使用的思路、原理、結構、演算法、處理過程、執行方法等設計要素,某些特定情況下可能推匯出原始碼。

對於Android來說,反編譯就是將一個apk轉換成相應的資原始檔(可能被混淆了)和java程式碼(可能被混淆了)。這一過程可能是apk->dex->jar->檢視程式碼,也可能是apk->資原始檔+smali,也可能直接是apk->檢視程式碼。這個過程就就需要對具體的反編譯工具而言了。

反編譯工具有什麼用?

一個新的強大的庫想知道哪些大廠在使用,可以反編譯大廠的apk,看看有沒有相應的包。

apk釋出以後發現有問題,可能某些功能漏了,反編譯看看相應的程式碼是否存在就知道了。

看著別人apk的動畫效果好厲害,反編譯別人的apk,然後查詢相應的程式碼模仿(很大可能也找不到)。

瞭解例如apt生成程式碼的效果,反編譯程式碼就可以看到生成的程式碼(當然在build/generated/source/apt目錄下也可以看到)。

反編譯工具有哪些?

上面的5種反編譯相關的工具都是開源的。

  • 最開始反編譯工具是dex2jar可以將dex轉化成jar包,然後可以將jar通過jd-gui來轉換。
  • 發現這個過程需要兩步才能完成,後來直接使用jadx將apk反編譯檢視程式碼。
  • 使用jd-gui/jadx檢視程式碼的時候,跳轉以及查詢都比較的慢。就使用enjarify(號稱可以反編譯出來的類最多)將apk反編譯成dex,然後使用jadx將dex反編譯成java程式碼,使用Android Studio檢視程式碼。
  • 使用apktool可以反編譯出資原始檔。

所以現在我的習慣,對於直接給的jar(其它部門的SDK)使用jd-gui。對於不需要去具體看程式碼的apk使用jadx直接檢視。對於可能需要研究的程式碼,使用enjarify + jadx + Andorid Studio。需要檢視資原始檔就使用apktool。

一個小的tips,使用adb命令快速的找到當前在那個介面。

adb shell dumpsys window windows | grep -E ‘mCurrentFocus'

最後反編譯不是我們學習的全部,但是瞭解一點還是對開發有幫助的。