目录
众所周知,trace 在算法分析中的地位举足轻重。但在 iOS 上,用 Frida Stalker 不够稳定、也容易被检测到;用 unidbg 或 chomper 又得补一大堆环境。所以今天,Ta来了!Ta 来了!Ta带着 QBDI 和 Dobby 走来了,不仅有着简单的界面,还有着实实在在的功能。
这是本人在二进制分析过程中结合大模型开发的一个工具,欢迎大家交流学习,后续会考虑公布源码。
想快速常常工具的咸淡,请根据自己的越狱方式下载 com.snk.qbditracer_iphoneos-arm.deb 或者 com.snk.qbditracer_iphoneos-arm64.deb
QBDI(QuarkslaB Dynamic binaryInstrumentation)是一款动态二进制插桩框架。简单说,它能把一段代码"托管"到自己的虚拟环境里执行,每执行一条指令都回调一次——于是你就能逐条指令地观察目标代码怎么跑、寄存器和内存怎么变,而不用改动原始二进制。
早期 QBDI 在 iOS 中支持有限,但官网最新版已经正式支持 iOS ARM64 。这也是本项目选择它的直接原因:能在越狱 iPhone 上稳定地做指令级 trace。
QBDI 只解决"逐条指令记录"这件事,但它本身不负责把自己挂到目标代码上 ——你得先有办法在某个地址"插一脚",把控制权交给 QBDI。
这一步就交给 Dobby 。Dobby 是一个 inline hook 库,负责在指定地址下钩子。二者分工很清晰:
一个管"从哪进",一个管"怎么记",配合起来才能实现"在函数中间任意一段,逐指令 trace"的效果。
每 trace 到一条指令,日志里会输出一行,格式如下:
为了让日志不至于爆炸,寄存器采用增量输出 :
寄存器值统一以 16 位十六进制显示(如 0x000000016fdff8a0)。
在规则的「记录内容(logMask)」里勾选 向量寄存器(VREG) ,就会额外记录向量寄存器 v0–v31。它们和通用寄存器一样采用增量输出,但单独占一行、以 V{...} 开头:
每个向量寄存器是 128 位,以 32 位十六进制显示(高 64 位在前、低 64 位在后)。
向量寄存器数据量大,默认不开。调试 NEON、加解密等涉及向量运算的代码时再勾选。
插件顶部有一个总开关,它是所有规则的总闸。关闭时,即使 trace 条目已经配好,规则也不会生效。所以开始 trace 前,先确认总开关是打开的。
在某条 trace 条目上右滑 ,可以停用这条规则——规则还在,只是暂时不跑,方便随时切换。
在某条 trace 条目上左滑 ,则可以导出、复制或删除这条规则。
如果之前创建并导出过规则,直接选 【导入 Tracer】 就能复用,省去重新配置。下面介绍从零创建一条新规则。
进入后,先选定要 trace 的目标 App,再填入目标模块名,以及 trace 的起始地址和结束地址。
其中「延迟」是指等程序启动、加载完相关库之后再开始 trace,留几秒缓冲能避免模块还没就位就 hook 失败。「trace 次数」通常设为 1 就够了。
监视的作用,是当 trace 到某个地址时,把指定寄存器的值输出出来。输出形式可以按需选择,比如按字符串读取,或者以 dump 形式呈现。
添加完成后,效果如下:
举个例子,配好下面这几条监视后,trace 日志里就会输出对应的数据:
冰与火的战歌:Windows内核攻防实战高级班!从零到实战,融合AI与Windows内核攻防全技术栈,打造具备自动化能力的内核开发高手。
最后于 23小时前
被αβγδεξπ编辑
,原因:
上传的附件: