记录一下反编译自己apk

发布时间 2023-07-28 01:41:52作者: laremehpe

首先准备好这几样工具:

apktool:https://ibotpeaches.github.io/Apktool/

dex2jar:https://github.com/pxb1988/dex2jar

jd-gui: https://github.com/java-decompiler/jd-gui

注意:jd-gui 下载下来是jar包,需要使用 java -jar jd-gui-xxx.jar 命令来启动

apktool.bat 文件需要手动创建,文件内容如下:

@echo off
setlocal
set BASENAME=apktool_
chcp 65001 2>nul >nul

set java_exe=java.exe

if defined JAVA_HOME (
set "java_exe=%JAVA_HOME%\bin\java.exe"
)

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_exe%" -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

 其中res文件夹用来存放素材文件,同时配置好 JAVA环境变量

 这里面的签名文件 test.keystore 生成:https://www.cnblogs.com/laremehpe/p/16163711.html

 然后开始反编译:

进入命令行输入:

apktool d ./res/app.apk

 此时多出一个文件夹:

 同时使用下面这个命令可以查看源代码:

cd dex-tools-2.1
d2j-dex2jar.bat -f ../res/app.apk
cd ../
java -jar jd-gui-1.6.6.jar

回编译:

apktool b app -o ./res/ready.apk

这里面app是文件夹的名字,-o 后面的参数是目标文件的位置和名字

 

 此时尝试安装会提示安装失败,缺少证书啥的:

 这时候需要找到android studio所携带的 apksigner.bat、zipalign.exe文件(这两个文件在同一个目录下面):

 

cd C:\Users\djatm\AppData\Local\Android\Sdk\build-tools\30.0.3
zipalign.exe -p -v 4 (未对齐的安装包地址) (对齐后的安装包地址)
rem 完整命令:
zipalign.exe -p -v 4 C:\Users\djatm\Desktop\develop\dissemble\res\ready.apk C:\Users\djatm\Desktop\develop\dissemble\res\aligned.apk

 

rem 签名对齐后的apk
apksigner sign --ks (签名文件的地址) --ks-key-alias (别名) --out (签名后的apk地址) (待签名apk地址)
rem 完整命令
apksigner sign --ks C:\Users\djatm\Desktop\develop\dissemble\res\test.keystore --ks-key-alias testalias -out C:\Users\djatm\Desktop\develop\dissemble\res\signed.apk C:\Users\djatm\Desktop\develop\dissemble\res\aligned.apk

 再次尝试安装: