Android應用程式破解(反編譯)
阿新 • • 發佈:2019-01-27
一、apktools進行反編譯
1.首先安裝需要JAVA環境(JDK和JRE)
設定JAVA環境變數
CLASSPATH %JAVA_HOME%\lib\dt.jar;%JAVA_HOME%\lib\tools.jar
JAVA_HOME C:\Program Files\Java\jdk1.8.0_20
Path %JAVA_HOME%\bin;C:\Program Files\Java\jre1.8.0_20\bin
2.下載apktools並解壓
(1)下載apktool_2.0.0rc4.jar和apktool-install-windows-r04-brut1.tar.bz2
(2)把兩個檔案都解壓放在同一個目錄,共三個檔案
aapt.exe
apktool.bat
apktool.jar
其中,apktool.jar用於解包,apktool.jar和aapt.exe聯合用於打包。
(3)點選開始選單。執行,輸入CMD回車,用cd命令轉到剛剛解壓apktool-install-windows所在的資料夾,輸入apktool,出現一些命令說明即成功安裝。當然,我們也可以將三個檔案直接放在C盤的Windows目錄,就可以直接使用apktool。
3.apktools使用方法 (1)反編譯與打包命令 反編譯命令:usage: apktool d[ecode] [options] <file_apk>
-f,--force Force delete destination directory.
-o,--output <dir> The name of folder that gets written. Default is apk.ou t
-p,--frame-path <dir> Uses framework files located in <dir>.
-r,--no-res Do not decode resources.
-s,--no-src Do not decode sources.
-t,--frame-tag <tag> Uses framework files tagged by <tag>.
打包命令:usage: apktool b[uild] [options]
<app_path>
-f,--force-all Skip changes detection and build all files.
-o,--output <dir> The name of apk that gets written. Default is dist/name .apk
(2)將apk應用存放到當前目錄(這裡假設為D盤根目錄),反編譯
然後,在當前目錄看到反編譯的資料夾"2015" 二、apktools進行重新打包
當我們對破解後的apk修改後,可以重新打包回APK檔案,執行命令:apktool b <decode_dir> ,然後我們在當前目錄下看到打包好的APK。由於apk還沒有簽名,一般是無法安裝的。此時,可以通過keytool工具生成證書(.keystore檔案),最後使用jarsigner工具對apk應用進行簽名即可。 具體步驟如下: 1.使用apktool重寫打包成apk 將破解後修改的應用原始碼重寫打包回apk,主要使用aapt.exe 、apktool.jar 兩個工具。需要注意的是,最好是從谷歌官方網站下載最新版的aapt.exe(也可從Android SDK的build-tools目錄下拷貝)和apktool工具。
2.使用keytool工具生成簽名證書 keytool -genkey -v-keystore 2015.keystore-alias 2015.keystore-keyalg RSA -validity 20000 說明: 1)keytool是工具名稱,-genkey意味著執行的是生成數字證書操作,-v表示將生成證書的詳細資訊打印出來,顯示在dos視窗中; 2)-keystore2015.keystore 表示生成的數字證書的檔名為“2015.keystore”; 3)-alias2015.keystore 表示證書的別名為“2015.keystore”,當然可以不和上面的檔名一樣; 4)-keyalg RSA 表示生成金鑰檔案所採用的演算法為RSA; 5)-validity 20000 表示該數字證書的有效期為20000天,意味著20000天之後該證書將失效 在執行上面的命令生成數字證書檔案時,會提示你輸入一些資訊,包括證書的密碼,示例如下: 注:執行命令成功,系統會在當前目錄(C:\Users\jiangdongguo)生成一個"2015.keystore"的證書。 3.使用jarsigner工具為Android應用程式簽名 jarsigner -verbose -keystore2015.keystore -signedjar2015_signed.apk 2015.apk 2015.keystore 說明: 1)jarsigner是工具名稱,-verbose表示將簽名過程中的詳細資訊打印出來,顯示在dos視窗中; 2)-keystore2015.keystore 表示簽名所使用的數字證書所在位置,這裡沒有寫路徑,表示在當前目錄下; 3)-signedjar 2015_signed.apk 2015.apk 表示給notepad.apk檔案簽名,簽名後的檔名稱為2015_signed.apk; 4)最後面的2015.keystore 表示證書的別名,對應於生成數字證書時-alias引數後面的名稱 註釋: keytool工具:該工具位於jdk安裝路徑的bin目錄下; jarsigner工具:該工具位於jdk安裝路徑的bin目錄下;
3.apktools使用方法 (1)反編譯與打包命令 反編譯命令:usage: apktool d[ecode] [options] <file_apk>
然後,在當前目錄看到反編譯的資料夾"2015" 二、apktools進行重新打包
當我們對破解後的apk修改後,可以重新打包回APK檔案,執行命令:apktool b <decode_dir> ,然後我們在當前目錄下看到打包好的APK。由於apk還沒有簽名,一般是無法安裝的。此時,可以通過keytool工具生成證書(.keystore檔案),最後使用jarsigner工具對apk應用進行簽名即可。 具體步驟如下: 1.使用apktool重寫打包成apk 將破解後修改的應用原始碼重寫打包回apk,主要使用aapt.exe 、apktool.jar 兩個工具。需要注意的是,最好是從谷歌官方網站下載最新版的aapt.exe(也可從Android SDK的build-tools目錄下拷貝)和apktool工具。
2.使用keytool工具生成簽名證書 keytool -genkey -v-keystore 2015.keystore-alias 2015.keystore-keyalg RSA -validity 20000 說明: 1)keytool是工具名稱,-genkey意味著執行的是生成數字證書操作,-v表示將生成證書的詳細資訊打印出來,顯示在dos視窗中; 2)-keystore2015.keystore 表示生成的數字證書的檔名為“2015.keystore”; 3)-alias2015.keystore 表示證書的別名為“2015.keystore”,當然可以不和上面的檔名一樣; 4)-keyalg RSA 表示生成金鑰檔案所採用的演算法為RSA; 5)-validity 20000 表示該數字證書的有效期為20000天,意味著20000天之後該證書將失效 在執行上面的命令生成數字證書檔案時,會提示你輸入一些資訊,包括證書的密碼,示例如下: 注:執行命令成功,系統會在當前目錄(C:\Users\jiangdongguo)生成一個"2015.keystore"的證書。 3.使用jarsigner工具為Android應用程式簽名 jarsigner -verbose -keystore2015.keystore -signedjar2015_signed.apk 2015.apk 2015.keystore 說明: 1)jarsigner是工具名稱,-verbose表示將簽名過程中的詳細資訊打印出來,顯示在dos視窗中; 2)-keystore2015.keystore 表示簽名所使用的數字證書所在位置,這裡沒有寫路徑,表示在當前目錄下; 3)-signedjar 2015_signed.apk 2015.apk 表示給notepad.apk檔案簽名,簽名後的檔名稱為2015_signed.apk; 4)最後面的2015.keystore 表示證書的別名,對應於生成數字證書時-alias引數後面的名稱 註釋: keytool工具:該工具位於jdk安裝路徑的bin目錄下; jarsigner工具:該工具位於jdk安裝路徑的bin目錄下;
三、常見問題
1.關於安裝和管理framework檔案
1. $ apktool d HtcContacts.apk 2. I: Loading resource table... 3. I: Decoding resources... 4. I: Loading resource table from file: /home/brutall/apktool/framework/1.apk 5. W: Could not decode attr value, using undecoded value instead: ns=android, name=drawable, value=0x02020542 6. ... 7. W: Could not decode attr value, using undecoded value instead: ns=android, name=icon, value=0x02020520 8. Can't find framework resources for package of id: 2. You must install proper framework files, see project website for more info. ... ... ... W: Could not decode attr value, using undecoded value instead: ns=android, name=hardwareAccelerated, value=0xffffffff ...原因:C:\Users\jiangdongguo\apktool\framework\1.apk版本過低。在使用apktool進行反編譯前不需要做其他的事情,然而由於有的廠商,如HTC,三星等,他們定製了framework檔案並且在他們的系統應用中使用了這些檔案,為了能正常的反編譯這些apk檔案,你就必須從你的裝置中拷貝出framework檔案並且安裝到apktool中。
解決方案:
這裡假設framwork-res.apk檔案都放在d盤根目錄
2.出現public.xml資源沒有定義錯誤
原因:
其實在編譯過程中會遇到很多其他的問題,大多數是由於刪除、修改、添加了資源後,沒有對應的修改res\values\public.xml檔案而造成的。
解決方案
(1)public.xml檔案中的資源不能重複定義。
(2)public.xml檔案中的任意兩個資源的ID不能一樣
(3)public.xml檔案中定義的資源必須能找到該檔案(如果你刪除了一些檔案,必須要對應的刪除public.xml中的該行)
(4)public.xml檔案中儘可能全面(如果你添加了某資源,最好確保在public.xml中也新增)
(5)public.xml檔案中的資源的ID儘可能連續(當你為新增的檔案新增宣告時,賦予的ID儘可能是連續的)
總結:很多時候都是因為apktool版本過低導致的錯誤,為此我們需要去谷歌官網下載最新版的apktool和aapt.exe工具,然後直接放在系統盤(C)的Windows目錄下即可。