快速反編譯APK,新增反編譯之后的文件重新打包(Mac環(huán)境)

準(zhǔn)備工作,工具下載配置

反編譯會(huì)使用到的工具有apktool、dex2jar、jd-gui.

現(xiàn)在開始下載安裝和配置

  • apktool配置
    1.右鍵保存鏈接為apktool wrapper script
    2.apktool.jar下載地址 打開可以看到歷史版本列表,可以選擇最新版本的,此教程使用的版本為:2.1.1. 下載成功重命名為apktool.jar.
    3.將apktool.jar和apktool拷貝到/usr/local/bin(需要root權(quán)限)
    4.修改這兩個(gè)文件的權(quán)限: chmod + x
    5.現(xiàn)在就可以在終端運(yùn)行apktool命令了。配置正常運(yùn)行apktool命令顯示如下:

Apktool v2.1.1 - a tool for reengineering Android apk files
with smali v2.1.2 and baksmali v2.1.1
Copyright 2014 Ryszard Wi?niewski brut.alll@gmail.com
Updated by Connor Tumbleson connor.tumbleson@gmail.com
……
For additional info, see: http://ibotpeaches.github.io/Apktool/
For smali/baksmali info, see: https://github.com/JesusFreke/smali

* dex2jar下載配置  
1.[dex2jar下載地址](https://sourceforge.net/projects/dex2jar/),下載后可以看到目錄`dex2jar-2.0/`,查看目錄文件如下圖所示:
    ```
lasses.dex                     d2j-jar2jasmin.sh
d2j-baksmali.bat               d2j-jasmin2jar.bat
d2j-baksmali.sh                d2j-jasmin2jar.sh
d2j-dex-recompute-checksum.bat d2j-smali.bat
d2j-dex-recompute-checksum.sh  d2j-smali.sh
d2j-dex2jar.bat                d2j-std-apk.bat
d2j-dex2jar.sh                 d2j-std-apk.sh
d2j-dex2smali.bat              d2j_invoke.bat
d2j-dex2smali.sh               d2j_invoke.sh
d2j-jar2dex.bat                lib
d2j-jar2dex.sh                 old_jinrong_classes.jar
d2j-jar2jasmin.bat

2.修改*.sh的權(quán)限:
執(zhí)行命令:chmod a+x *.sh

  • jd-gui下載配置
    jd-gui下載地址
    下載成功直接打開名為jd-gui的文件就可以使用

工具都準(zhǔn)備好了,現(xiàn)在開始反編譯

1.反編譯AndroidManifest和資源文件

為了防止文件目錄太亂,最好新建一個(gè)目錄進(jìn)行以下操作此教程使用/WorkSpace/apkDecompileTest/(根據(jù)個(gè)人習(xí)慣),將需要反編譯的apk(此教程使用testapp.apk)和dex2jar-2.0/均拷貝到該目錄.

使用apktool工具反編譯apk,可以獲取到AndroidManifest.xml和使用到的資源文件

使用命令:$ apktool d testapp.apk
會(huì)看到一些日志輸出,等執(zhí)行完畢將會(huì)看到在目錄下多了一個(gè)目錄testapp/,其中就包含我們想要的AndroidManifest.xmlres/.
此時(shí)資源文件反編譯就完成了,下面繼續(xù)反編譯java代碼.

2.反編譯java代碼

使用dex2jar工具可以反編譯apk的java代碼,下面會(huì)介紹2種方式進(jìn)行反編譯.

方法一

1.先解壓縮.apk文件
#unzip testapp.apk -d testapp_source // 解壓縮testapp.apk并將解壓縮的文件放到目錄testapp_source/中
2.在目錄testapp_source/中可以看到有個(gè)classs.dex,接下來執(zhí)行
sh dex2jar-2.0/d2j-dex2jar.sh testapp_source/classes.dex // 將.dex文件反編譯為.class文件
執(zhí)行完畢就可以在該目錄看到多了一個(gè)文件classes-dex2jar.jar,此時(shí)使用jd-gui打開該文件就可以看到j(luò)ava代碼了。

方法二

1.直接執(zhí)行
sh dex2jar-2.0/d2j-dex2jar.sh testapp.apk
同樣可以看到目錄下多了一個(gè)文件testapp-dex2jar.jar,使用jd-gui打開該文件跟方法一看到的是一樣的。
方法二相比較比方法一少了解壓縮的步驟。

注意

在目錄中修改.sh的權(quán)限
chmod a+x *.sh
否則直接執(zhí)行會(huì)提示:
d2j-dex2jar.sh: line 36: ./d2j_invoke.sh: Permission denied

此處可以做一些修改(請(qǐng)保證原App不會(huì)被惡意修改)!

重新打包

apktool b testapp // 在testapp的上一層目錄中執(zhí)行該命令
成功執(zhí)行之后會(huì)發(fā)現(xiàn)目錄testapp/中多了兩個(gè)目錄dist/ 和 build/,其中dist/中就是我們重新打包出來的安裝包。
接下來對(duì)生成的apk進(jìn)行簽名,執(zhí)行下面的命令行:
jarsigner -verbose -keystore testapp.keystore -signedjar testapp-signed.apk testapp.apk testapp.keystore -verbose 輸出簽名詳細(xì)信息 -keystore 指定密鑰對(duì)的存儲(chǔ)路徑 -signedjar 后面三個(gè)參數(shù)分別是簽名后的apk、未簽名的apk和密鑰對(duì)的別名

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

推薦閱讀更多精彩內(nèi)容

  • 學(xué)習(xí)的方式有很多種,Read the fucking source code 絕對(duì)不失為最佳的方式。除了閱讀 An...
    亦楓閱讀 3,581評(píng)論 2 18
  • 聲明:本文作者授權(quán)微信公眾號(hào)Android程序員(AndroidTrending)在微信公眾號(hào)平臺(tái)原創(chuàng)首發(fā)。 最近...
    ec95b5891948閱讀 14,728評(píng)論 14 165
  • apk是安卓工程打包的最終形式,將apk安裝到手機(jī)或者模擬器上就可以使用APP。反編譯apk則是將該安卓工程的源碼...
    隋胖胖LoveFat閱讀 66,747評(píng)論 6 56
  • 有很多帖子對(duì)這種技術(shù)作了詳解,我也一步一步來實(shí)現(xiàn)一下,做個(gè)記錄。 三個(gè)工具:Apktool,dex2jar,JD-...
    雨天飛0114閱讀 963評(píng)論 0 7
  • 前言 處理反編譯,首先先要了解apk文件的結(jié)構(gòu),然后是編譯過程,最后是反編譯。反編譯Apk的目的就是Apk拆成我們...
    yzzCool閱讀 5,777評(píng)論 0 8