【轉】一步一步帶你反編譯apk,並教你修改smali和從新打包

1、工具介紹:css

1.apktool:aapt.exe,apktool.bat,apktool.jar;三個在同一目錄結合使用,用來反編譯apk,apk從新打包;java

2.dex2jar:該工具做用是將classes.dex文件,反編譯出源碼(若是apk未加固),反編譯出文件,使用jd-gui工具進行查看;android

3.Auto-Sign:自動簽名工具,將從新打包的apk進行簽名,若是不簽名,沒法安裝使用。工具

工具下載地址:https://download.csdn.net/download/sxk874890728/10443156 (須要3CSDN積分,本來我設置3積分的,不知道爲何漲到16積分了......)ui

使用場景:項目源碼丟失,只有線上apk,而且沒有加固,要求修改apk接口地址,而且從新打包,再發布。spa

2、工具使用:.net

解壓後工具包如圖:插件

這裏寫圖片描述

1.思路:使用工具dex2jar反編譯,並用jd-gui工具進行查看項目結構,查看源碼,而且找到接口地址類,修改接口地址;命令行

步驟一:下載好工具,將須要反編譯的APK後綴名改成.rar或則 .zip,並解壓,如圖:3d

這裏寫圖片描述

獲得其中的classes.dex文件(它就是java文件編譯再經過dx工具打包而成的),將獲取到的

classes.dex複製到解壓出來的工具dex2jar-0.0.9.15 文件夾內,

在命令行下,進入到dex2jar.bat所在目錄,輸入命令:

dex2jar.bat   classes.dex

  

效果以下:

這裏寫圖片描述

步驟二:運行結束後,在該目錄下會生成一個classes_dex2jar.jar的文件,如圖:

這裏寫圖片描述

而後打開工具jd-gui文件夾裏的jd-gui.exe,用該工具打開生成的classes_dex2jar.jar文件,即可以看到源碼

了,效果以下:

這裏寫圖片描述

2.思路:apktool,反編譯修改smali文件,進行從新打包,經過用jd-gui工具找到接口地址類後,與相應

的smali文件進行對比,修改接口地址;

下載上述工具中的apktool,解壓獲得3個文件:aapt.exe,apktool.bat,apktool.jar ,將須要反編譯的

APK文件放到該目錄下,如圖:

這裏寫圖片描述

打開命令行界面(運行-CMD) ,定位到apktool文件夾,輸入如下命令:

apktool.bat d -f test.apk -o test    
apktool -f [待反編譯的apk] -o [反編譯以後存放文件夾]

如圖:

這裏寫圖片描述

反編譯以後會獲得test 文件夾,打開test文件夾,裏邊就是反編譯出來的各類資源文件

這裏寫圖片描述

使用jd-gui查看源碼找到地址類,而後在smali文件裏找到地址的smali文件,更改smali文件內接口地址。 
如圖:

這裏寫圖片描述

smali文件內找到與之對應的地址smali文件

這裏寫圖片描述

這裏寫圖片描述

修改接口smali文件裏的地址將Ip更換成域名如圖:

這裏寫圖片描述

修改後,保存。

3.從新打包。 執行打包命令

apktool.bat b test

  

在test文件內會多出兩個文件以下圖所示:

這裏寫圖片描述

dist文件內就是咱們須要的apk。

4.簽名apk,從新發布。

接下來就要用到簽名工具了,若是不通過簽名是不能正確運行的。工具: auto-sign.zip

將打包好的test.apk 拷貝到解壓好的auto-sign文件夾下,執行命令:

java -jar signapk.jar testkey.x509.pem testkey.pk8 test.apk test_signed.apk 
  • 1

test_signed.apk就是簽名後的apk :

 

5.運行以後,發如今5.0上運行會直接崩潰,android studio捕捉到錯誤所在:

這裏寫圖片描述

這裏是在jd-gui上查看到了源碼位置

錯誤緣由:

Caused by: java.lang.IllegalArgumentException: Service Intent must be explicit: Intent { act=com.sun3d.culturejingan.communication.link }

  

如錯誤提示所示,在android 5.0版本之後,service intent必須爲顯式指出。

那麼就須要修改smali文件相關類,這裏就用到將java2smali文件

6.java2smali插件,地址:https://plugins.jetbrains.com/plugin/7385-java2smali

插件安裝,選擇本地安裝,不懂怎麼安裝插件,請百度下。

找到相應問題的smali文件代碼定位:

這裏寫圖片描述

因爲不太懂smali語法的書寫,因此咱們直接將寫好java代碼用插件轉換爲smali語法,拷貝進來,替換原有smali代碼 
這是java代碼 
這裏寫圖片描述

轉換成smali代碼

這裏寫圖片描述

相應代碼會直接展現,找到相應轉換結果:

這裏寫圖片描述

替換反編譯出的相應smali文件裏的相應代碼,而後執行從新打包命令,簽名命令,執行第3步。

整個過程並不複雜,只要有耐心就能夠更改爲功。

 

反編譯+從新打包+簽名

java -jar apktool.jar d -f zhugechengyu.apk -o MMTS

d2j-dex2jar classes.dex

反編譯從新打包
java -jar apktool.jar b MMTS

生成簽名
keytool -genkey -alias android.keystore -keyalg RSA -validity 36500 -keystore android.keystore

從新簽名
jarsigner -verbose -keystore android.keystore -storepass hzx123 -keypass hzx123 -signedjar zg_signed.apk  zhugechengyu.apk android.keystore

from:https://blog.csdn.net/sxk874890728/article/details/80486223

相關文章
相關標籤/搜索