Contents
将 apk 逆向为 smali
什么是 smali
https://ctf-wiki.github.io/ctf-wiki/android/basic_operating_mechanism/java_layer/smali/smali-zh/#smali
unzip sieve.apk -d sieve_out
对于未加壳的 apk, 对 apk 进行 unzip 即可获取 dex (Dalvik Executable)Davik 虚拟机可执行文件。
简而言之, smali 可以理解为 Davik 虚拟机的汇编语言,Dalvik 虚拟机由 C/C++ 编写运行于 CPU ARM 架构的 Linux 上(即手机)。
为什么要将 apk 转化为 smali
便于做进一步制作软件自动化分析,进行数据流和控制流的分析,以及污点追踪等。
安装 apktool
https://ibotpeaches.github.io/Apktool/install/
将 apk 反编译为 smali
apktool decode sieve.apk
将 smali 编译为 dex
给定一个 smali 文件,我们可以使用如下方式将 smali 文件编译为 dex 文件。
(一般重打包应用时会应用该方式)
java -jar smali.jar assemble src.smali -o src.dex
其中,smali.jar 来自于 https://bitbucket.org/JesusFreke/smali/overview。
使用 Dalvik 运行 dex 文件
在将 smali 文件编译成 dex 文件后,我们可以进一步执行。
首先,使用 adb 将 dex 文件 push 到手机上。
adb push main.dex /sdcard/
其次使用如下命令执行
adb shell dalvikvm -cp /sdcard/main.dex main
其中
- 这里我们使用 dalvikvm 命令。
-cp
指的是 classpath 路径,这里就是 /sdcard/main.dex。- main 指的是类名。
参考资料
1 ctf wiki 关于 smali 的介绍
https://ctf-wiki.github.io/ctf-wiki/android/basic_operating_mechanism/java_layer/smali/smali-zh/#smali
2 smali 汇编/反汇编工具 wiki
https://github.com/JesusFreke/smali/wiki
3 关于 apktool 的提问
https://gitter.im/iBotPeaches/Apktool
4 apktool 基本文档
https://ibotpeaches.github.io/Apktool/documentation/#introduction
Leave a Reply