Android逆向——APK反编译、签名

发布于 2024-07-25  38 次阅读


前言:记一次Android逆向操作。通过Android逆向去除恶意收费或其他功能等。
声明:本文仅用于开发者学习借鉴,不鼓励任何人进行破解、抄袭等违法行为!

需要用到的工具

一、APK反编译

1. 原理

APK即为AndroidPackage的缩写,也就是Android系统安装包。简单来说就是zip格式的压缩文件。将其解压可发现res文件夹(存放资源文件)、AndroidManifest.xml清单文件、META-INF文件夹(存放签名等信息文件)、classes.dex文件(由Java代码编译而成)。因此,反编译即为将classes.dex文件还原为java代码。本文使用jadx进行反编译。

2. 反编译

双击jadx-gui.bat启动,将对应的apk文件拖入即可。在左侧可以看到各类配置文件和由classes.dex及classes2.dex反编译而成的源代码。jadx主要的便利在于可以开启反混淆、CTRL单击跳转、全局搜索等等。我们还可以将其另存为Gradle项目并在Android Studio中进行编辑测试。为了避免麻烦的配置,本文采用apktool进行解码并在单个文件中进行编辑。

二、代码修改

打开命令行,或在下载的apktool文件夹内打开命令行,键入apktool出现版本等一系列信息后即可正常使用。

1.解码

在命令行中键入apktool d myapk.apk -o apkfile
其中myapk.apk为你需要解码的apk名称,-o apkfile为输出到apkfile文件夹中。

2.修改

在文件夹中能看到各种资源文件和smali文件夹。Smali是Android虚拟机的反汇编语言。dex文件反编译之后就是Smali代码。因此要对源码改动,我们则需要修改smali文件。
在jadx反编译后的源代码中,我们可以清楚地看到java源代码,因此只要善于利用全局查找对照修改即可。当然,要对源代码进行复杂的变动,掌握Smali语言是必要的。

3.打包

修改完成后在命令行中键入apktool b apkfile -o newapk.apk即可将文件夹打包成新的apk文件。

三、APK签名

1.生成密钥文件

使用keytool生成密钥文件(JDK1.4以后自带)

keytool -genkey -alias keystore -keyalg RSA -validity 36500 -keystore myapk.jks

详细说明:keytool -genkey -alias 【别名】 -keyalg 【加密算法】 -validity 【有效时间】 -keystore 【密钥文件名/密钥完整路径】
可以使用keytool -genkey --help 查看各个参数的帮助文档

2.进行V1+V2签名

解压下载的ApkSignTools.7z。双击运行ApkSignTools.exe。编辑密钥配置,其中的路径、密码、别名与先前生成的密钥一致。接着导入待签名Apk,选择新v1&v2签名,然后获取签名后的Apk即可。

业精于勤而荒于嬉 行成于思而毁于随
最后更新于 2024-07-25