反編譯方法:
前提:操作系統需配置了jdk
一、找到apk中的class.dex:
把apk文件改名為.zip,然后解壓縮其中的class.dex文件,它就是java文件編譯再通過dx工具打包成的。
二、得到java源文件
工具准備:
1、把dex文件反編譯為jar文件的工具。(dex2jar)
http://code.google.com/p/dex2jar/downloads/list
2、把jar反編譯為java的工具。(JD-GUI)
http://java.decompiler.free.fr/?q=jdgui
反編譯步驟:
1.在cmd下進入dex2jar.bat所在路徑,然后輸入“dex2jar.bat XXX”,XXX指的是你要反編譯的apk中的classes.dex文件所在路徑及名稱,比如:我的dex2jar.bat在D:\Android\apk_decode\dex2jar-0.0.7-SNAPSHOT路徑下, classes.dex在D:\Android下,所以: 你進入dex2jar.bat路徑下后,輸入dex2jar.bat D:\Android\classes.dex,這樣會生成一個jar文件。
2.用rar解壓出jar文件中的class文件,然后用jad或DJ Java Decompiler反編譯工具將.class文件反編譯成.java文件
3、運行JD-GUI工具(它是綠色無須安裝的),打開上面的jar文件,在File下有個Save JAR Source,它可以生成src源代碼。
三、上面操作只能得到class文件,下面利用Google提供的apktool得到xml文件
1. 下載apktool,可以去Google的官方下載,地址:http://code.google.com/p/android-apktool/得,apktool-1.0.0.tar.bz2和apktool-install-windows-2.1_r01-1.zip兩個包都要下。解壓apktool-install-windows.zip到任意文件夾,然后解壓apktool-1.0.0.tar.bz2得到apktool.jar,放到apktool-install-windows解壓后的目錄下。
2. Win+R 運行CMD,用cd命令轉到apktool-install-windows所在文件夾,輸入apktool看看。會列出一些幫助的話就成功了(解釋d為加壓 第一個路徑為你的apk所在的位置。第二個是要輸出的位置)
apktool d e:\a.apk(apk路徑)ABC(文件夾名稱)
這時當前目錄下生成 ABC文件夾,里面就是反編譯出的東西了
常見問題:
一,找不到R文件時:
一般放在res\values\public.xml里
比如,反編譯的類里setContentView(2130903174); 2130903174是十進制的,轉化成十六進制就能夠在public.xml中找到文件名了。
個人推薦使用:WIN7中點擊“開始”--”程序“--“附件”--“計算器”,按 “查看”再選“程序員”,就可以方便的進行各進制的轉換了(如:你要轉換10進制90000000為16進制,點“十進制”,輸入90000000,再點一下“16進制”,就會看到55D4A80,轉換就完成了。其他同理)。
二,連接不上ADB時:
報錯信息:
ADB server didn't ACK * failed to start daemon *
ADB server didn't ACK
* failed to start daemon *
在cmd中進入adb的路徑,輸入命令:adb kill-server,執行完畢后再輸入命令adb start-server,重啟eclipse即可
--------------------------------------------------------------------------
上述方法無效時:
當輸入adb start-server不能夠重啟adb時,反而拋出如下信息:
adb server is out of date.
ADB server didn't ACK
* failed to start daemon *
出現這種問題的原因有可能是adb需要的端口被占用。
在cmd中查看adb需要的端口,輸入命令:adb nodaemon server,顯示結果:can't bind "tcp:5037"
下面就找找5037端口是被哪個進程占用了,輸入命令:netstat -ano | findstr "5037",顯示結果:
TCP 127.0.0.1:5037 0.0.0.0:0 LISTENING 5892
TCP 127.0.0.1:5037 127.0.0.1:1218 TIME_WAIT 0
TCP 127.0.0.1:5037 127.0.0.1:1220 TIME_WAIT 0
所以需要關閉PID為5892的進程。命令tasklist可以查看所有的進程,找到關閉即可。
另外,根據以上方法發占用5892端口的任務是db_adb.exe,這個是金山毒霸連接手機殺毒的任務,在任務管理器中沒有辦法關閉,在右下角的任務列表中右鍵單擊金山毒霸的圖標,關閉手機鏈接,就能夠kill這個任務了。