基于 unidbg 模拟执行 so 文件

13.9 节和 13.10 节介绍的两种方式都是在 Android 手机上执行的 so 文件,那有没有办法可以在电脑上直接执行 so 文件呢?当然也是有方法的,Python 的 AndroidNativeEmu 和 Java 的 unidbg 等都支持在电脑上直接执行 so 文件。

目前,unidbg 的功能相对来说更为强大,使用也更为广泛,所以本节我们介绍利用 unidbg 模拟执行 so 文件的方法。

unidbg的简介

unidbg 是一个基于 unicorn 的逆向工具(unicorn 是一个 CPU 模拟框架),在 unicorn 的基础上,unidbg 可以模拟 JNI 调用 Native API,支持模拟调用系统指令,支持 JavaVM、JNIEnv 和模拟 ARM32、ARM64指令。于是unidbg 就可以支持执行基于 ARM 指令的 so 文件,也就是可以模拟执行 Android 手机上的 so 文件。另外除了模拟执行,unidbg 还支持 Native 层的 Hook 操作,我们可以通过 Hook 的方式拦截和修改 Native 层的一些逻辑。

unidbg 的 GitHub 地址是 https://github.com/zhkl0228/unidbg ,里面包含更多详情介绍。

准备工作

模拟执行

暴露结果

爬取数据

总结

本节中我们学习了利用 unidbg 模拟执行 so 文件的方法,同时为了实现数据爬取,我们通过 SpringBoot 暴露了模拟执行的结果,最后顺利通过 Python 脚本对接接口的方式爬取了数据。

本节内容其实仅用到了 unidbg 所有功能的冰山一角,要想深入了解更多内容,可以研究 unidbg 的源码。