Android反編譯(二)
之反編譯XML資源文件
[目錄]
1、工具
1).反編譯工具
apktool http://code.google.com/p/android-apktool/downloads/list
命令:
apktool d [目標.apk] [目標文件夾] ---------反編譯(decode)apktool b [文件夾] [編譯之后的名稱.apk]---------編譯(buid)apktool if framework-res.apk --------加載資源(install framework)
2、反編譯步驟
步驟1:將目標apk包,拷貝至apktool工具目錄下
步驟2:CMD進入apktool文件夾,
運行反編譯命令
CMD> apktool d Thinkdirve.apk APK_SRC(意思是將Thinkdirve.apk解包到當前APK_SRC目錄下,APK_SRC文件夾不用創建,會自動生成)
3、重新編譯APK
步驟1:將修改后資源文件后(APK_SRC)的文件夾重命名ThinkDrive_src
步驟2:CMD進入apktool文件夾,
運行打包命令
CMD>apktool b ThinkDrive_src ThinkDrive_src.apk
(注:重新編譯后的APK需要重簽名)
4、實例
>【例:反編譯ThinkDrive.apk】
步驟1: 將ThinkDrive.apk拷貝至apktool文件夾
步驟 2:CMD進入apktool文件夾,運行反編譯命令
結果:
>【例:重新編譯ThinkDrive.apk】
步驟1:將修改后資源文件后(APK_SRC)的文件夾重命名ThinkDrive_src
步驟2:CMD進入apktool文件夾, 運行編譯命令
結果:
5、裝X技巧
寫個批處理,雙擊運行,自動反編譯當前目錄下的所有apk,高端大氣上檔次,低調奢華有內涵啊~~~~
[
a
pktool.bat]
<--運行不了apktool時把這個下到apktool.jar所在目錄
@
echo off
set
PATH=
%CD%;%PATH%;
java -jar "
%~dp0\apktool.jar"
%1 %2 %3 %4 %5 %6 %7 %8 %9
[反編譯.bat]
@ECHO OFF
SETLOCAL ENABLEDELAYEDEXPANSION
REM 作者:Findyou
REM 時間:2013.11.22
REM
SET
C_PATH=
%CD%
FOR
%%I
IN (*.apk)
DO (
ECHO [反編譯
%%I]
ECHO --------------------------------
REM 檢查文件夾,如果已存在則先刪除
SET SRT=
%%I
IF EXIST "
!SRT:~0,-4!_src" (
ECHO [檢查存在目標文件夾]
ECHO [刪除
!SRT:~0,-4!_src]
RD /S /Q
!SRT:~0,-4!_src
)
ECHO [反編譯開始...]
ECHO -------------------------------
ECHO apktool d
!SRT! !SRT:~0,-4!_src
ECHO -------------------------------
REM apktool d %C_PATH%\!SRT! %C_PATH%\!SRT:~0,-4!_src
CALL
apktool.bat d
!SRT! !SRT:~0,-4!_src
ECHO -------------------------------
ECHO [反編譯完成]
ECHO.
)
PAUSE
@
ECHO ON
6、學習總結
1)、什么是反編譯和
編譯
?
反編譯就是把apk解包成可修改的文件
編譯(此處單指反編譯后的重新編譯)就是把修改過的東西重新打包
2)、為什么要反編譯?
稍微懂點的,都知apk的文件可以直接用rar打開。但是如果直接用rar打開xml文件全都是亂碼呢?
3)、什么時候需要反編譯?
程序主要分2種: a).系統應用軟件; b).第三方apk應用。我們在美化或者漢化或者去廣告之類的時候,主要做的動作有2種:
a).替換圖片: 如果只是替換圖片,我們不需要反編譯,替換相應的圖片(注意名稱和格式和分辨率一致),就可以了,這個時候只需要使用rar來做就好了。
b).修改xml文件: 除去圖片文件,apk應用里我們能折騰的就是xml文件了。如上面所說的,如果用rar打開xml文件,是亂碼,所以這個時候我們就需要反編譯了。
4)、什么是簽名?
為了保證每個應用程序開發商合法ID,防止部分開放商可能通過使用相同的Package Name來混淆替換已經安裝的程序,我們需要對我們發布的APK文件進行唯一簽名,保證我們每次發布的版本的一致性(如自動更新不會因為版本不一致而無法安裝)。
我們看到的META-INF文件夾就是簽名的文件夾。
5)、什么時候需要簽名?
a).如果是系統apk應用。如果僅僅是替換圖片,不需要反編譯,也不需要重新簽名,直接用rar替換就可以.如果進行了反編譯,修改完xml文件之后,我們需要把他重新編譯回去。編譯好的應用不能直接放入手機內用,因為系統只認識他給的簽名,而我們自己簽名是不被認可的。處理方法:我們把之前從系統拿出來的原版apk起名為a.apk,把自己修改完畢,並且編譯的好的應用起名為b.apk。用rar打開a.apk和b.apk,然后把b.apk里的resources.arsc文件直接拖到a.apk的壓縮包里,然后把更換的圖片以及修改過的XML文件也替換進去。 這個時候,我們做的相當於僅僅替換了一些資源,我們還是用a.apk的簽名。替換完之后,就可以直接使用了。 如果有的時候修改過smali文件夾,就需要把class.dex文件也copy過去。b).如果是第三方apk應用第三方的apk應用,不管你修改了圖片還是反編譯了,都需要重新簽名。方法是把 META-INF 里面的除了COM文件夾都刪掉,就是刪掉MF,SF,RSA這三個后綴名的文件然后使用工具簽名。安裝的時候要把原有的應用刪掉再安裝。
6)、簽名工具
簽名生成:keytool
重新簽名:jarsigner
優化APK:zipalign
重簽名,下篇有時間再寫博分享。
轉載請注明出處:Findyou