首先明確,反編譯別人apk是一件不厚道的事情。代碼是程序員辛苦工作的成果,想通過這種手段不勞而獲,是不對的。這也說明,代碼混淆是非常重要的。本文抱著學習的態度,研究在一些特殊的情況下如果有需要,該怎麼反編譯apk。

工具簡介

apktool,編譯和反編譯apk,從apk中提取圖片和佈局資源

dex2jar,將可運行文件classes.dex反編譯為jar源碼文件

jd-gui,查看jar源碼文件

反編譯

apktool安裝

Windows系統:

1. 首先確保系統安裝有Java

2. 下載apktool.bat腳本

3. 下載最新版本的apktool.jar,並且重命名為apktool.jar

4. 將apktool.bat和apktool.jar放在同一目錄下,就可以在命令行窗口使用了。

5. 其他系統請參考鏈接

用法

可以直接在命令行執行apktool.bat查看幫助。這裡介紹兩個最常用的:

反編譯

apktool.bat d [-s] -f <apkPath> -o <folderPath>

註:若不選擇文件夾路徑直接輸 :apktool.bat d -f 1.apk -o 1 將默認生成在系統目錄C:UsersAdministrator;

一. 這裡需要用到另外兩個工具,下載dex2jar並解壓。下載jd-gui,這是一個帶UI的應用程序。

二. 將需要反編譯的apk的後綴名改為.zip或者.rar,然後解壓到一個文件夾,得到其中的classes.dex文件。

三. 將classes.dex複製到解壓後的dex2jar-2.0文件夾下。從命令行進入到該目錄,執行

d2j-dex2jar.bat classes.dex

會生成由classes.dex反編譯得到的jar文件,classes-dex2jar.jar。

四. 然後使用jd-gui打開classes-dex2jar.jar,就可以查看源碼了。

如果apk在發布的時候加過混淆處理,那麼我們也只能得到混淆後的版本。想通過閱讀源碼來破解別人的apk,難度較大,不過有興趣可以網上去研究。

修改代碼

如果只修改apk相應的資源,那麼只要在res文件夾下找到相應的文件替換。

修改代碼比較麻煩,因為反編譯出來的結果中只有smali文件,即Java虛擬機支持的彙編語言。

如果確實需要修改代碼,就得對照smali文件和從classes.dex反編譯出來的源碼了,按照smali的規範來改動即可。相當於寫彙編,難度較大。

五.簽名apk文件:

(如何查看簽名信息:將簽名後的apk文件後綴名改為zip,然後將裡面的META-INF文件夾解壓出來:輸入命令:keytool -printcert –file <簽名文件RSA的路徑>)

簽名文件需要用到keytool.exe和jarsigner.exe,這兩個文件都在Java jdk的bin目錄下:

1,打開命令行輸入以下命令然後回車:

keytool -genkey -alias key.keystore -keyalg RSA -validity 30000 -keystore key.keystore

-genkey 產生證書文件

-alias 產生別名 -keystore 指定密鑰庫的.keystore文件中 -keyalg 指定密鑰的演算法,這裡指定為RSA(非對稱密鑰演算法) -validity 為證書有效天數,這裡我們寫的是30000天

出現如下圖所示隨便照著填填

2,生成出來的keystore要與apk在同一目錄下(一般都默認在系統目錄沒有修改路徑的話C:UsersAdministrator)

命令行再輸入以下命令然後回車:

jarsigner -verbose -keystore key.keystore -signedjar xxx-signed.apk xxx-unsigned.apk key.keystore

xxx-signed.apk 指簽名後的apk文件名xxx-unsigned.apk 原來的apk文件名-verbose 指定生成詳細輸出 -keystore 指定數字證書存儲路徑

這樣,就完成了對一個apk的簽名過程,然後就可以安裝使用了。注意如果你的手機上原來就有這個apk,需先卸載,不然無法安裝。


推薦閱讀:
相關文章