首页 > 其他分享 >【Android】使用Apktool反编译Apk文件

【Android】使用Apktool反编译Apk文件

时间:2024-03-15 19:55:05浏览次数:29  
标签:keystore 反编译 Apk Apktool jar apk 文件 apktool android

文章目录

 

1. 下载Apktool

要使用Apktool,需要准备好 apktool.jarapktool.bat

我准备了两种下载方式,可自行选择:

  • apktool官网下载地址
  • 百度网盘下载链接

1.1 Apktool官网下载

apktool官网下载地址:https://apktool.org/docs/install

 

1.下载apktool.bat:点击高亮字体 wrapper script,进入apktool.bat的下载地址,我这里显示无法访问链接,因此给出替代方案。

自己本地电脑新建一个apktool.bat文件,然后使用vscode或者notepad++等文本编辑器打开apktool.bat文件,并复制以下代码到该文件中:

 1 @echo off
 2 setlocal
 3 set BASENAME=apktool_
 4 chcp 65001 2>nul >nul
 5  
 6  
 7 set java_exe=java.exe
 8  
 9  
10 if defined JAVA_HOME (
11 set java_exe="%JAVA_HOME%\bin\java.exe"
12 )
13  
14  
15 rem Find the highest version .jar available in the same directory as the script
16 setlocal EnableDelayedExpansion
17 pushd "%~dp0"
18 if exist apktool.jar (
19 set BASENAME=apktool
20 goto skipversioned
21 )
22 set max=0
23 for /f "tokens=1* delims=-_.0" %%A in ('dir /b /a-d %BASENAME%*.jar') do if %%~B gtr !max! set max=%%~nB
24 :skipversioned
25 popd
26 setlocal DisableDelayedExpansion
27  
28  
29 rem Find out if the commandline is a parameterless .jar or directory, for fast unpack/repack
30 if "%~1"=="" goto load
31 if not "%~2"=="" goto load
32 set ATTR=%~a1
33 if "%ATTR:~0,1%"=="d" (
34 rem Directory, rebuild
35 set fastCommand=b
36 )
37 if "%ATTR:~0,1%"=="-" if "%~x1"==".apk" (
38 rem APK file, unpack
39 set fastCommand=d
40 )
41  
42  
43 :load
44 %java_exe% -jar -Duser.language=en -Dfile.encoding=UTF8 "%~dp0%BASENAME%%max%.jar" %fastCommand% %*
45  
46  
47 rem Pause when ran non interactively
48 for /f "tokens=2" %%# in ("%cmdcmdline%") do if /i "%%#" equ "/c" pause

 

@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

2.下载apktool.jar

  • 点击高亮字体 latest version,进入apktool.jar的下载地址,点击下载最新版的apktool_2.9.3.jar
  • 下载完成后将apktool_2.9.3.jar重命名为apktool.jar

 

1.2 百度网盘下载

百度网盘链接:
链接:https://pan.baidu.com/s/1gmoIO2JABqotrLiaCMxN6g?pwd=4m4x
提取码:4m4x

2. 安装Apktool

1.将apktool.batapktool.jar 放到任一同级目录下

E:\Applications\Apktool

 

2.添加该目录路径到 Path 环境变量

  • 右键此电脑->属性->系统->高级系统设置->高级->环境变量,打开环境变量
  • 修改 Path 变量,添加 E:\Applications\Apktool到变量中

 

3.验证是否安装成功

打开cmd,输入apktool 命令,显示如下图,表示安装成功:

 

3. 使用Apktool

3.1 配置Java环境

要想使用Apktool工具,必须先配置Java环境,需要安装JDK 1.8以上的版本。

JDK的安装与配置:Java环境搭建,配置环境变量

3.2 准备Apk文件

准备一个apk文件用于反编译的练习,apk文件见 1.2 章节的百度网盘链接:

 

该apk文件打开后样式如下:

 

3.3 反编译Apk文件

反编译apk文件分为四步:

  • 解包apk文件
  • 对解包后的apk文件进行修改
  • 重新打包apk文件
  • 对apk文件进行签名(签名以后才能够安装到手机)

3.3.1 解包Apk文件

切换到apk所在的路径,并输入以下命令,解压apk文件到当前文件夹:

apktool d app-release.apk

 

apktool d app-release.apk

显示如下图,表示解压成功:

 

解压后在app-release.apk文件的同级目录下,得到同名文件夹 app-release

 

3.3.2 修改Apk文件

反编译的目的就是为了修改原来的apk文件,修改成自己想要的样子。

原先的的apk样式为红色的 Hello World!,此处我想修改成蓝色的 Hello Android!,步骤如下:

1.使用 vscode 打开 app-release 文件夹,找到路径 res/layout/activity_main.xml,修改其中的颜色和文本代码如下:

android:textColor="#0000FF"
android:text="Hello Android!"

 

android:textColor="#0000FF"
android:text="Hello Android!"

2.修改后的 activity_main.xml 文件内容如下

 

 

3.3.3 打包Apk文件

1.META-INF文件夹,这里面包含旧的签名文件,用不到该文件夹,因此删除它

 

2.使用以下命令打包文件夹,生成新的apk文件

apktool b app-release

 

apktool b app-release

 

 

3.3.4 签名Apk文件

1.生成密钥库文件,即keystore文件

使用以下命令生成keystore文件:

keytool -genkey -alias android_keystore -keyalg RSA -validity 20000 -keystore android.keystore

 

keytool -genkey -alias android_keystore -keyalg RSA -validity 20000 -keystore android.keystore

以上各个参数的含义如下:

  • -genkey:这个参数表示keytool要生成一个新的密钥对和一个自签名的证书

  • -alias android_keystore:这个参数指定了生成的密钥对和证书的别名(alias),此处别名为android_keystore,这个别名在密钥库中用于唯一标识这个特定的密钥对和证书

  • -keyalg RSA:这个参数指定了用于生成密钥对的算法,即RSA算法。RSA是一种广泛使用的非对称加密算法,它使用一对密钥:一个公钥用于加密数据,另一个私钥用于解密数据

  • -validity 20000:这个参数设置了证书的有效期,以天为单位,此处证书的有效期是20000天

  • -keystore android.keystore:这个参数指定了密钥库(keystore)的文件名,即android.keystore。密钥库是一个用于存储密钥对和证书的数据库文件

当使用keytool生成密钥对和证书时,命令执行过程需要输入信息:

  • 密钥库的密码:此处我填写为 123456
  • 密钥对和证书的所有者姓名、组织单位、城市或地区、省/州/郡、国家代码等,这些信息将被包含在生成的证书中,用于标识证书的所有者。

 

此时就在当前目录下,生成了一个android.keystore文件:

 

2.将刚刚生成的android.keystore文件,拷贝到未签名的apk文件同级目录下,切换到该路径下,输入以下命令,进行签名:

jarsigner -verbose -keystore android.keystore -signedjar app-release-signed.apk app-release.apk android_keystore

 

jarsigner -verbose -keystore android.keystore -signedjar app-release-signed.apk app-release.apk android_keystore

以上各个参数的含义如下:

  • jarsigner:这是 Java 开发工具包 (JDK) 中的一个工具,用于对 JAR 文件、APK 文件等进行签名

  • -verbose:这个参数用于输出详细的签名过程,当使用这个参数时,jarsigner 会显示更多关于签名步骤的信息,这有助于调试和了解签名过程的具体情况

  • -keystore android.keystore:这个参数指定了密钥库文件的路径和名称,即 android.keystore

  • -signedjar app-release-signed.apk app-release.apk:这个参数指定了签名后的 APK 文件的输出路径和名称,即 app-release-signed.apk,这个文件是原始 APK 文件 app-release.apk 经过签名后的结果

  • android_keystore:这个参数指定了密钥库中用于签名的密钥对的别名,别名是在使用 keytool 生成密钥对时指定的,它用于在密钥库中唯一标识这个特定的密钥对

 

此时就在当前目录下,生成了一个app-release-signed.apk文件:

 

3.将新生成的app-release-signed.apk文件,拖入到夜神模拟器中安装,然后点击打开即可

如果夜神模拟器中原先存在该同名应用,需要先卸载掉,然后再安装,否则可能出现一直在安装中,导致安装不成功的情况。

 

 

标签:keystore,反编译,Apk,Apktool,jar,apk,文件,apktool,android
From: https://www.cnblogs.com/R-bear/p/18076144

相关文章

  • Android对apk进行签名
    1.生产签名文件keytool-genkey-v-keystoreesg.jks-keyalgRSA-keysize2048-validity10000-aliasesgkeytool:这是Java提供的一个命令行工具,用于管理密钥库和证书。-genkey:这个选项告诉keytool生成一个新的密钥对。-v:这个选项使keytool在执行时输出详......
  • 反编译aspose-words
    publicstaticvoidmain(String[]args)throwsException{ClassPool.getDefault().insertClassPath("F:/lib/aspose-words-21.6-jdk16.jar");//获取javassist默认类池ClassPoolpool=ClassPool.getDefault();//获取domain.Hello......
  • 用QT开发Android投屏软件--上传文件和安装apk
    这篇文章我们给Android投屏软件增加文件上传和安装apk的功能。上传文件和安装apk对pc端的操作基本没有差别,因为apk也是一种文件格式。通过点击按钮或者拖动待上传(安装)的文件到投屏窗口,软件获取到文件路径,执行不同的adb命令。上传文件的adb命令:adb-s设备序列号push<电......
  • Java的结构、equals字符串判断与反编译
    顺序结构Java的基本结构就是顺序结构,除非特别指明,否则就按照顺序一句一句往下执行顺序结构是最简单的算法结构语句与语句之间,框与框之间是按上到下的顺序进行的,它是由若干个依次执行的处理步骤组成的,它是任何一个算法都离不开的一种基本算法结构代码举例publicclas......
  • 使用ilasm 和 ildasm编译和反编译工具对DLL文件修改
    目录前言一、使用ildasm反编译dll文件二、使用ilasm将il文件编译成dll或exe文件前言文本讲述怎么通过ildasm工具将dll文件进行反编译为il文件,修改il文件后再如何通过ilasm工具将il文件反编译成dll或exe文件。ildasm工具:用于将dll文件反编译成可读......
  • java反编译工具CFR使用
    java-jarcfr-0.151.jar--helpjava-jarcfr-0.151.jarWindupClasspathTypeLoader.class结果输出到out文件夹java-jarcfr-0.151.jarWindupClasspathTypeLoader.class--outputpath./out反编译jar文件,结果输出到output_jar文件夹Desktopjava-jarcfr-0.151.jar......
  • 使用dnSpy反编译DLL修改代码后生成新的DLL
    1.准备完整的DLL文件夹,包含需要引用的DLL2.使用dnSpy打开文件夹内需要修改的DLL,找到要修改的方法,例如: Kingdee.BOS.ServiceHelper.DataCenterService.IsLicControl(Contextctx,StringformId),右键编辑方法. 3.进入修改代码界面,进行代码修改,并添加需要的引用,点击"......
  • nginx 配置下载apk 页面
    nginx代理apk文件下载server{listen80;server_nameapp.com.cn;location/app{alias/var/www/app;autoindexon;default_typeapplication/octet-stream;}} alias指定虚拟......
  • react native工程打包成apk
    react-native工程打包成apk1.生成签名密钥使用jdk自带的keytool生成密钥以管理员身份运行如下命令keytool-genkey-v-keystoremy-test3-key.keystore-aliasmy-key-test3-keyalgRSA-keysize2048-validity10000其中my-test3-key.keystore为生成的密钥库文件(给Andr......
  • uniapp之原生APP本地打包成原生APP本地打包安卓APK
    前言由于项目要求将uniapp打包成安卓应用,所以今天来学习如何将uniapp项目打包成安卓apk。出于企业级代码安全考虑,所以选择了原生APP本地打包的方式进行打包,杜绝防止代码泄漏的风险。......