静如处子,动如脱兔:Dobby——静态语言Hook神器
2023-10-07 18:15:17
突破无符号限制:Dobby 助力 iOS 逆向新探索
揭秘传统 iOS 逆向的局限性
以往的 iOS 逆向技术 heavily 依赖 Objective-C 的动态性,利用符号表进行方法的 Hook。然而,对于采用静态语言编写的应用程序,例如 Swift,由于编译时已确定方法的地址,这种方法就无能为力了。
Dobby 横空出世,解锁全新逆向可能
Dobby 是 iOS 逆向领域的一项突破性创新。它无须依赖符号表,即可 Hook 静态语言中的方法。Dobby 巧妙地运用了"trampoline"技术,在目标方法的地址处插入一段代码,将控制权转移到 Hook 代码中。
Dobby 的工作原理:一步步剖析
- 定位目标方法地址: Dobby 从 Mach-O 文件或内存 dump 中查找目标方法的地址。
- 植入 trampoline 代码: 在目标方法的地址处,Dobby 插入一段 trampoline 代码,负责将控制权转移到 Hook 代码中。
- 执行 Hook 代码: 当目标方法被调用时,trampoline 代码将控制权转移到 Hook 代码。Hook 代码可以执行各种修改或操作,例如记录调用参数、修改返回值等。
- 恢复原始方法: Hook 代码执行完毕后,将控制权恢复到原始方法。
Dobby 的独特优势:为何独树一帜?
与传统逆向技术相比,Dobby 拥有以下优势:
- 无需符号表: Dobby 不受符号表限制,可以 Hook 静态语言中的方法。
- 轻量级: Dobby 的 trampoline 代码非常轻量级,对应用程序性能影响甚微。
- 可扩展性: Dobby 是一个可扩展框架,可以轻松添加新的 Hook 类型。
使用 Dobby:简单明了
Dobby 的使用十分简单:
- 引入 Dobby 库: 将 Dobby 库添加到你的项目中。
- 创建 Hook 类: 创建一个 Hook 类,继承自 Dobby 的
DBHook
类。 - 实现
hook()
方法: 在 Hook 类中实现hook()
方法,负责执行 Hook 操作。 - 安装 Hook: 使用
DBHookManager
类安装 Hook。
代码示例:
// Hook 类
class MyHook : DBHook {
override func hook() {
// Hook 操作
}
}
// 安装 Hook
let hook = MyHook()
DBHookManager.shared.install(hook)
常见问题解答
-
Dobby 对所有应用程序都适用吗?
Dobby 适用于采用静态语言编写的 iOS 应用程序。 -
Dobby 会影响应用程序性能吗?
Dobby 的 trampoline 代码轻量级,对应用程序性能影响很小。 -
如何移除 Dobby Hook?
使用DBHookManager.shared.uninstall(hook)
方法移除 Hook。 -
Dobby 与其他逆向技术相比如何?
Dobby 无需依赖符号表,可以 Hook 静态语言中的方法,这是其他逆向技术无法做到的。 -
Dobby 适用于哪些版本?
Dobby 适用于 iOS 10 及更高版本。
结语:iOS 逆向新篇章
Dobby 为 iOS 逆向带来了新的可能性。它打破了无符号限制,让静态语言中的方法也能被 Hook。随着 iOS 应用程序越来越多的采用静态语言,Dobby 将成为 iOS 逆向中不可或缺的利器。