Neurohazard
暮雲煙月,皓首窮經;森羅萬象,如是我聞。

将 apk 逆向为 smali

wpadmin~April 24, 2020 /InfoSec

将 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

其中

参考资料

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

Your email address will not be published. Required fields are marked *