android反編譯apk方法以及一些相關問題解決方案

反編譯方法:
前提:操做系統需配置了jdk
1、找到apk中的class.dex:
把apk文件更名爲.zip,而後解壓縮其中的class.dex文件,它就是java文件編譯再經過dx工具打包成的。
2、獲得java源文件
工具準備:
一、把dex文件反編譯爲jar文件的工具。(dex2jar)
http://code.google.com/p/dex2jar/downloads/list
二、把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文件
三、運行JD-GUI工具(它是綠色無須安裝的),打開上面的jar文件,在File下有個Save JAR Source,它能夠生成src源代碼。
3、上面操做只能獲得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這個任務了。
相關文章
相關標籤/搜索