iT邦幫忙

2019 iT 邦幫忙鐵人賽

DAY 22
0
自我挑戰組

在資訊宅中打滾的通訊系生系列 第 22

Day-22 APP檢測篇-jadx

前言

這次剛好有項目需要查找APK反編譯後的java code是否有關鍵字(Key),本來想寫一個爬蟲的,但是剛好有好用的反編譯+搜尋工具,那就拿來用吧!順便分享給大家XD

何謂jadx

  1. 具有圖形化介面的拆解APK內部的檔案
  2. 拖曳式的操作
  3. 可將APK反編譯輸出Java的程式碼
  4. 具有匯出Gradle的功能。

下載

使用

  1. 點選 /bin/jadx-gui.bat 直接執行
  2. 選取欲反編譯的apk、dex、jar、zip、class、aar
  3. 即可反編譯為java程式碼

jadx優點

  1. 強大的搜尋功能
    藉由快捷鍵ctrl + shift + F 即可開啟搜尋框,輸入關鍵字後可選取選項為class、Method、field、Code。

  2. 直接搜尋關鍵程式碼
    如果是在程式碼中想要追蹤此關鍵字還出現在哪裡,也可以『選取程式碼』->『右鍵點選』->『Find Usage』,jadx會自動搜尋所有code中有出現此關鍵字的程式碼,並可以點兩下顯示。

  3. 反混淆(deobfuscation)
    一般在APK發布前,撰寫者都會用工具將APK做混淆,讓其他人對反編譯形成難度,而jadx會使相同的名字前面加入特殊符號,使其在code中為唯一名稱來區分。ex:a -> p00a
    此功能可於Tools -> deobfuscation 中啟動。

  4. 匯出成Gradle專案
    雖然jadx可以圖形化介面觀看程式碼,但是如果不喜歡其介面要使用常用的編譯器,可以匯出為Gradle,其檔案可以直接用Android Studio打開。
    可以通過File -> Save as gradle project 來存檔。

錯誤處理

  1. 反編譯不完整
    有時候APK反編譯java程式碼不完整時,會出現inconsistent code 標誌的錯誤,為了解決這個錯誤,可開啟show inconsistent code。
    可以通過File -> Preferences -> 勾選inconsistent code

  2. 卡頓或卡死
    有些APK檔案大小較大,所以反編譯時需要比較長的時間或是失敗,有幾個辦法可以解決!

    1. 減少處理的執行緒數
      • jadx在反編譯時,會使用多執行緒的方式,而造成執行緒消耗更多記憶體,所以減少執行緒有時是一個有效的方法,可於命令列使用-j 1來配置執行緒數為1,或是從Preferences -> Processing threads count 來配置執行序數。
    2. 配置記憶體
      • 可直接編輯./bin/jadx.bat or ./bin/jadx-gui.bat 裡面有一個參數DEFAULT_JVM_OPTS 配置為 DEFAULT_JVM_OPTS="-Xmx2500M",增加記憶體。

參考資料


上一篇
Day-21 Python2基本語法 -3
下一篇
Day-23 Python2基本語法 -4
系列文
在資訊宅中打滾的通訊系生30

尚未有邦友留言

立即登入留言