器→工具, 工具软件, 术→技巧, 研发

Android逆向之unidbg调用.so文件

钱魏Way · · 1,580 次浏览

目前很多 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不是很熟悉,暂时没有实战项目,待后期有具体案例再做分享。

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注