论坛首页 安全工具分享区 阅读主题

《安卓逆向这档事》第二十三课、黑盒魔法之Unidbg

320 浏览 19 回复
#1 楼主 2026-06-01 21:09:13
1.了解unicorn与unidbg
2.源码学习unidbg的常用api
3.了解unidbg_hook
4.了解unidbg_patch1.教程Demo
2.IDEA
3.IDA
开源地址
Unicorn 是一个由新加坡南洋理工大学团队在2015年开源的CPU模拟器框架,它支持多种架构,包括X86/X64/ARM/ARM64/MIPS等。Unicorn 的主要特点是:开源地址
Unidbg(Unicorn Debugger)是一个开源的轻量级模拟器,主要设计用于模拟执行Android平台上的Native代码。它由凯神在2019年开源,基于Maven构建,使用Java语言编写,可以在IDE中打开和运行。Unidbg能够模拟Android Native函数的执行,让逆向工程师和安全研究人员能够分析和理解二进制文件的运行行为。它支持模拟系统调用和JNI调用,使得可以在模拟环境中执行依赖这些调用的代码。Unidbg基于Unicorn项目,Unidbg的优势在于它提供了一种隐蔽的监控手段,可以模拟复杂的Native环境,帮助用户进行深入的动态分析。由于其开源特性,Unidbg得到了社区的广泛支持和持续更新,成为了Android Native逆向分析领域中一个强有力的工具。
竞争者: AndroidNativeEmu 和继任者 ExAndroidNativeEmu (Unidbg优点:模拟实现了更多的系统调用和 JNI)1.下载idea
社区版下载链接
2.下载源代码,并用idea打开,并配置好sdk
3.文件结构解析:23 和 19 分别对应于 sdk23(Android 6.0) 和 sdk19(Android 4.4)的运行库环境,处理 64 位 SO 时只能选择 SDK23。
基本类型直接传递,int、long、boolean、double 等。对于其他数据类型需要借助resolveClass构造,例如Context符号调用偏移调用1.获取 HookZz 实例:2.wrap_hook函数:wrap函数有两个重载,一个基于符号寻址,一个基于地址寻址,本质没区别,符号寻址的最终也是会调用symbol.getAddress()
参数里的WrapCallback的泛型接口有三个RegisterContext(函数 Hook)、HookZzArm32RegisterContext(针对ARM32位)和HookZzArm64RegisterContext(针对ARM64位)因为可以访问某个寄存器的值,所以适用于inline hook

而在HookZzArm64RegisterContext中则是通过以下的方法去获取对应的寄存器的值

3.instrument_inline_hook函数4.replace替换函数*Console Debugger(控制台调试器)是 Unidbg 提供的一个强大工具,允许用户在模拟执行过程中设置断点、单步调试、查看和修改内存及寄存器等操作,从而深入分析目标程序的行为。替换返回值Patch 就是直接对二进制文件进行修改,Patch本质上只有两种形式百度云
阿里云
哔哩哔哩
教程开源地址
PS:解压密码都是52pj,阿里云由于不能分享压缩包,所以下载exe文件,双击自解压白龙unidbg教程
凯神博客
app逆向
【转载】Unidbg Hook 大全


特性
描述


使用场景


模拟执行
执行目标 SO 文件中用户关注的函数,获取与真机等价的结果;替代 Frida/Xposed Call 进行 RPC 调用。


监控观察
观察样本对环境的信息获取与修改;监控所有类型的外部信息访问,包括系统调用、库函数、JNI 调用、文件读写等。


辅助算法分析和还原
提供 Hook/Debug/Trace 等分析能力,结合时间旅行调试器(Time-Travel Debugging),无疑是Android Native 上强大的分析神器。


优点


低成本
减少设备成本和改机成本,无需购置和维护大量真机或租借云手机。


灵活性
可以模拟或代理所有函数调用接口,方便模拟设备环境变化。


监控能力
能够监控 Native 层的详细执行流,包括 JNI 调用和文件访问。


分析能力
结合时间旅行调试器,提供强大的算法分析和还原能力。


缺点


学习成本高
尤其是环境补全(补环境)部分,如果补得不好,即使跑出结果也无法使用。


执行速度慢
基于 Unicorn 的模拟执行速度相比真机慢很多,尽管有 Dynarmic 等方案可以提高速度,但牺牲了部分辅助算法还原的能力。


功能限制
没有为特定场景做专门的优化,也没有提供配置管理功能;没有实现对所有系统调用的良好模拟,可能导致某些逻辑处理失败。


扩展性差
作为一个 Java 项目,Unidbg 无法作为 IDA 或 Ghidra 插件,也难以轻松嵌入到其他项目中,不如 Python 项目灵活。

---
来源: 看雪论坛
原文链接: https://bbs.kanxue.com/thread-285073.htm
#2 2026-06-01 21:09:13
向大佬学习
#3 2026-06-01 21:09:13
向大佬学习
#4 2026-06-01 21:09:13
感谢分享
#5 2026-06-01 21:09:13
东西是好东西,就是补环境痛不欲生
#6 2026-06-01 21:09:13
学习
#7 2026-06-01 21:09:13
感谢分享,向大佬学习
#8 2026-06-01 21:09:13
大佬牛逼
#9 2026-06-01 21:09:13
为你点赞!
#10 2026-06-01 21:09:13
mb_xakebdpt


落后

大佬发个先进的出来让我们学习下
#11 2026-06-01 21:09:13
大佬牛逼
#12 2026-06-01 21:09:13
感谢分享,向大佬学习
#13 2026-06-01 21:09:13
很好,我最近正好想看看这俩玩意有啥区别,想啥来啥,想吃奶了,娘来了!想娘家人了,孩子他舅舅来了!
压着腕,闭着火
#14 2026-06-01 21:09:13
落后
#15 2026-06-01 21:09:13
你的分享对大家帮助很大,非常感谢!
#16 2026-06-01 21:09:13
很好,我最近正好想看看这俩玩意有啥区别,想啥来啥,想吃奶了,娘来了!想娘家人了,孩子他舅舅来了!
压着腕,闭着火
‹ 上一页 1 2 下一页 ›

请登录后参与讨论

立即登录 注册账号