4

Android逆向之unidbg调用.so文件

 2 years ago
source link: https://www.biaodianfu.com/unidbg.html
Go to the source link to view the article. You can view the picture content, updated content and better typesetting reading experience. If the link is broken, please click the button below to view the snapshot at that time.
neoserver,ios ssh client

目前很多 App 的加密签名算法都在so文件中,常规的方式是通过IDA PRO对.so文件进行反编译,由于操作复杂且需要看反编译后的代码,比较耗精力。比较简单的方式是直接通过JAVA程序调用.so文件,直接像APP的JNI接口一样调用。unidbg就是这样一个工具。

unidbg简介

由于现在的大多数 app 把签名算法已经放到了 so 文件中,所以要想破解签名算法,必须能够破解 so 文件。但是我们知道,C++ 的逆向远比 Java 的逆向要难得多了,所以好多时候是没法破解的,那么这个时候还可以采用 hook 的方法,直接读取程序中算出来的签名,但是这样的话,需要实际运行这个应用,需要模拟器或者真机,效率又不是很高。

unidbg 是一个基于 unicorn 的逆向工具,可以黑盒调用安卓和 iOS 中的 so 文件。它可以让你在电脑上跑arm的可执行文件或共享库文件。unidbg 是一个标准的Java项目。

Unicorn是一个基于Qemu的轻量级的多平台、多架构的 CPU 模拟器框架。一句话让我们明白了它是做什么的。在Unidbg对一个ELF文件进行模拟执行的时候,我们一般是在跨平台运行的,所以就底层就需要一个模拟器Backend。其中一种就是Unicorn。

unidbg 就是一个很巧妙地解决方案,他不需要直接运行 app,也无需逆向 so 文件,而是通过在 app 中找到对应的 JNI 接口,然后用 unicorn 引擎直接执行这个 so 文件,所以效率也比较高。

unidbg特点:

  • 模拟JNI调用API,可以调用JNI_OnLoad
  • 支持JavaVM,JNIEnv
  • 模拟系统调用
  • 支持ARM32和ARM64
  • 内联钩子(Inline Hook)
  • Android import hook
  • iOS 的一些hook工具 fishhook and substrate and whale hook
  • 支持简单的控制台调试器,gdb存根,实验性IDA android调试器服务器,指令跟踪,内存读/写跟踪
  • 支持iOS objc和Swift

unidbg使用

unidbg项目用Java编写,并且官网下载的下来的代码使用的是标准的maven构建的,所以在使用unidbg之前需要修改先安装好JDK环境和Maven环境。将下载的unidbg-master.zip进行解压,然后使用IDEA导入项目。【File】 –> 【New】–> 【Project from Existing Sources】

然后等待pom.xml中的所需包下载完成。

完成后打开响应的目录即可查看示例代码:

unidbg实战

由于自己对Java不是很熟悉,暂时没有实战项目,待后期有具体案例再做分享。


About Joyk


Aggregate valuable and interesting links.
Joyk means Joy of geeK