2017-11-01 22:47:55 +07:00
|
|
|
|
# 1.7.4 Android 常用工具
|
2017-11-09 12:37:04 +07:00
|
|
|
|
|
2017-11-10 19:51:12 +07:00
|
|
|
|
这里先介绍一些好用的小工具,后面会介绍大杀器 JEB、IDA Pro 和 Radare2。
|
2017-11-09 12:37:04 +07:00
|
|
|
|
|
2018-08-05 16:43:10 +07:00
|
|
|
|
## 常用工具
|
|
|
|
|
|
|
|
|
|
### smali/baksmali
|
|
|
|
|
|
|
|
|
|
地址:<https://github.com/JesusFreke/smali>
|
2017-11-10 19:51:12 +07:00
|
|
|
|
|
|
|
|
|
smali/baksmali 分别用于汇编和反汇编 dex 格式文件。
|
2017-11-09 12:37:04 +07:00
|
|
|
|
|
|
|
|
|
使用方法:
|
2018-08-05 16:43:10 +07:00
|
|
|
|
|
|
|
|
|
```text
|
2017-11-09 12:37:04 +07:00
|
|
|
|
$ smali assemble app -o classes.dex
|
|
|
|
|
|
|
|
|
|
$ baksmali disassemble app.apk -o app
|
|
|
|
|
```
|
2018-08-05 16:43:10 +07:00
|
|
|
|
|
2017-11-09 12:37:04 +07:00
|
|
|
|
当然你也可以汇编和反汇编单个的文件,如汇编单个 smali 文件,反汇编单个 classes.dex 等,使用命令 `baksmali help input` 查看更多信息。
|
|
|
|
|
|
|
|
|
|
baksmali 还支持查看 dex/apk/oat 文件里的信息:
|
2018-08-05 16:43:10 +07:00
|
|
|
|
|
|
|
|
|
```text
|
2017-11-09 12:37:04 +07:00
|
|
|
|
$ baksmali list classes app.apk
|
|
|
|
|
$ baksmali list methods app.apk | wc -l
|
|
|
|
|
```
|
2017-11-10 19:51:12 +07:00
|
|
|
|
|
2018-08-05 16:43:10 +07:00
|
|
|
|
### Apktool
|
|
|
|
|
|
|
|
|
|
地址:<https://github.com/iBotPeaches/Apktool>
|
2017-11-10 19:51:12 +07:00
|
|
|
|
|
|
|
|
|
Apktool 可以将资源文件解码为几乎原始的形式,并在进行一些修改后重新构建它们,甚至可以一步一步地对局部代码进行调试。
|
|
|
|
|
|
|
|
|
|
- 解码:
|
2018-08-05 16:43:10 +07:00
|
|
|
|
|
|
|
|
|
```text
|
2017-11-10 19:51:12 +07:00
|
|
|
|
$ apktool d app.apk -o app
|
|
|
|
|
```
|
2018-08-05 16:43:10 +07:00
|
|
|
|
|
2017-11-10 19:51:12 +07:00
|
|
|
|
- 重打包:
|
2018-08-05 16:43:10 +07:00
|
|
|
|
|
|
|
|
|
```text
|
2017-11-10 19:51:12 +07:00
|
|
|
|
$ apktool b app -o app.apk
|
|
|
|
|
```
|
|
|
|
|
|
2018-08-05 16:43:10 +07:00
|
|
|
|
### dex2jar
|
|
|
|
|
|
|
|
|
|
地址:<https://github.com/pxb1988/dex2jar>
|
2017-11-10 19:51:12 +07:00
|
|
|
|
|
|
|
|
|
dex2jar 可以实现 dex 和 jar 文件的互相转换,同时兼有 smali/baksmali 的功能。
|
|
|
|
|
|
|
|
|
|
使用方法:
|
2018-08-05 16:43:10 +07:00
|
|
|
|
|
|
|
|
|
```text
|
2017-11-10 19:51:12 +07:00
|
|
|
|
$ ./d2j-jar2dex.sh classes.dex -o app.jar
|
|
|
|
|
|
|
|
|
|
$ ./d2j-jar2dex.sh app.jar -o classes.dex
|
|
|
|
|
```
|
|
|
|
|
|
2018-08-05 16:43:10 +07:00
|
|
|
|
### enjarify
|
|
|
|
|
|
|
|
|
|
地址:<https://github.com/Storyyeller/enjarify>
|
2017-11-10 19:51:12 +07:00
|
|
|
|
|
|
|
|
|
enjarify 与 dex2jar 差不多,它可以将 Dalvik 字节码转换成相对应的 Java 字节码。
|
|
|
|
|
|
|
|
|
|
使用方法:
|
2018-08-05 16:43:10 +07:00
|
|
|
|
|
|
|
|
|
```text
|
2017-11-10 19:51:12 +07:00
|
|
|
|
$ python3 -O -m enjarify.main app.apk
|
|
|
|
|
```
|
|
|
|
|
|
2018-08-05 16:43:10 +07:00
|
|
|
|
### JD-GUI
|
|
|
|
|
|
|
|
|
|
地址:<https://github.com/java-decompiler/jd-gui>
|
2017-11-10 19:51:12 +07:00
|
|
|
|
|
|
|
|
|
JD-GUI 是一个图形界面工具,可以直接导入 .class 文件,然后查看反编译后的 Java 代码。
|
|
|
|
|
|
2018-08-05 16:43:10 +07:00
|
|
|
|
### CTF
|
|
|
|
|
|
|
|
|
|
地址:<http://www.benf.org/other/cfr/>
|
2017-11-10 19:51:12 +07:00
|
|
|
|
|
|
|
|
|
一个 Java 反编译器。
|
|
|
|
|
|
2018-08-05 16:43:10 +07:00
|
|
|
|
### Krakatau
|
|
|
|
|
|
|
|
|
|
地址:<https://github.com/Storyyeller/Krakatau>
|
2017-11-10 19:51:12 +07:00
|
|
|
|
|
|
|
|
|
用于 Java 反编译、汇编和反汇编。
|
|
|
|
|
|
|
|
|
|
- 反编译
|
2018-08-05 16:43:10 +07:00
|
|
|
|
|
|
|
|
|
```text
|
2017-11-10 19:51:12 +07:00
|
|
|
|
$ python2 Krakatau\decompile.py [-nauto] [-path PATH] [-out OUT] [-r] [-skip] target
|
|
|
|
|
```
|
2018-08-05 16:43:10 +07:00
|
|
|
|
|
2017-11-10 19:51:12 +07:00
|
|
|
|
- 汇编
|
2018-08-05 16:43:10 +07:00
|
|
|
|
|
|
|
|
|
```text
|
2017-11-10 19:51:12 +07:00
|
|
|
|
$ python2 Krakatau\assemble.py [-out OUT] [-r] [-q] target
|
|
|
|
|
```
|
2018-08-05 16:43:10 +07:00
|
|
|
|
|
2017-11-10 19:51:12 +07:00
|
|
|
|
- 反汇编
|
2018-08-05 16:43:10 +07:00
|
|
|
|
|
|
|
|
|
```text
|
2017-11-10 19:51:12 +07:00
|
|
|
|
$ python2 Krakatau\disassemble.py [-out OUT] [-r] [-roundtrip] target
|
|
|
|
|
```
|
|
|
|
|
|
2018-08-05 16:43:10 +07:00
|
|
|
|
### Simplify
|
|
|
|
|
|
|
|
|
|
地址:<https://github.com/CalebFenton/simplify>
|
2017-11-10 19:51:12 +07:00
|
|
|
|
|
|
|
|
|
通过执行一个 app 来解读其行为,然后尝试优化代码,使人更容易理解。
|
|
|
|
|
|
2018-08-05 16:43:10 +07:00
|
|
|
|
### Androguard
|
|
|
|
|
|
|
|
|
|
地址:<https://github.com/androguard/androguard>
|
2017-11-10 19:51:12 +07:00
|
|
|
|
|
|
|
|
|
Androguard 是使用 Python 编写的一系列工具,常用于逆向工程、病毒分析等。
|
|
|
|
|
|
|
|
|
|
输入 `androlyze.py -s` 可以打开一个 IPython shell,然后就可以在该 shell 里进行所有操作了。
|
2018-08-05 16:43:10 +07:00
|
|
|
|
|
2017-11-10 19:51:12 +07:00
|
|
|
|
```python
|
|
|
|
|
a, d, dx = AnalyzeAPK("app.apk")
|
|
|
|
|
```
|
2018-08-05 16:43:10 +07:00
|
|
|
|
|
2017-11-10 19:51:12 +07:00
|
|
|
|
- `a` 表示一个 `APK` 对象
|
|
|
|
|
- 关于 APK 的所有信息,如包名、权限、AndroidManifest.xml和资源文件等。
|
|
|
|
|
- `d` 表示一个 `DalvikVMFormat` 对象
|
|
|
|
|
- dex 文件的所有信息,如类、方法、字符串等。
|
|
|
|
|
- `dx` 表示一个 `Analysis` 对象。
|
|
|
|
|
- 包含一些特殊的类,classes.dex 的所有信息。
|
|
|
|
|
|
|
|
|
|
Androguard 还有一些命令行工具:
|
2018-08-05 16:43:10 +07:00
|
|
|
|
|
2017-11-10 19:51:12 +07:00
|
|
|
|
- androarsc:解析资源文件
|
|
|
|
|
- androauto:自动分析
|
|
|
|
|
- androaxml:解析xml文件
|
|
|
|
|
- androdd:反编译工具
|
|
|
|
|
- androdis:反汇编工具
|
|
|
|
|
- androgui:图形界面
|