unidbg介绍
- unicorn介绍
好比是一个CPU,可以模拟执行各种指令
提供了很多编程语言接口,可以操作内存、寄存器等
但它不是一个系统,内存管理、文件管理、系统调用等都需要自己来实现 - 基于unicorn开发的框架
cemu 用来学习汇编的好工具
AndroidNativeEmu Python开发
unidbg Java开发 unidbg
支持模拟JNI调用
支持模拟系统调用指令
支持ARM32和ARM64
支持Hookzz、Dobby、xHook、原生unicorn Hook等Hook方式
支持Android、iOS
好比是在CPU上搭建了一个系统,因此可以很方便地在PC端模拟运行so
学习成本较低,不需要复现so算法,补环境后直接运行即可unidbg入门案例
代码基本框架
会自动调用init和init_array
JNI_OnLoad的调用可以自己选择,可以不调用
Inspector.inspect(…, false) 便捷打印Java的byte数组- callStaticJniMethodObject
该函数比callFunction多封装了一些代码
不需要自己寻找函数地址
不需要自己包装参数 - 通过符号寻找函数地址的过程
通过传入的符号在动态注册函数中寻找函数地址 nativesMap
如果找不到,则按静态注册规则拼接符号,然后寻找函数地址
函数名和函数签名 - 对传入的参数进行包装的过程
