在日常開(kāi)發(fā)我們可能需要替換某些資源或者修改某些代碼,但是我們沒(méi)有源碼環(huán)境只有一個(gè)APK或者想通過(guò)編寫(xiě)一些工具,實(shí)現(xiàn)重打包,這時(shí)我們可以使用apktool 進(jìn)行對(duì)APK包的修改以及重打包
使用工具
工具 | 功能 |
---|---|
jadx-gui | 反編譯查看源碼 |
apktool | 反編譯/回編 APK |
android sdk | 進(jìn)行APK簽名 |
流程步驟
- 使用jadx-gui反編譯查看源碼,確定要修改的點(diǎn)
- apktool 反編譯出smail文件
- 修改smail文件
- 使用apktool 回編APK
- 重簽名
Apktool相關(guān)
- 官方編譯教程
- 官方安裝教程
- 【推薦】建立apktool.bat(包裝腳本)與下載的jar包(例如apktool_2.7.0.jar)放在同級(jí)目錄
安裝與使用
- github最新版本下載
- 將apktool.bat與下載的jar包放置于同級(jí)目錄或者直接放于C:\Windows
- 腳本內(nèi)容如下,可直接復(fù)制
@echo off
setlocal
set BASENAME=apktool_
chcp 65001 2>nul >nul
rem Find the highest version .jar available in the same directory as the script
setlocal EnableDelayedExpansion
pushd "%~dp0"
if exist apktool.jar (
set BASENAME=apktool
goto skipversioned
)
set max=0
for /f "tokens=1* delims=-_.0" %%A in ('dir /b /a-d %BASENAME%*.jar') do if %%~B gtr !max! set max=%%~nB
:skipversioned
popd
setlocal DisableDelayedExpansion
rem Find out if the commandline is a parameterless .jar or directory, for fast unpack/repack
if "%~1"=="" goto load
if not "%~2"=="" goto load
set ATTR=%~a1
if "%ATTR:~0,1%"=="d" (
rem Directory, rebuild
set fastCommand=b
)
if "%ATTR:~0,1%"=="-" if "%~x1"==".apk" (
rem APK file, unpack
set fastCommand=d
)
:load
java -jar -Duser.language=en -Dfile.encoding=UTF8 "%~dp0%BASENAME%%max%.jar" %fastCommand% %*
rem Pause when ran non interactively
for /f "tokens=2" %%# in ("%cmdcmdline%") do if /i "%%#" equ "/c" pause
常用命令備查
- 反編譯
apktool d -o <output_dir> test.apk
- 回編
apktool b <input_dir> -o result.apk
APK簽名命令備查
- 官網(wǎng)教程
- apksigner 路徑
[安裝的sdk路徑]\build-tools[SDK版本號(hào)]\apksigner.bat
- v1 jarsigner 簽名
jarsigner -verbose -keystore F:\test123456.jks -signedjar F:\test\signed.apk F:\test\unsign.apk [別名]
- apksigner 簽名
apksigner sign --ks F:\test123456.jks --ks-key-alias test123456 --out F:\test\signed-motifyapp.apk F:\test\motified-app.apk
- 簽名驗(yàn)證
apksigner verify -v F:\test\signed-motifyapp.apk
實(shí)戰(zhàn)練習(xí)
寫(xiě)一個(gè)簡(jiǎn)單的demo,點(diǎn)擊hello word 會(huì)變成 其他文本,目標(biāo)是修改文本內(nèi)容
反編譯查看修改的地方
因?yàn)槭亲约簩?xiě)的,所以直接找到要修改的類文章來(lái)源:http://www.zghlxwxcb.cn/news/detail-470745.html
使用Apktool反編譯得到產(chǎn)物文件夾并進(jìn)行修改
- 輸入命令
apktool d -o test app-release.apk
得到產(chǎn)物 - 得到產(chǎn)物后,根據(jù)Jadx反編譯的路徑找到對(duì)應(yīng)的smail文件,直接用文本工具打開(kāi)查看smail語(yǔ)句,修改對(duì)應(yīng)的點(diǎn),這里修改很簡(jiǎn)單,就是把點(diǎn)擊后的修改的文本,改為"changed click text",然后保存文件
- 實(shí)際修改可以查看smail語(yǔ)句的語(yǔ)法或者自己寫(xiě)一段代碼,復(fù)制對(duì)應(yīng)的smail語(yǔ)句,再替換到所在的地方
文章來(lái)源地址http://www.zghlxwxcb.cn/news/detail-470745.html
回編APK
- 輸入命令
apktool b test -o changed.apk
得到未簽名的APK - 使用 apksigner 進(jìn)行重簽名
apksigner sign --ks E:\apktools\test.jks --ks-key-alias test --out E:\apktools\signed-changed.apk E:\apktools\changed.apk
- 安裝驗(yàn)證修改成功
實(shí)用場(chǎng)景
- 多渠道出包
- 資源替換重打包工具
到了這里,關(guān)于【安卓逆向】APK修改與反編譯回編譯的文章就介紹完了。如果您還想了解更多內(nèi)容,請(qǐng)?jiān)谟疑辖撬阉鱐OY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!