Android反彙編教程



從今天開始做一個幸福的人,面朝大海 春暖花開。。。。。

[android反編譯小結]apktool/ AXMLPrinter2.jar/ dex2jar.bat/ jd-gui/Jodeclipse/ JadClipse

開篇:

對於軟件開發人員來說,保護代碼安全也是比較重要的因素之一,不過目前來說Google Android平臺選擇了Java Dalvik VM的方式使其程序很容易破解和被修改,首先APK文件其實就是一個MIMEZIP的壓縮包,我們修改ZIP後綴名方式可以看到內部的文件結構,類似Sun JavaMeJar壓縮格式一樣,不過比較去別的是Android上的二進制代碼被編譯成爲Dex的字節碼,所有的Java文件最終會編譯進該文件中去,作爲託管代碼既然虛擬機可以識別,那麼我們就可以很輕鬆的反編譯。所有的類調用、涉及到的方法都在裏面體現到,至於邏輯的執行可以通過實時調試的方法來查看,當然這需要藉助一些我們自己編寫的跟蹤程序。Google最然在Android Market上設置了權限保護app-private文件夾的安全,但是最終我們使用修改定值的系統仍然可以獲取到需要的文件。"

                                                                  from:  http://www.cnblogs.com/huyipeng/archive/2010/07/25/1784679.html

搞過幾天android的朋友都知道,將apk文件解壓後有兩部分文件需要處理,一種是xml文件,另一種一個dex文件(.dex),我們可以從.dex文件中得到.class,利用後者再得到大家垂涎已久的java文件。
下面分別針對這三種格式的文件進行反編譯處理;

還是先對此過程作個大致介紹吧:

 如果上面的步驟都可以自我完成了,那麼,下面對這幾個軟件的詳細介紹就可忽略不看!

這幾個軟件,細分開來介紹(用步驟A(A1,A2), B, C(C1,C2,C3), ABC分別代表三個不同的步驟):
A1. apktool:
通常用於生成程序的源代碼和圖片、XML配置、語言資源等文件。我們對圖片和語言資源等文件修改後,可以再把它們編譯打包成APK,簽名後就是手機可以安裝的本地化/修正版APK了。支持Linux Windows下工作
安裝步驟:
1.
安裝JAVA環境(官方推薦jdk 1.6);
2.
下載apktool.jarhttp://code.google.com/p/android-apktool/downloads/list
點擊下載apktool1.3.2.tar.bz2 apktool-install-windows-2.2_r01-3.tar.bz2(不一定是這個,但最好選最新版本的吧!)
3.
解壓apktool1.3.2.tar.bz2得到apktool.jar
解壓apktool-install-windows.zip到任意文件夾,將apktool.jar拷入此文件夾中(也有人說是直接全部拷入C:/Windows,一樣的);
(目前此文件夾中有三個文件:apktool.jar/apktool.bat/aapt.exe
4.cmd
命令行進入到解壓apktool-install-windows-2.2_r01-3.tar.bz2所得的文件夾,輸入apktool測試是否安裝成功;

安裝成功後,下面開始反編譯過程:

這個out.apk是沒有簽名的,所以不能直接裝到手機裏。簽名工具和方法見http://www.hiapk.com/bbs/thread-21261-1-1.html,這裏就不說了。簽名後得到的APK,就是可以裝到手機裏的了。

A2. AXMLPrinter2.jar
將它放到android-sdk-windows-1.5_r3\tools文件夾中
運行cmd,進入tools目錄,運行java -jarAXMLPrinter2.jar main.xml > main.txt
於是我們就得到了反編譯後的XML文件;

經歷了這麼多,我們得到的只是部分佈局文件和資源文件,但java文件還是"猶抱琵琶半遮面"


下面,讓我們掀起她的紅蓋頭來:


B. dex2jar
下載:http://code.google.com/p/dex2jar/downloads/list
方法:
1.
首先找到Android軟件安裝包中的classes.dex (解壓得到);
它就是java文件編譯再通過dx工具打包成的,所以現在我們就用上述提到的2個工具來逆方向導出java源文件
2.
classes.dex拷貝到dex2jar.bat所在目錄;
在命令行模式下定位到dex2jar.bat所在目錄,運行 dex2jar.bat classes.dex
,生成classes.dex.dex2jar.jar,成功了一半!

C1. JD-GUI
下載:http://java.decompiler.free.fr/?q=jdgui
方便好用,直接解壓得到JD-GUI,用它打開上面的jar文件,File-->Save JAR Source,即可看到夢寐以求的java源代碼;

我們也可以解壓B步驟得到的jar文件得到class文件,到這裏,我們就要用到JodeclipseJadClipse了;
C2. Jodeclipse---JodeEclipse插件

C3. JadClipse---JadEclipse插件
關於這兩個Eclipse插件的安裝可見下面鏈接:
http://tgyd2006.javaeye.com/blog/553061
(C4.
還有朋友提到DJ Java Decompiler,沒用過,可以一試!)

但也有人提出此問題:
自從eclipse升級到3.3以後jad插件就一直沒有成功的安裝上去,網上看了好多文章也是以前版本的安裝方法,3.3目前通過eclipsesoftware update的插件安裝方式已經不行了。
解決方法如下:
1.
http://www.kpdus.com/jad.html#download地址下載最新的jad,我目前下載的是jadnt158.zip
2.
http://nchc.dl.sourceforge.net/s ...jadclipse_3.3.0.jar地址下載jadclipse_3.3.0.jar,拷貝到eclipseplugins目錄下;
3.
啓動或重起eclipse,修改window -> Preferences -> Java ->JadClipse 下的
Path to decompiler
如:D:\eric\jadnt158\jad.exejadnt158.zip解壓後的目錄);
4.Windows -> Perference -> General -> Editors -> File Associations
中修改“*.class”默認關聯的編輯器爲“JadClipse Class File Viewer”
大功告成,之後在java類裏按住ctrl點擊類就可以看到它jad反編譯後的源帶碼了;
如果發現安裝了沒有效果,可以刪除eclipse主目錄下的\configuration\org.eclipse.update後,再執行eclipse -clean試試


最後,將得到的java文件和得到的xml文件組合可得一個android工程,即可得到相對比較完整的apk源碼;但也有些額外加的包沒被編譯出來。


但做到這一步已經足夠用於學習,我們的目的也就達到了!

有人會說程序可以用混淆器擾亂代碼,但剛從網上看到的一種關於混淆器的說法:
用混擾器的代碼一般就是去掉所有註釋和把變量名、方法名和類名變成一些沒意義的名字。反編譯後一般都變成a, b , c,...這樣的名字,只能一點點的看懂,再利用Eclipse的改名方法,一次性的吧相關的名字改成有意義的名稱。

 所以,大家的關鍵代碼最好還是打成.so庫吧!要不會被一些人搞得內褲都沒得穿!

特此感謝:
http://blog.csdn.net/Android_Tutor/archive/2010/07/09/5724435.aspx
http://www.cnblogs.com/huyipeng/archive/2010/07/25/1784679.html

大家也可關注以上兩篇文章,用的不同方法(dexdump baksmali.jar smali.jar),效果也都還不錯!

如果大家有什麼關於防止反編譯比較好的的技巧,可以留言告知,所有程序員都會感謝你的!

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章