Android apk反編譯、修改代碼、重新打包、簽名全過程(for windows)

準備工作

環境:win10
工具:

  • apktool 反編譯,重新打包工具 下載地址
  • dex2jar 這個工具用於將dex文件轉換成jar文件 下載地址
  • jd-gui 這個工具用於將jar文件轉換成java代碼 下載地址

不想自己去下載的可以直接到我的網盤上取,三個工具都有:
反編譯工具

在這裏插入圖片描述

APK編譯過程

在這裏插入圖片描述
apk打包的基本流程模塊如下:

  1. 資源處理
    這一過程中主要使用appt工具進行資源文件的處理,分析AndroidManifest.xml中的資源文件,生成R.java和resources.arsc文件;aidl工具負責處理aidl文件,生成對應的java接口文件。
  2. 代碼編譯
    將上一過程中產生的R.java、java接口文件以及工程源代碼一起通過Java Compiler編譯成.class文件,打成Jar包(這部分可以加入代碼混淆),然後與第三方庫的Jar包一起通過dx工具轉換成.dex文件。
    通過apkbuilder工具將aapt生成的resources.arsc、classes.dex(可能多個)、其他的資源一塊打包生成未經簽名的apk文件
  3. 添加簽名
    通過Jarsigner對生成的未簽名的apk進行簽名。
    再通過zipalign對簽名後的apk進行對其處理,使apk中所有資源文件距離文件起始偏移爲4字節的整數倍,從而在通過內存映射訪問apk文件時會更快。

反編譯流程

一、apktool使用
將下載下來的apktool.bat,apktool.jar還有待反編譯的apk放在同一個文件目錄下面。打開CMD命令,進入到該文件夾下,輸入apktool看看環境是否成功,成功瞭如下圖所示
在這裏插入圖片描述
執行反編譯命令,apktool d filename,這裏我執行的是apktool d test.apk
其中d是decode的意思,表示要對這個apk進行解碼,除了這個基本用法,還有其他的附帶參數:

  • -f 如果目標文件夾已存在,則強制刪除現有文件夾(默認如果目標文件夾已存在,則解碼失敗)。
  • -o 指定解碼目標文件夾的名稱(默認使用APK文件的名字來命名目標文件夾)。
  • -s 不反編譯dex文件,也就是說classes.dex文件會被保留(默認會將dex文件解碼成smali文件)。
  • -r 不反編譯資源文件,也就是說resources.arsc文件會被保留(默認會將resources.arsc解碼成具體的資源文件)。
    在這裏插入圖片描述
    結束之後我們可以看到這個文件目錄下出現了test文件夾
    在這裏插入圖片描述

二、dex2jar的使用
把apk中的class.dex文件取出來(把文件後綴名改成.zip,或者直接拖到AS中也可以),然後把這個class.dex文件放到第二個工具dex-tools-2.1-SNAPSHOT文件夾下面,然後CMD到這個文件目錄下,輸入命令d2j_dex2jar.bat classes.dex,可以看到文件夾下面生成了一個classes_dex2jar.jar的文件
在這裏插入圖片描述
在這裏插入圖片描述
三、jd-gui的使用
這個就比較簡單了,直接把之前生成的classes_dex2jar.jar用這個工具打開就可以看到
在這裏插入圖片描述
反編譯之後的代碼如圖,我們也找到了相關代碼,反編譯結束

修改代碼重新打包

1、修改代碼
我們在jd-gui中看到了Profile類,我們到test文件夾下smail文件夾中找到對應的類,進行修改
在這裏插入圖片描述
在這裏插入圖片描述
2、重新打包
執行打包命令 apktool.bat b test ,b是build的意思,表示要對這個文件夾進行編碼打包成APK的意思
執行完之後可以看到,在test文件夾下多了,build和dist文件夾,其中dist文件夾就是反編譯重新打包之後的包,但是這個包還不能安裝,因爲還沒有簽名
在這裏插入圖片描述
3、簽名apk
簽名命令:

jarsigner -verbose -sigalg SHA1withRSA -digestalg SHA1 -keystore 簽名文件名 -storepass 簽名密碼 待簽名的APK文件名 簽名的別名

如圖:
在這裏插入圖片描述
4、對齊操作
簽名完成後,建議對APK文件進行一次對齊操作,這樣可以使得程序在Android系統中運行得更快,對齊操作使用的是zipalign工具,該工具在/build-tools/目錄下,需要將這個目錄配置到系統環境變量當中纔可以在任何位置執行此命令。繼續在cmd中執行命令:
zipalign 4 test.apk test_aligned.apk
執行成功後,會生成一個對齊後的文件
最後可以通過如下命令驗證apk簽名是否成功:
jarsigner -verify -verbose -certs test_aligned.apk

如圖:
在這裏插入圖片描述
這樣,你就得到一個反編譯之後修改過代碼的安裝包了
大功告成!!!

遇到的問題
apktool.bat b test重新打包反編譯的時候發現只生成了build文件夾沒有生成dist文件夾,報錯提示如圖

在這裏插入圖片描述在這裏插入圖片描述
解決方案:打包的時候加個-r ,就可以了

apktool.bat d test.apk 
apktool.bat b test

改成

apktool.bat -r d test.apk 
apktool.bat b test
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章