關於Android APK反編譯

audered發表於2012-04-16

關於Android APK反編譯的探索

 

        注意:本文所講反編譯僅限學習程式碼和研究,不得用來非法破解軟體侵權。特此宣告!

        近幾年學Android應用開發的越來越多了,既然Android也是用Java開發的應該能反編譯從而得到原始碼。經過一番查詢加上測試真解決了這個問題。

        首先將apk檔案,用winrar解壓縮軟體開啟,把其中的classes.dex取出來複製到軟體dex2jar解壓縮的目錄裡

一、反編譯Apk得到原始碼方法的步驟:

首先要下載兩個工具軟體:dex2jar和JD-GUI

前者是將apk中的classes.dex 轉化成Jar檔案,而JD-GUI是一個反編譯工具,可以直接檢視Jar包的原始碼。以下是下載地址:

dex2jar:http://laichao.googlecode.com/files/dex2jar-0.0.7-SNAPSHOT.zip

JD-GUI:http://laichao.googlecode.com/files/jdgui.zip

1.執行CMD,或者在DOS裡執行:

dex2jar.bat   classes.dex

這樣就生成 classes.dex.dex2jar.jar

生成jar檔案的後目錄截圖如下:

2.這個檔案用JD-GUI軟體裡執行jd-gui.exe就可以開啟,看到原始碼了!

 

二、反編譯apk生成程式的原始碼和圖片、XML配置、語言資源等檔案

如果用來只是漢化軟體,這對您將特別有用。

首先還是下載工具,這次用到的是apktool

下載地址:http://code.google.com/p/android-apktool/downloads/list

下載:apktool1.4.3.tar.bz2 和 apktool-install-windows-r04-brut1.tar.bz2(兩個包都下載)

 

過程:

將下載的兩個包解壓到同一個資料夾下,應該有三個檔案:aapt.exe,apktool.bat,apktool.jar

在命令列轉到到apktool.bat所在資料夾,輸入以下命令:apktool d E:\xx.apk E:\xx資料夾,如下圖:

 

命令列解釋:apktool   d   [apk檔案 ]   [輸出資料夾]

AndroidManifest.xml等等都在這個資料夾中,開啟看就可以了。

這個工具還可以打包。當您把檔案更改以後再組裝成APK時候用用到了。

命令列解釋:apktool   b   [apk檔案 ]   [輸出資料夾]

輸出的資料夾一般為C盤裡能找到那個.APK檔案。

123 

        既然這些破解都這麼容易,那麼應用開發的程式設計師怎麼保護自己呢?Google似乎也發現了這個問題,從SDK2.3開始在android-sdk-windows/tools/下面多了一個proguard資料夾,proguard是一個java程式碼混淆的工具,通過proguard,反編譯經過程式碼混淆的apk得到的程式碼別人即使反編譯你的apk包,也只會看到一些讓人很難看懂的程式碼,從而達到保護的作用。


相關文章