1. 程式人生 > >Android 如何對apk檔案進行反編譯以及重新打包簽名

Android 如何對apk檔案進行反編譯以及重新打包簽名

最近在看視訊的時候看到有關apk檔案如何反編譯的,頓時提起了自己的興趣,記得在剛剛學習Android的時候就對這方面有興趣,只是當時自己的技術…咳…現在自己…咳咳..咳…

注:以下的前提是Java相關環境變數配置完成
我覺得反編譯無非就是能夠得到其apk的資原始檔,以及java程式碼等
常用的工具有:apktool、jeb、Smali2Java等,下面我會一一介紹這幾種工具的用法,展示下自己這兩天的百度成果

檢視幫助:
輸入:

java -jar apktool-v2.0.0RC2.jar

當你把檔案下載下來之後是一個.jar檔案,我一開始也不知道.jar檔案是如何使用,僅僅知道是個架包可以匯入libs下使用,還可以解壓,但這個.jar檔案並不是這樣用的.
在你下載的.jar包所在資料夾下,在搜尋欄輸入cmd回車,開啟dos視窗,或者是直接開啟dos,cd到.jar檔案所在的目錄
反編譯


輸入命令:
apktool-v2.0.0RC2.jar 是.jar檔名稱
d 是反編譯
a.apk 是檔案路徑加名稱,因為我的a.apk和架包apktool在一個資料夾下所以直接輸入檔名稱就可以了

apktool-v2.0.0RC2.jar d a.apk

然後在apktool所在資料夾下會生成一個以apk檔案的名稱命名的資料夾

檔案結構如下:

其中assets、res資料夾對應原來工程中的檔案,這樣就可以原原本本的拿到原專案的圖片、xml檔案,並根據自己的需要進行修改
smali資料夾對應的是原Java檔案,裡面都是.smali檔案,這個檔案是可以修改的,修改他就相當於修改java程式碼。
.smali檔案的內容是用smali語法編寫的,我們一般編寫都是對.java檔案進行編寫.smali檔案閱讀起來著實費力,初學者根本看不懂.smali程式碼,額..至少我看著很暈,如何將其轉化成java程式碼可供閱讀呢?不要著急,在下面我會講到了。

接下來來講解如何對修改後的檔案進行重新打包

輸入以下命令
b 是對修改後的檔案重新打包
a 是剛剛解壓的資料夾

apktool-v2.0.0RC2.jar b a

如果沒有錯誤的話就會生成dist資料夾裡面就是打包的apk檔案

記住如果修改的檔案有錯誤的話,是編譯不通過的,那麼就只會生成
build\apk 資料夾而其中沒有任何東西,也不會生成dist資料夾

這個時候我們已經得到了apk檔案,注意這個時候,因為沒有簽名檔案,apk是無法安裝的

如何對apk檔案重新簽名

輸入命令:

jarsigner -keystore G:\FuZa\WeChatSDK
_sample_Android221cbf\debug.keystore -storepass android -keypass android D:\apktool\a\dist\a.apk androiddebugkey

其中:
G:\FuZa\WeChatSDK_sample_Android221cbf\debug.keystore是debug.keystore路徑
D:\apktool\a\dist\a.apk 是需要重新簽名的檔案路徑加檔名

這個時候我們就對剛剛的apk檔案進行了重新簽名,然後就可以安裝了

如何檢視java原始碼:

下載下來之後解壓:
然後在xxxx\jeb-1.5.201404100_modified_by_scz(20140711)\64-bits\bin
資料夾下執行dos命令(它有32位和64位兩個資料夾,根據自己的需要去執行)

java -jar jeb.jar

然後就會啟動jeb

啟動之後的事情就很簡單了,只需要直接將apk檔案拖入其中就可以了,apk檔案比較大的會有一小會的卡頓是正常現象。

這個時候就是可以檢視原始碼了,
tab鍵可以在smali程式碼和java程式碼中切換
需要注意的是,在jeb中是不可以修改其程式碼的

Smali2Java

使用Smali2Java檢視java原始碼
Smali2Java就跟簡單了,下載檔案之後解壓,得到Smali2JavaUI.exe可執行檔案,開啟檔案,然後檔案→開啟 開啟一個apk檔案就可以檢視原始碼了
注意:Smali2Java也不可修改java程式碼