新增 Apk 逆向笔记

This commit is contained in:
2022-05-07 16:26:58 +08:00
parent 0e6eba2c17
commit 0ccbadc6ff

69
android/HackAPK.md Normal file
View File

@ -0,0 +1,69 @@
---
tags: #android #逆向
---
# Android App 逆向
## 前置工具
- Java
- [Apk Tool](https://github.com/iBotPeaches/Apktool) 反编译与构建APK
- [Jadx](https://github.com/skylot/jadx) 反编译APK
- [ADB](https://developer.android.google.cn/studio/releases/platform-tools) 安卓调试器
- [APK Signer](https://github.com/patrickfav/uber-apk-signer) APK签名工具
- 可选 [APK Studio](https://vaibhavpandey.com/apkstudio/) 可视化交互
## 流程概要
1. 通过adb把目标apk导出到电脑
2. 用Jadx反编译apk定位到要修改的位置
3. 用ApkTool反编译apk找到并修改目标
4. 修改并保存后用ApkTool构建新的apk
5. 用ApkSigner对新的apk进行签名
6. 卸载旧的APK安装新的
## 有用的链接
- [smali基本语法](https://www.jianshu.com/p/2766b76da201)
## 具体流程
### 导出目标App的Apk文件
1. `adb shell pm list package <Filter>` 列出所有包
2. `adb shell pm path 包名` 查看安装路径
3. 根据输出路径,用 `adb pull` 拉到电脑上
示例:
```shell
> adb shell pm list package
package:com.andr...
...
package:com.DeviceTest
...
> adb shell pm path com.DeviceTest
package:/system/priv-app/DeviceTest/DeviceTest.apk
> adb pull /system/priv-app/DeviceTest/DeviceTest.apk D:\DeviceTest\
```
### 用 jadx-gui 反编译 apk
这个很简单安装好以后直接选择打开apk就可以看到反编译代码了。
可以选择导出项目,然后用自己喜欢的开发环境打开查看。
这一步的目的是查看apk代码定位要修改的位置因为接下来修改要用另一个方式进行。
### 用 apk tool 反编译 apk
1. 根据[安装教程](https://ibotpeaches.github.io/Apktool/install)安装apk tool
2. 根据[基础教程](https://ibotpeaches.github.io/Apktool/install)使用
其实非常简单,`apktool d DeviceTest.apk` 就可以反编译了,改完代码以后用 `apktool b DeviceTest` 就可以重新编译了,编译后的结果在该目录下 `DeviceTest/dist/DeviceTest.apk`
用VSCode打开反编译的文件夹可以选择装`smali`插件来提供语法提示,因为要修改的代码是`smali`语言的。
根据jadx-gui中定位文件和方法然后在smali中修改达到自己预期目的。这部分网上有一些博客就不具体描述了。
修改完成后,用参数`b`来构建apk即可。
### 用 uber-apk-signer 签名apk
apk tool 构建的apk是没有签名的无法直接安装因此需要使用签名工具对apk进行签名。
直接 `java -jar uber-apk-signer.jar -a D:\DeviceTest\dist\DeviceTest.apk --allowResign --overwrite` 签名
### 用 adb install 安装apk
1. `adb uninstall com.DeviceTest` 卸载旧的APK
2. `adb install D:\DeviceTest\dist\DeviceTest.apk` 安装新的APK
后续只需要加上`-r`参数覆盖就可以了,不用每次卸载。`adb install -r D:...`