編輯:Android開發實例
其實按照我的札記的順序,這次本應該寫一寫關於Android的基本的技術和相關的知識。畢竟這樣比較符合邏輯。可是最近學習的時候碰到了關於反編譯方面的知識,所以自己留心進行了一系列的實踐並做了一下總結,希望能夠為大家提供一些幫助。通過反編譯,我們可以去看一下別人的一些Android優秀的應用程序是怎樣寫的,這樣也是一種學習的過程(雖然這種學習有點“不道德”。)
(ps:對於軟件開發人員來說,保護代碼安全也是比較重要的因素之一,不過目前來說Google Android平台選擇了Java Dalvik VM的方式使其程序很容易破解和被修改,首先APK文件其實就是一個MIME為ZIP的壓縮包,我們修改ZIP後綴名方式可以看到內部的文件結構,類似Sun JavaMe的Jar壓縮格式一樣,不過比較去別的是Android上的二進制代碼被編譯成為Dex的字節碼,所有的Java文件最終會編譯進該文件中去,作為托管代碼既然虛擬機可以識別,那麼我們就可以很輕松的反編譯。所有的類調用、涉及到的方法都在裡面體現到,至於邏輯的執行可以通過實時調試的方法來查看,當然這需要借助一些我們自己編寫的跟蹤程序。Google最然在Android Market上設置了權限保護app-private文件夾的安全,但是最終我們使用修改定值的系統仍然可以獲取到需要的文件。)
總結反編譯主要的目的在於學習。利用反編譯進行相關的漢化或修改,還是盡量不要吧,畢竟人家寫個程序不容易啊!
我目前接觸的反編譯的方法總共有三種,分別如下:
1. 第一種反編譯的方法主要是利用模擬器自帶的一個dexdump。
具體如下面的介紹:
反編譯一個.apk文件,需要做以下幾步:1) 找到.apk安裝文件 2)找到安裝軟件的*.dex文件 3)dump dex文件 4)分析dex文件獲取想要的代碼
一、找到apk安裝文件這個比較容易,把手機或者模似器安裝好後,可以在eclipse的File Explorer下找到安裝程序的apk譯文件,也可以通過adb命令找到:
$ adb shell
# cd /system/app
cd /system/app
# ls
二、找到安裝軟件的*.dex文件運行安裝軟件後,會在android文件系統下生成一個*.dex文件,一般在目錄/data/dalvik-cache下,也可以通過adb命令找到:
$ adb shell
# cd /data/dalvik-cache
cd /data/dalvik-cache
# ls
(注意:一般來說,如果你能夠通過File Exploere找到data/dalvik-cache文件,其實一二兩個步驟可以跳過,直接進入adb shell後執行第三步;命令行中直 接輸入adb shell後執行的前提是你已經在系統的環境變量中配置了tools文件,否則你得先cd到tools文件中執行adb.exe後才能執行以後的命令。另外你得確 保自己的虛擬機中安裝了應用程序才能進行下一步的操作。對於系統自帶的程序,我也試了進行反編譯,結果輸出的txt沒有具體內容,沒有成功。有興趣的 話,大家可以試一下。)
三、編譯軟件對應的dex文件,通過以下指令:
#dexdump -d -f -h [email protected]@[email protected] > ophone.text
指令參數解釋:-d : disassemble code sections
-f : display summary information from file header
-h : display file header details
-C : decode (demangle) low-level symbol names
-S : compute sizes only
這執行完了後,大家應該可以在dalcik-cache文件夾下找到ophone.txt文件。如果沒有的話,可以重新啟動虛擬器。 之後我們可以將該txt文件導出到桌面上進行相關操作。(File Explorer中的按鈕)
四、 獲取需要的代碼:打開剛才得到的編譯出來的text文件,會看到形如以下的代碼:
總體來看,這種反編譯的效果不太理想。
第二種是:通過dex2jar工具進行反編譯。(dex2jar:http://code.google.com/p/dex2jar/downloads/list 查看Jar包的GUI工具:http://java.decompiler.free.fr/?q=jdgui)
反編譯步驟:
1、下載一個.apk程序安裝包,將其文件名*.apk改為*.rar後進行解壓。我這兒是將南方周末的讀報器進行反編譯的。 2、 把其中的class.dex拷貝到dex2jar.bat所在目錄。運行dex2jar.bat class.dex,將會在其文件夾下生成classes.dex.dex2jar.jar。 3、可以將jar文件重新命名後拷貝到GUI文件夾下,運行JD-GUI工具(它是綠色無須安裝的),打開上面的jar文件,即可看到源代碼。 與第一種方法相比較,該方法生成的文件全面,代碼整齊,雖然有些中文會出現亂碼,id等全部是數字代替,但整體結構很完整,不錯。
類似的工具還有Dedexer(http://sourceforge.net/projects/dedexer/files/)
具體的應用代碼為(先進入jar包所在路徑):
java -jar ddx.jar -d <directory> <dex file>
可以再其中加入-o,這樣可以生成一個介紹文件內部結構的日志文件。
第三種:網上還流傳著這樣一種用smali工具的方法(http://code.google.com/p/smali/downloads/list):
反編譯命令 java -jar baksmali-1.2.jar <dex文件> -o <新生成的文件名>
重新編譯 java -jar smali-1.2.jar <需編譯文件夾>
本人親自實踐了一下,確實新版本的baksmali可以直接對.apk文件進行直接的反編譯。
但是這種方法生成的文件也不是很好。
說到這兒,對於xml的文件的編譯,需要工具AXMLPrinter2.jar(http://code.google.com/p/android4me/downloads/list)。具體的使用方法,與上面的差不多,可以運用命令 java -jar AXMLPrinter2.jar main.xml > main.txt 進行相關的操作。大家可以參照這位仁兄的(http://hi.baidu.com/linrw/blog/item/cc3afd2233ab88a94723e878.html)
寫這篇不容易啊,希望能夠給大家一點啟示。
轉自:http://www.cnblogs.com/huyipeng/archive/2010/07/25/1784679.html
JSON代表JavaScript對象符號。它是一個獨立的數據交換格式,是XML的最佳替代品。本章介紹了如何解析JSON文件,並從中提取所需的信息。Android提供了四個
可以顯示在的Android任務,通過加載進度條的進展。進度條有兩種形狀。加載欄和加載微調(spinner)。在本章中,我們將討論微調(spinner)。Spinner 用
Android提供了許多方法來控制播放的音頻/視頻文件和流。其中該方法是通過一類稱為MediaPlayer。Android是提供MediaPlayer類訪問內置的媒體播放
可以顯示在的Android任務,通過加載進度條的進展。進度條有兩種形狀。加載欄和加載微調(spinner)。在本章中,我們將討論微調(spinner)。Spinner 用