返回

静如处子,动如脱兔:Dobby——静态语言Hook神器

IOS

突破无符号限制:Dobby 助力 iOS 逆向新探索

揭秘传统 iOS 逆向的局限性

以往的 iOS 逆向技术 heavily 依赖 Objective-C 的动态性,利用符号表进行方法的 Hook。然而,对于采用静态语言编写的应用程序,例如 Swift,由于编译时已确定方法的地址,这种方法就无能为力了。

Dobby 横空出世,解锁全新逆向可能

Dobby 是 iOS 逆向领域的一项突破性创新。它无须依赖符号表,即可 Hook 静态语言中的方法。Dobby 巧妙地运用了"trampoline"技术,在目标方法的地址处插入一段代码,将控制权转移到 Hook 代码中。

Dobby 的工作原理:一步步剖析

  1. 定位目标方法地址: Dobby 从 Mach-O 文件或内存 dump 中查找目标方法的地址。
  2. 植入 trampoline 代码: 在目标方法的地址处,Dobby 插入一段 trampoline 代码,负责将控制权转移到 Hook 代码中。
  3. 执行 Hook 代码: 当目标方法被调用时,trampoline 代码将控制权转移到 Hook 代码。Hook 代码可以执行各种修改或操作,例如记录调用参数、修改返回值等。
  4. 恢复原始方法: Hook 代码执行完毕后,将控制权恢复到原始方法。

Dobby 的独特优势:为何独树一帜?

与传统逆向技术相比,Dobby 拥有以下优势:

  • 无需符号表: Dobby 不受符号表限制,可以 Hook 静态语言中的方法。
  • 轻量级: Dobby 的 trampoline 代码非常轻量级,对应用程序性能影响甚微。
  • 可扩展性: Dobby 是一个可扩展框架,可以轻松添加新的 Hook 类型。

使用 Dobby:简单明了

Dobby 的使用十分简单:

  1. 引入 Dobby 库: 将 Dobby 库添加到你的项目中。
  2. 创建 Hook 类: 创建一个 Hook 类,继承自 Dobby 的DBHook类。
  3. 实现hook()方法: 在 Hook 类中实现hook()方法,负责执行 Hook 操作。
  4. 安装 Hook: 使用DBHookManager类安装 Hook。

代码示例:

// Hook 类
class MyHook : DBHook {
    override func hook() {
        // Hook 操作
    }
}

// 安装 Hook
let hook = MyHook()
DBHookManager.shared.install(hook)

常见问题解答

  1. Dobby 对所有应用程序都适用吗?
    Dobby 适用于采用静态语言编写的 iOS 应用程序。

  2. Dobby 会影响应用程序性能吗?
    Dobby 的 trampoline 代码轻量级,对应用程序性能影响很小。

  3. 如何移除 Dobby Hook?
    使用DBHookManager.shared.uninstall(hook)方法移除 Hook。

  4. Dobby 与其他逆向技术相比如何?
    Dobby 无需依赖符号表,可以 Hook 静态语言中的方法,这是其他逆向技术无法做到的。

  5. Dobby 适用于哪些版本?
    Dobby 适用于 iOS 10 及更高版本。

结语:iOS 逆向新篇章

Dobby 为 iOS 逆向带来了新的可能性。它打破了无符号限制,让静态语言中的方法也能被 Hook。随着 iOS 应用程序越来越多的采用静态语言,Dobby 将成为 iOS 逆向中不可或缺的利器。