【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 外部配置文件,…...
多场景 OkHttpClient 管理器 - Android 网络通信解决方案
下面是一个完整的 Android 实现,展示如何创建和管理多个 OkHttpClient 实例,分别用于长连接、普通 HTTP 请求和文件下载场景。 <?xml version"1.0" encoding"utf-8"?> <LinearLayout xmlns:android"http://schemas…...

【第二十一章 SDIO接口(SDIO)】
第二十一章 SDIO接口 目录 第二十一章 SDIO接口(SDIO) 1 SDIO 主要功能 2 SDIO 总线拓扑 3 SDIO 功能描述 3.1 SDIO 适配器 3.2 SDIOAHB 接口 4 卡功能描述 4.1 卡识别模式 4.2 卡复位 4.3 操作电压范围确认 4.4 卡识别过程 4.5 写数据块 4.6 读数据块 4.7 数据流…...
1688商品列表API与其他数据源的对接思路
将1688商品列表API与其他数据源对接时,需结合业务场景设计数据流转链路,重点关注数据格式兼容性、接口调用频率控制及数据一致性维护。以下是具体对接思路及关键技术点: 一、核心对接场景与目标 商品数据同步 场景:将1688商品信息…...

【2025年】解决Burpsuite抓不到https包的问题
环境:windows11 burpsuite:2025.5 在抓取https网站时,burpsuite抓取不到https数据包,只显示: 解决该问题只需如下三个步骤: 1、浏览器中访问 http://burp 2、下载 CA certificate 证书 3、在设置--隐私与安全--…...

USB Over IP专用硬件的5个特点
USB over IP技术通过将USB协议数据封装在标准TCP/IP网络数据包中,从根本上改变了USB连接。这允许客户端通过局域网或广域网远程访问和控制物理连接到服务器的USB设备(如专用硬件设备),从而消除了直接物理连接的需要。USB over IP的…...

10-Oracle 23 ai Vector Search 概述和参数
一、Oracle AI Vector Search 概述 企业和个人都在尝试各种AI,使用客户端或是内部自己搭建集成大模型的终端,加速与大型语言模型(LLM)的结合,同时使用检索增强生成(Retrieval Augmented Generation &#…...

免费数学几何作图web平台
光锐软件免费数学工具,maths,数学制图,数学作图,几何作图,几何,AR开发,AR教育,增强现实,软件公司,XR,MR,VR,虚拟仿真,虚拟现实,混合现实,教育科技产品,职业模拟培训,高保真VR场景,结构互动课件,元宇宙http://xaglare.c…...
MinIO Docker 部署:仅开放一个端口
MinIO Docker 部署:仅开放一个端口 在实际的服务器部署中,出于安全和管理的考虑,我们可能只能开放一个端口。MinIO 是一个高性能的对象存储服务,支持 Docker 部署,但默认情况下它需要两个端口:一个是 API 端口(用于存储和访问数据),另一个是控制台端口(用于管理界面…...

论文阅读笔记——Muffin: Testing Deep Learning Libraries via Neural Architecture Fuzzing
Muffin 论文 现有方法 CRADLE 和 LEMON,依赖模型推理阶段输出进行差分测试,但在训练阶段是不可行的,因为训练阶段直到最后才有固定输出,中间过程是不断变化的。API 库覆盖低,因为各个 API 都是在各种具体场景下使用。…...
Spring Boot + MyBatis 集成支付宝支付流程
Spring Boot MyBatis 集成支付宝支付流程 核心流程 商户系统生成订单调用支付宝创建预支付订单用户跳转支付宝完成支付支付宝异步通知支付结果商户处理支付结果更新订单状态支付宝同步跳转回商户页面 代码实现示例(电脑网站支付) 1. 添加依赖 <!…...