Android 開發系列:Apk反編譯

工具下載:需用到dex2jar和JD-GUI這2個工具

dex2jar下載地址http://laichao.googlecode.com/files/dex2jar-0.0.7-SNAPSHOT.zip
JD-GUI下載地址:
windows版JD-GUI:
http://laichao.googlecode.com/files/jdgui.zip
Linux版JD-GUI:http://laichao.googlecode.com/files/jd-gui-0.3.2.linux.i686.tar.gz

步驟:

1.首先找到Android軟件安裝包中的classes.dex
把.apk文件改名爲.zip,然後解壓縮,得到其中的classes.dex文件,它就是java文件編譯再通過dx工具打包成的,所以現在我們就用上述提到的2個工具來逆方向導出java源文件

2.把classes.dex拷貝到dex2jar.bat所在目錄。
在命令行模式下定位到dex2jar.bat所在目錄,運行 dex2jar.bat classes.dex ,生成classes.dex.dex2jar.jar

3.運行JD-GUI工具(它是綠色無須安裝的)
打開上面的jar文件,即可看到源代碼

二.反編譯apk生成程序的源代碼和圖片、XML配置、語言資源等文件。

轉載自:http://blog.sina.com.cn/s/blog_5752764e0100kv34.html

工具下載:

http://code.google.com/p/android-apktool/下 載獲得,apktool-1.0.0.tar.bz2和apktool-install-windows-2.1_r01-1.zip兩個包都要下。

步驟:

1.解壓縮下載的兩個文件包,apktool-install-windows-2.1_r01-1.zip解壓縮後得到的包裏有aapt.exe 和apktool.bat.(注意要把apktool-1.0.0.tar.bz2解壓後的一個.jar 文件copy進來)

2.打開命令窗口 (開始 > 運行,輸入cmd,回車。)進入到apktool.bat的文件夾裏。

          輸入:

                    apktool d C:\***.apk  C:\***文件夾

(命令行解釋:apktool d 要反編譯的文件 輸出文件夾)

特別注意:你要反編譯的文件一定要放在C盤的根目錄裏,

3.打開 C:\***文件夾 就可以得到我們學院的各種資源了。

個APK反編譯利器Apktool


APK 本地化 


說起APK的漢化,目前大部分教程都是讓用Hex Workshop或者Android ResEdit來做。但是實際操作後,就會發現:
1、Hex Workshop操作繁瑣,經常出現搜不到想要修改的字符的情況;
2、Android ResEdit簡單用用可以,修改稍微複雜一點就會出現整條整條丟字符串的情況;並且新內容不能比原內容長——誰能保證我的本地化語言就一定比原來的短呢?

現在好了,老外寫的《android-apktool》軟件,可以幫助我們把APK反編譯,生成程序的源代碼和圖片、XML配置、語言資源等文件。我們對圖片和語言資源等文件修改後,可以再把它們編譯打包成APK,簽名後就是手機可以安裝的本地化/修正版APK了。

《android-apktool》軟件軟件可以訪問它的主頁http://code.google.com/p/android-apktool/下載獲得,apktool-1.0.0.tar.bz2和apktool-install-windows-2.1_r01-1.zip兩個包都要下。下載後解開,爲了方便使用,按作者的推薦把得到的4個文件複製到C:\Windows文件夾裏。

這個工具是Java寫的,需要你的電腦安裝了JRE或者JDK,並在系統環境變量Path里加入java.exe所在路徑。

以上準備工作做好後,就可以用它來反編譯APK了。這裏我用動態壁紙的APK來做示範。

如果用過動態壁紙,你也許會發現在設置壁紙時,界面的顯示有點問題:“動態壁紙”,在手機上中文顯示爲“當前壁紙”。這是“動態壁紙選擇器”LiveWallpapersPicker.apk的翻譯錯誤造成的。

(假設LiveWallpapersPicker.apk放在C盤根目錄)

開始 > 運行,輸入cmd,回車。
  1. apktool d "C:\LiveWallpapersPicker.apk" "C:\LiveWallpapersPicker"
複製代碼
(命令行解釋:apktool d 要反編譯的文件 輸出文件夾)

這樣,LiveWallpapersPicker.apk就被反編譯了,輸出內容在C:\LiveWallpapersPicker文件夾裏。

打開C:\LiveWallpapersPicker文件夾,我們發現裏面有一些XML文件和一些文件夾。絕大部分情況下,語言和圖片資源都在res文件夾裏,我們這個例子當然不例外。

打開res文件夾,可以其中又是很多文件夾。(又是)絕大部分情況下,語言資源都放在values*文件夾裏。比如說values放默認語言(英語居多),values-de放德語,values-fr放法語等等。一般我們關心的是values-zh-rCN(簡體中文)和values-zh-rTW(繁體中文)。

打開values-zh-rCN文件夾,其中有個strings.xml。打開看看:
<?xml version="1.0" encoding="UTF-8"?>
<resources>
  <string name="application_name">動態壁紙選擇器</string>
  <string name="live_wallpaper_picker_title">當前壁紙</string>
  <string name="live_wallpaper_preview_title">當前壁紙預覽</string>
  <string name="configure_wallpaper">設置...</string>
  <string name="wallpaper_instructions">設置壁紙</string>
  <string name="live_wallpaper_empty">無當前壁紙。</string>
  <string name="set_live_wallpaper">設置壁紙</string>
  <string name="wallpaper_title_and_author">%1$s提供者:%2$s</string>
  <string name="live_wallpaper_loading">正在載入當前壁紙…</string>
</resources>


很好,就是它了。把“當前壁紙”都改爲“動態壁紙”,再檢查和修正標點——中文內容用中文標點(強烈呼籲大家注意標點問題,目前馬大哈太多了)後,保存。

本例改這麼多就夠了。其它複雜的APK建議把res文件夾裏的內容都檢查下,至少你關心的語言文件夾裏的內容都檢查下。

改完後,就可以重打包了。還是在cmd命令行裏,輸入:
  1. apktool b "C:\LiveWallpapersPicker"
複製代碼
(命令行解釋:apktool b 要打包內容所在文件夾)
就可以了。生成的APK在C:\LiveWallpapersPicker\dist文件夾裏,叫out.apk。

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

簽名後得到的APK,就是可以裝到手機裏的了。


操練:去掉免費版軟件的廣告條


打開google code發現Apktool更新了,居然支持win了。。。。
那本文就是一篇介紹在windows環境下使用Apktool的筆記。
安裝

1.先裝JAVA環境,JDK/JRE都行,官網下載 裝過的就跳過吧

2.下載apktool.jar及相關文件,這裏apktool-1.0.0.tar.bz2 apktool-install-windows-2.1_r01-1.zip


3.解壓apktool.jar到 C:\Windows 解壓apktool-install-windows.zip到任意文件夾(例如E盤根目錄)
4.Win+R 運行CMD,用cd命令轉到apktool-install-windows所在文件夾,輸入apktool看看。會列出一些幫助的話就成功了。Apktool 命令

apktool d XXX.apk ABC   反編譯XXX.apk到文件夾ABC
apktool b ABC           從文件夾ABC重建APK,輸出到ABC\dist\out.apk
然後我們反編譯一枚軟件玩玩…
AutoMemoryManager的免費版底部有一條廣告,去掉它吧。
把com.lim.android.automemman.apk放到同文件夾(我的就是E盤根目錄)
Win+R 運行CMD
E:<回車>
E:\>apktool d com.lim.android.automemman.apk AMM <回車>
I: Baksmaling…
I: Decoding resource table…
I: Decoding resources…
I: Copying assets and libs…
現在文件被decode到E:\AMM了,打開E:\AMM\res\layout\main.xml看,所有都可見了吧~
編輯第59行

<com.admob.android.ads.AdView android:id=”@id/ad” android:layout_width=”fill_parent” android:layout_height=”wrap_content” admobsdk:backgroundColor=”#ff000000″ admobsdk:textColor=”#ffffffff” admobsdk:keywords=”Android application” />

改爲

<com.admob.android.ads.AdView android:id=”@id/ad” android:layout_width=”0.0dip” android:layout_height=”0.0dip” admobsdk:backgroundColor=”#ff000000″ admobsdk:textColor=”#ffffffff” admobsdk:keywords=”Android application” />

然後CMD輸入
E:\>apktool b AMM
I: Checking whether sources has changed…
I: Smaling…
I: Checking whether resources has changed…
I: Building resources…
I: Building apk file…
用Auto-sign簽名E:\AMM\dist\out.apk 安裝
這樣廣告就不見了

再看,嘿嘿~很帥吧…
這其實就是改了AndroidManifest.xml裏的ADmob廣告ID罷了

 

 

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