天天看點

mac下apk的反編譯、修改源碼、重新打包下載下傳相關工具反編譯——看源碼反編譯——修改源碼

請大家不要用此方法對apk做惡意修改,維護世界和平。

下載下傳相關工具

  • Apktool: 反編譯apk的工具

    https://ibotpeaches.github.io/Apktool/install/

    根據安裝向導,完成安裝

  • dex2jar: 将dex轉換成class檔案的工具

    https://sourceforge.net/projects/dex2jar/files/

  • JD-GUI: 檢視class源碼的圖形化工具

    http://jd.benow.ca/

反編譯——看源碼

一、用Apktool反編譯整個項目

apktool d -s {apk路徑}// -s 不反編譯源碼
           

預設會将apk反編譯到目前目錄下,檔案結構如下圖:

mac下apk的反編譯、修改源碼、重新打包下載下傳相關工具反編譯——看源碼反編譯——修改源碼

Android項目的三大部分:代碼、資源檔案、清單檔案。

目前資源檔案和清單檔案可以直接檢視了,而classes.dex則是代碼。

二、用dex2jar反編譯dex

将dex2jar壓縮包解壓,執行d2j-dex2jar:

預設會将dex轉換的jar存放在目前目錄下。

如果出現錯誤 d2j_invoke.sh: Permission denied,執行指令如下:

sudo chmod +x d2j_invoke.sh
           

三、用JD-GUI檢視jar檔案

将JD-GUI壓縮包解壓,運作之。

mac下apk的反編譯、修改源碼、重新打包下載下傳相關工具反編譯——看源碼反編譯——修改源碼

用工具打開上面新出爐的jar,即可檢視jar中的class檔案源碼。

mac下apk的反編譯、修改源碼、重新打包下載下傳相關工具反編譯——看源碼反編譯——修改源碼

至此,已經實作了檢視apk中的所有内容。

反編譯——修改源碼

下面在可檢視源碼的基礎上,要對apk的源碼進行修改并重新打包。

改源碼

當然,并不是所有的代碼都可以改,比如已經編譯出來的id等等。但是簡單的增/删/改一些小邏輯,還是沒有問題的。

一、用Apktool重新反編譯apk

這次apktool不需要加-s

反編譯出來的檔案裡,smali檔案夾代替了上面的classes.dex。但smali的目錄結構與上面的class目錄結構是相同的,依然可以找到上面的AlarmListActivity,如圖:

mac下apk的反編譯、修改源碼、重新打包下載下傳相關工具反編譯——看源碼反編譯——修改源碼

二、修改對應的smali檔案

Smali可以了解為是Dalvik編譯出來的代碼。Smali文法需要自行查閱學習,但如果你隻做簡單的修改,可以複制現有的smali代碼。

比如,我要在AlarmNotifyActivity的release方法中加一句finish。可以先在class源碼中找到AlarmListActivity中的finish位置,再找到對應的smali代碼并複制,然後粘貼在AlarmNotifyActivity對應的smali檔案中。

PS:注意複制過來的代碼中,資訊是否與目前類對應

mac下apk的反編譯、修改源碼、重新打包下載下傳相關工具反編譯——看源碼反編譯——修改源碼

Apktool重新打包

一、打包apk

修改完源碼,需要打包成apk,運作程式。

打包出來的apk存放在項目目錄中的dist檔案中,該apk處于未簽名狀态。

二、簽名apk

由于你的keystore與原開發者的keystore不同,是以簽名後的apk與原apk的簽名肯定不同。但可以在裝置上先解除安裝原來的app,再重新安裝新的apk。

繼續閱讀