unidbg介绍

  1. unicorn介绍
    好比是一个CPU,可以模拟执行各种指令
    提供了很多编程语言接口,可以操作内存、寄存器等
    但它不是一个系统,内存管理、文件管理、系统调用等都需要自己来实现
  2. 基于unicorn开发的框架
    cemu 用来学习汇编的好工具
    AndroidNativeEmu Python开发
    unidbg Java开发
  3. unidbg
    支持模拟JNI调用
    支持模拟系统调用指令
    支持ARM32和ARM64
    支持Hookzz、Dobby、xHook、原生unicorn Hook等Hook方式
    支持Android、iOS
    好比是在CPU上搭建了一个系统,因此可以很方便地在PC端模拟运行so
    学习成本较低,不需要复现so算法,补环境后直接运行即可

    unidbg入门案例

  4. 代码基本框架
    会自动调用init和init_array
    JNI_OnLoad的调用可以自己选择,可以不调用
    Inspector.inspect(…, false) 便捷打印Java的byte数组

  5. callStaticJniMethodObject
    该函数比callFunction多封装了一些代码
    不需要自己寻找函数地址
    不需要自己包装参数
  6. 通过符号寻找函数地址的过程
    通过传入的符号在动态注册函数中寻找函数地址 nativesMap
    如果找不到,则按静态注册规则拼接符号,然后寻找函数地址
    函数名和函数签名
  7. 对传入的参数进行包装的过程