【Android】使用Apktool反编译Apk文件
文章目录
- 1. 下载Apktool
- 1.1 Apktool官网下载
- 1.2 百度网盘下载
- 2. 安装Apktool
- 3. 使用Apktool
- 3.1 配置Java环境
- 3.2 准备Apk文件
- 3.3 反编译Apk文件
- 3.3.1 解包Apk文件
- 3.3.2 修改Apk文件
- 3.3.3 打包Apk文件
- 3.3.4 签名Apk文件
1. 下载Apktool
要使用Apktool,需要准备好 apktool.jar 和 apktool.bat。
我准备了两种下载方式,可自行选择:
- apktool官网下载地址
- 百度网盘下载链接
1.1 Apktool官网下载
apktool官网下载地址:https://apktool.org/docs/install

1.下载apktool.bat:点击高亮字体 wrapper script,进入apktool.bat的下载地址,我这里显示无法访问链接,因此给出替代方案。
自己本地电脑新建一个apktool.bat文件,然后使用vscode或者notepad++等文本编辑器打开apktool.bat文件,并复制以下代码到该文件中:
@echo off
setlocal
set BASENAME=apktool_
chcp 65001 2>nul >nulset java_exe=java.exeif 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 DisableDelayedExpansionrem 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.bat 和 apktool.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
显示如下图,表示解压成功:

解压后在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!"
2.修改后的 activity_main.xml 文件内容如下


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

2.使用以下命令打包文件夹,生成新的apk文件
apktool b app-release


3.3.4 签名Apk文件
1.生成密钥库文件,即keystore文件
使用以下命令生成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:这是 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文件,拖入到夜神模拟器中安装,然后点击打开即可
如果夜神模拟器中原先存在该同名应用,需要先卸载掉,然后再安装,否则可能出现一直在安装中,导致安装不成功的情况。


相关文章:
【Android】使用Apktool反编译Apk文件
文章目录 1. 下载Apktool1.1 Apktool官网下载1.2 百度网盘下载 2. 安装Apktool3. 使用Apktool3.1 配置Java环境3.2 准备Apk文件3.3 反编译Apk文件3.3.1 解包Apk文件3.3.2 修改Apk文件3.3.3 打包Apk文件3.3.4 签名Apk文件 1. 下载Apktool 要使用Apktool,需要准备好 …...
(04)Hive的相关概念——order by 、sort by、distribute by 、cluster by
Hive中的排序通常涉及到order by 、sort by、distribute by 、cluster by 一、语法 selectcolumn1,column2, ... from table [where 条件] [group by column] [order by column] [cluster by column| [distribute by column] [sort by column] [limit [offset,] rows]; …...
Django模板(二)
标签if 标签在渲染过程中提供使用逻辑的方法,比如:if和for 标签被 {% 和 %} 包围,如下所示: 由于在模板中,没有办法通过代码缩进判断代码块,所以控制标签都需要有结束的标签 if判断标签{% if %} {% endif %} : # athlete_list 不为空 {% if athlete_list %}# 输出 ath…...
勒索病毒最新变种.faust勒索病毒来袭,如何恢复受感染的数据?
引言: 随着我们进入数字化时代,数据的重要性变得愈发显著,而网络安全威胁也日益增加。.faust勒索病毒是其中一种备受恶意分子钟爱的危险工具,它通过加密用户文件并勒索高额赎金来对个人和组织发起攻击。本文将深入探讨.faust勒索…...
python 人脸检测器
import cv2# 加载人脸检测器 关键文件 haarcascade_frontalface_default.xml face_cascade cv2.CascadeClassifier(haarcascade_frontalface_default.xml)# 读取图像 分析图片 ren4.png image cv2.imread(ren4.png) gray cv2.cvtColor(image, cv2.COLOR_BGR2GRAY)# 进行人脸…...
机器学习与深度学习
什么是机器学习 机器学习是一门跨学科的学科,它致力于研究和开发让计算机能够模拟人类学习行为的技术和方法。机器学习涉及多个学科的知识,如概率论、统计学、逼近论、凸分析、算法复杂度理论等,这些学科为机器学习提供了理论基础和数学工具…...
算法训练营day27(补),贪心算法1
import "sort" //455. 分发饼干 func findContentChildren(g []int, s []int) int { sort.Ints(g) sort.Ints(s) // g代表胃口数组, s代表饼干数组 count : 0 // 统计数量 //饼干下标 index : len(s) - 1 // 胃口循环 for i : len(g) - 1; i > 0; i--…...
[office] excel2003限定单元格输入值范围教程 #微信#经验分享
excel2003限定单元格输入值范围教程 在Excel中录入数据前都会设置单元格的一些格式,其中会有限定单元格输入值范围的需求,或许有的朋友并不知道单元格该如何限定输入范围,如果不懂的朋友欢迎一起来学习研究。下面是小编带来的关于excel2003限…...
OLED显示红外遥控键码
基本原理 本遥控器的编码是NEC编码,为PWM(脉冲宽度调制)。 发射红外载波的时间固定,通过改变不发射载波的时间来改变占空比。 逻辑“0”是由0.56ms的38KHZ载波和0.560ms的无载波间隔组成;逻辑“1”是由0.56ms的38KHZ…...
LabVIEW智能温度监控系统
LabVIEW智能温度监控系统 介绍了一个基于LabVIEW的智能温度监控系统,实现对工业环境中温度的实时监控与调控。通过集成传感器技术和LabVIEW软件平台,系统能够自动检测环境温度,及时响应温度变化,并通过图形用户界面(GUI)为用户提…...
专业140+总分420+浙江大学842信号系统与数字电路考研经验电子信息与通信,真题,大纲,参考书。
今年考研已经结束,初试专业课842信号系统与数字电路140,总分420,很幸运实现了自己的目标,被浙大录取,这在高考是想都不敢想的学校,在考研时实现了,所以大家也要有信心,通过自己努力实…...
C语言学习day15:数组强化训练
题目一: 称体重:分别给10个值,来获得最大值 思路: 定义数组,给数组内赋10个值第一个下标的值与第二个下标的值进行比较定义max,将比较得来的较大的值赋值给max一直比较直到比较到最后一个下标࿰…...
缓存穿透、缓存击穿与缓存雪崩
缓存穿透、缓存击穿与缓存雪崩 1.本质区别 缓存穿透指的是数据库不存在数据,导致无法缓存,每次查询都查数据库,数据库压垮 缓存击穿指的是缓存键值对key过期了,key过期期间,大量请求访问,不经过缓存&…...
一周学会Django5 Python Web开发-项目配置settings.py文件-模版配置
锋哥原创的Python Web开发 Django5视频教程: 2024版 Django5 Python web开发 视频教程(无废话版) 玩命更新中~_哔哩哔哩_bilibili2024版 Django5 Python web开发 视频教程(无废话版) 玩命更新中~共计17条视频,包括:2024版 Django5 Python we…...
CF1845 D. Rating System [思维题+数形结合]
传送门:CF [前题提要]:自己在做这道题的时候思路完全想错方向,导致怎么做都做不出来,看了题解之后感觉数形结合的思考方式挺好的(或者这种做法挺典的),故写篇题解记录一下 题目很简单,不再解释.先不考虑 k k k,想想是一种什么情况?很显然应该是跟下图一样是一个折线图的变化.…...
HeidiSQL安装配置(基于小皮面板(phpstudy))连接MySQL
下载资源 对于这款图形化工具,博主建议通过小皮面板(phpstudy)来下载即可,也是防止你下载到钓鱼软件,小皮面板(phpstudy)如果你不懂是什么,请看下面链接这篇博客 第二篇:…...
【蓝桥2013】错误票据
错误票据 题目描述 某涉密单位下发了某种票据,并要在年终全部收回。 每张票据有唯一的 ID 号。全年所有票据的 ID 号是连续的,但 ID 的开始数码是随机选定的。 因为工作人员疏忽,在录入 ID 号的时候发生了一处错误,造成了某个…...
nvm对node版本进行管理及疑难解决,vue项目搭建与启动
一、nvm安装与node版本管理 nvm安装 1、nvm地址:https://github.com/coreybutler/nvm-windows/releases 2、无需配置安装包,nvm-setup-v1.1.10.zip 解压后双击nvm-setup.exe,选择安装路径,一路next即可 打开dos窗口输入nvm vers…...
Redisson分布式锁 原理 + 运用 记录
Redisson 分布式锁 简单入门 pom <dependency><groupId>org.redisson</groupId><artifactId>redisson</artifactId><version>3.13.6</version></dependency>配置类 package com.hmdp.config;import org.redisson.Redisson;…...
Spring Boot 笔记 021 项目部署
1.1 引入坐标,并双击package打包成jar包 1.2 在服务器上运行jar包 1.3 使用postman测试 2.1 运行配置 2.1.1 命令更改端口 java -jar big-event-1.0-SNAPSHOT.jar --server.port7777 2.1.2 环境变量更新(略) 2.1.3 外部配置文件,…...
QT: `long long` 类型转换为 `QString` 2025.6.5
在 Qt 中,将 long long 类型转换为 QString 可以通过以下两种常用方法实现: 方法 1:使用 QString::number() 直接调用 QString 的静态方法 number(),将数值转换为字符串: long long value 1234567890123456789LL; …...
mysql已经安装,但是通过rpm -q 没有找mysql相关的已安装包
文章目录 现象:mysql已经安装,但是通过rpm -q 没有找mysql相关的已安装包遇到 rpm 命令找不到已经安装的 MySQL 包时,可能是因为以下几个原因:1.MySQL 不是通过 RPM 包安装的2.RPM 数据库损坏3.使用了不同的包名或路径4.使用其他包…...
今日学习:Spring线程池|并发修改异常|链路丢失|登录续期|VIP过期策略|数值类缓存
文章目录 优雅版线程池ThreadPoolTaskExecutor和ThreadPoolTaskExecutor的装饰器并发修改异常并发修改异常简介实现机制设计原因及意义 使用线程池造成的链路丢失问题线程池导致的链路丢失问题发生原因 常见解决方法更好的解决方法设计精妙之处 登录续期登录续期常见实现方式特…...
20个超级好用的 CSS 动画库
分享 20 个最佳 CSS 动画库。 它们中的大多数将生成纯 CSS 代码,而不需要任何外部库。 1.Animate.css 一个开箱即用型的跨浏览器动画库,可供你在项目中使用。 2.Magic Animations CSS3 一组简单的动画,可以包含在你的网页或应用项目中。 3.An…...
Git 3天2K星标:Datawhale 的 Happy-LLM 项目介绍(附教程)
引言 在人工智能飞速发展的今天,大语言模型(Large Language Models, LLMs)已成为技术领域的焦点。从智能写作到代码生成,LLM 的应用场景不断扩展,深刻改变了我们的工作和生活方式。然而,理解这些模型的内部…...
VisualXML全新升级 | 新增数据库编辑功能
VisualXML是一个功能强大的网络总线设计工具,专注于简化汽车电子系统中复杂的网络数据设计操作。它支持多种主流总线网络格式的数据编辑(如DBC、LDF、ARXML、HEX等),并能够基于Excel表格的方式生成和转换多种数据库文件。由此&…...
xmind转换为markdown
文章目录 解锁思维导图新姿势:将XMind转为结构化Markdown 一、认识Xmind结构二、核心转换流程详解1.解压XMind文件(ZIP处理)2.解析JSON数据结构3:递归转换树形结构4:Markdown层级生成逻辑 三、完整代码 解锁思维导图新…...
Copilot for Xcode (iOS的 AI辅助编程)
Copilot for Xcode 简介Copilot下载与安装 体验环境要求下载最新的安装包安装登录系统权限设置 AI辅助编程生成注释代码补全简单需求代码生成辅助编程行间代码生成注释联想 代码生成 总结 简介 尝试使用了Copilot,它能根据上下文补全代码,快速生成常用…...
二叉树-144.二叉树的前序遍历-力扣(LeetCode)
一、题目解析 对于递归方法的前序遍历十分简单,但对于一位合格的程序猿而言,需要掌握将递归转化为非递归的能力,毕竟递归调用的时候会调用大量的栈帧,存在栈溢出风险。 二、算法原理 递归调用本质是系统建立栈帧,而非…...
JVM——对象模型:JVM对象的内部机制和存在方式是怎样的?
引入 在Java的编程宇宙中,“Everything is object”是最核心的哲学纲领。当我们写下new Book()这样简单的代码时,JVM正在幕后构建一个复杂而精妙的“数据实体”——对象。这个看似普通的对象,实则是JVM内存管理、类型系统和多态机制的基石。…...
