關於apk文件的反編譯與防反編譯

         對於一隻程序猿來說,有時候看到一個很不錯的應用軟件恨不得馬上把它解體,看看是怎麼寫出來的。今天在寫一個手電筒應用小程序查資料時,在360手機助手裏看到一個很不錯的手電筒的小程序,然後很想看看是它怎麼寫出來的,學習下前輩的經驗。於是就這樣開始了今天對於反編譯的研究。在網上查看了一些資料,然後自己進行了下總結,順便和大家分享下。反編譯的詳細過程如下:
1.下載工具
        需要如下四個反編譯工具:
dex2jar、JD-GUI、apktool、apktool-install-windows-r05-ibot  
        下載地址:http://code.google.com/p/innlab/   頁面的Downloads下可以找到對應的工具

         

 2.解壓apk文件
        apk格式的文件其實也是一種壓縮文件,利用一般的解壓工具可以直接進行解壓。如:

  解壓前:解壓後:

3.反編譯.dex文件
        
解壓下載的dex2.jar,把解壓後的文件夾放到系統盤根目錄下並把這個目錄加到系統path變量中,就可以直接用dex2jar.bat轉換dex文件
     配置系統path變量:右擊我的電腦->屬性->高級->環境變量,然後在系統的path變量下加;xxx。xxx表示dex2.jar的目錄。
        在dos下跳到dex2.jar的解壓目錄下,然後輸入如下命令:
dex2jar.bat classes.dex。
        如:

這時你會發現之前的dex2.jar 解壓目錄下多了一個classes_dex2jar.jar 的文件。

 4.反編譯.jar文件
     
打開壓縮文件JD-GUI,運行jd-gui.exe,打開之前生成生成的.jar文件,就可看到源代碼了。

5.反編譯xml文件
        通過以上步驟雖然說可以看到程序的源代碼,但當你打開其中的xml文件想看看程序是如何佈局的時候,你會發現仍然是亂碼,所以這時我們需要反編譯xml文件。
     將下載的 
apktool、apktool-install-windows-r05-ibot 解壓到同一個文件夾中,使之可以看到以下3個文件:


 同樣配置好該目錄的path變量,如第三步。打開dos跳到該目錄下,輸入:apktool d C:\a.apk C:\a。注意apk文件名或目錄名最好不要是中文並且不能帶空格,之前我就是因爲這樣出現了坑爹的錯誤,然後將手電筒 2.0.1.apk改名爲a.apk錯誤才解決。
解釋:c:\a.apk爲要反編譯的文件,c:\a表示反編譯後的存放的目錄,若存在該目錄可以輸入apktool d -f C:\a.apk C:\a進行覆蓋。


 進行了該操作之後我們就可以看到c:\a下了有反編譯後的文件,打開xml文件發現也不再是亂碼。

 好了,通過以上一些步驟就可以自己對原作者的代碼進行肆意修改了。 
            
            有時候某些作者爲了防止被反編譯,使用了混淆工具,會讓代碼讓人很難以看懂,但是一般花點時間還是能看懂大概的。
            其實使用混淆比較簡單,只要在exlipse的配置文件中加入一句代碼就ok:
proguard.config=proguard.cfg。

 如圖:

(這篇文章是我以前在自己空間寫的,現在放在csdn博客,分享給大家,希望能給需要的人帶來幫助!有不當的地方也請大家指正,謝謝!)

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