# apk-reverse
**Repository Path**: zyj0021/apk-reverse
## Basic Information
- **Project Name**: apk-reverse
- **Description**: No description available
- **Primary Language**: Unknown
- **License**: Not specified
- **Default Branch**: master
- **Homepage**: None
- **GVP Project**: No
## Statistics
- **Stars**: 0
- **Forks**: 0
- **Created**: 2026-01-22
- **Last Updated**: 2026-01-22
## Categories & Tags
**Categories**: Uncategorized
**Tags**: None
## README
仓库的工具是二进制文件,历史提交包含工具版本更新,建议使用浅克隆或直接 [Download ZIP](https://github.com/zjmok/apk-reverse/archive/refs/heads/master.zip)
浅克隆
```
git clone https://github.com/zjmok/apk-reverse.git --depth=1
```
# Android APK 反编译
## 步骤 and 工具
last update time 20250815
工具 | 作用 | 地址
--- | --- | ---
dex2jar | 将 apk 转换成 jar |
jd-gui | 查看 jar 源码 |
apktool | apk 反编译、回编译 |
signtool | 签名脚本 |
### 一、反编译,[apktool](/apktool)
使用 apktool 反编译 apk 得到可以修改的 `smali` 源码
进入 `/apktool` 目录
> MacOS Linux 系统的需要将 `script` 里对应系统的脚本放到 `apktool.jar` 同级目录,Windows 已处理
```
apktool d -o app_workspace
```
若遇到 `DexBackedDexFile$NotADexFile` 错误,使用 `apktool d --only-main-classe target.apk -o target`,正常则跳过
`aapt` 是资源编译和打包工具,apktool 2.0+ 二进制文件中内嵌aapt工具
### 二、查看源码,[dex2jar](/dex-tools)、[jd-gui](/jd-gui)
使用 dex2jar 将 apk 转换成 jar
进入 `/dex-tools/dex-tools-版本` 目录
```
d2j-dex2jar -f
```
会在当前目录生成对应的 `.jar` 文件,后面会用到
---
用 jd-gui 阅读源码
进入 `/jd-gui` 目录
```
java -jar jd-gui-版本.jar
```
把前面得到的 `.jar` 文件拖进来,就可以查看的源码了
### 三、修改反编译出来的 `smali` 代码、资源文件
#### 修改 `smali` 源码
通过查看 步骤二 的源码确定需要修改的地方,把 步骤一 反编译出来的 `smali` 目录对应的 smali 文件拖进 Android Studio 进行修改(或者使用其它编辑器直接修改)
若对 `smali` 语法不熟悉,可以自己找资料简单学习一下。
Android Studio 的 java2smali 插件 可将 java/kotlin 编译成 smali,可以对修改起到一定作用
---
#### 修改资源文件
编辑或替换即可
### 四、回编译及签名
#### 1、回编译
用 apktool 回编译,生成未签名的 apk
进入 `/apktool` 目录
```
apktool b app_workspace -o app_unsigned.apk
```
#### 2、重新签名
你需要准备一个自己的签名,可以用 Android Studio 图形界面生成,或用 keytool 命令生成
也可以直接使用 Android SDK 自动生成的 debug.keystore(默认位置 `~/.android/debug.keystore`,别名 `androiddebugkey` 密码 `android`)
使用 jdk 的 `keytool` 生成签名,有签名或使用 debug.keystore 可跳过
```
# 签名路径名称、别名、密码 可修改为你自己的
keytool -genkey -v \
-keystore ~/.android/debug.keystore \
-storepass android -alias androiddebugkey -keypass android \
-storetype PKCS12 \
-keyalg RSA -keysize 2048 -validity 10000 \
-dname "CN=Android Debug,O=Android,C=US"
```
用 jdk 的 `jarsigner` 对 apk 重新签名
```
# 使用 debug.keystore 签名
jarsigner -verbose -keystore ~/.android/debug.keystore -signedjar app_signed.apk app_unsigned.apk androiddebugkey
```
`app_signed.apk` 就是修改后最终的安装包
---
下载
[open-jdk](https://jdk.java.net/)
[Android Studio](https://developer.android.google.cn/studio)
[java2smali](https://plugins.jetbrains.com/plugin/7385-java2smali/versions)
---
> 网上教程的 `signapk.jar` 是 Android 源码包中的一个签名工具,`testkey.pk8` 和 `testkey.x509.pem` 也是源码提供的签名文件。我们使用自己的签名文件签名就可以了
> 安装不同签名的 apk 需要卸载重装