Android反編譯apk並重新打包簽名(Mac環境)


工具下載

 
 
根據apktool網站提示的下載方法,右擊 wrapper script,鏈接存儲為apktool,不要帶拓展名
 
 
然后點擊 find newest here下載apktool.jar,選擇第一個下載最新版本
 
 
下載完把apktool_2.3.3.jar重命名為apktool.jar,然后把apktool.jar和apktool一起拷貝到/usr/local/bin路徑下
 
 
 
 

這樣環境就配好啦,打開終端,輸入 apktool命令,看到以下輸出說明apktool配置成功
 
 
新建個MyTest目錄方便管理,隨便放個test.apk進去作為測試包
 
 

 

反編譯

終端輸入cd /Users/zachary/zachary/MyTest進入到測試apk所在目錄,輸入apktool d test.apk開始反編譯

 
 
編譯結束可以看到MyTest目錄下多了個test文件夾,里面就是反編譯以后的產物,我們想要的AndroidManifest.xml和res/.等資源文件
 
 
此時資源文件反編譯就完成了,下面繼續反編譯java代碼,這是就要用到 dex2jarjd-gui
下載完 dex2jarjd-gui解壓一下就可以了,復制到MyTest目錄方便操作
 
 
終端進入MyTest目錄,輸入命令 sh dex2jar-2.0/d2j-dex2jar.sh test.apk(如果提示Permission Deny權限問題,先輸入命令 chmod +x dex2jar-2.0/d2j-dex2jar.sh改一下權限就好了)
 
 
運行結束,在MyTest目錄會生成文件test-dex2jar.jar,就是我們需要的java代碼壓縮文件
 
 
右擊用 jd-gui打開(或者先打開jd-gui再把test-dex2jar.jar拖到jd-gui自動導入,就可以看到java代碼啦
 
 
 

回編譯

剛才我們執行apktool d test.apk反編譯得到了test目錄

 
 
 
回編譯就是執行命令 apktool b test
 
 
成功之后,test目錄下會生成build和dist目錄
 
 
build目錄下存放的是打包后的dex文件和資源文件(和apk解壓后一樣一樣的)
 
image.png
dist目錄下存放的是重新打包后的apk文件
 
 

重新簽名

復制簽名文件到dist目錄下方便操作

 
 
 
終端進入dist目錄,執行命令 jarsigner -verbose -keystore [your_key_store_path] -signedjar [signed_apk_name] [usigned_apk_name] [your_key_store_alias] -digestalg SHA1 -sigalg MD5withRSA
字段說明:
  • [your_key_store_path]:密鑰所在位置的絕對路徑
  • [signed_apk_name]:簽名后安裝包名稱
  • [usigned_apk_name]:未簽名的安裝包名稱
  • [your_key_store_alias]:密鑰的別名
因為我們把秘鑰和test.apk放在同一路徑,所以密鑰所在位置的絕對路徑直接填testkey就好啦,macjenkinskey是我的秘鑰別名,別誤會(邪惡.jpg)
 
 
輸一下密碼,看不到輸入的,開始簽名
 
 
 
簽完名后,在dist目錄下就可以看到簽完名后的apk了
 

后話

反編譯的時候,也可以把test.apk的拓展名改成test.zip解壓出來

 
把classes.dex復制到dex2jar-2.0路徑下
 
 
 
終端進入dex2jar-2.0路徑下,執行命令 ./d2j-dex2jar.sh classes.dex
 
 
同樣可以得到classes-dex2jar.jar
 
 
反編譯,再回編譯,同樣可以得到classes.dex,就在這個路徑下
 
 
 
             收工.png

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM