返回

探索 Runtime 的奥秘:通过 fishhook 揭开 iOS 逆向的面纱

IOS

使用 fishhook 探索 iOS Runtime 的奥秘

在 iOS 逆向领域,Runtime 是一个至关重要的概念,它为 Objective-C 对象和方法提供底层支持。而 fishhook 则是一个强大的工具,它能让我们通过 Hook 系统函数来修改 Runtime 行为,从而获得深入的洞察。

了解 Runtime

Runtime 是 Objective-C 中负责管理内存布局、对象分配和方法调用的动态库。它提供了一系列方法来创建和操作对象,例如:

  • objc_msgSend:向对象发送消息
  • objc_getClass:获取类的元数据
  • objc_allocateClassPair:创建新类

fishhook 简介

fishhook 是一个由 Cydia Substrate 维护的库,它允许我们 Hook 系统函数。它通过修改函数的指令指针来实现,从而在函数执行前或执行后插入我们的代码。fishhook 在 iOS 逆向中广泛应用,因为它具有以下优点:

  • 可以 Hook 任意系统函数
  • 使用相对简单
  • 不会影响应用程序稳定性

Hook 系统函数

使用 fishhook Hook 系统函数非常简单,以下是步骤:

  1. 导入 fishhook 头文件
  2. 定义 Hook 函数
  3. 使用 fishhook_rebind_symbols 将 Hook 函数与目标函数关联
#include <fishhook/fishhook.h>

static void my_hook_function() {
    // 这里放置我们想要执行的代码
}

int main() {
    fishhook_rebind_symbols((struct rebinding[]) {
        { "target_function", my_hook_function },
        { NULL, NULL }
    }, 1);
    
    // 这里放置使用目标函数的代码
}

探索 Runtime 的奥秘

有了 Hook 系统函数的能力,我们可以深入探索 Runtime 的奥秘。例如,我们可以 Hook objc_msgSend 函数,以了解哪些方法被调用以及它们的的参数是什么。

static void my_hook_objc_msgSend(objc_msgSendFunc original, id self, SEL selector, ...) {
    // 在这里,我们可以打印方法名称和参数
    
    // 调用原始函数继续执行
    original(self, selector, ...);
}

int main() {
    fishhook_rebind_symbols((struct rebinding[]) {
        { "objc_msgSend", my_hook_objc_msgSend },
        { NULL, NULL }
    }, 1);
    
    // 这里放置使用 Objective-C 方法的代码
}

使用 fishhook 进行 iOS 逆向

fishhook 在 iOS 逆向中非常有用。它允许我们:

  • 绕过代码签名验证: 通过 Hook _dyld_get_image_name 函数,我们可以欺骗应用程序使其加载未签名的代码。
  • 调试正在运行的应用程序: 通过 Hook ptrace 函数,我们可以将正在运行的应用程序附加到调试器中。
  • 修改函数的返回值: 通过 Hook 函数的返回地址,我们可以修改函数返回的值。

结论

fishhook 是一个功能强大的工具,它使我们能够深入探索 iOS Runtime。通过 Hook 系统函数,我们可以理解应用程序的内部工作原理,绕过安全限制,并进行各种逆向分析。对于 iOS 安全研究员、逆向工程师和开发人员来说,它都是一个必备工具。

常见问题解答

  • 什么是 Runtime?
    Runtime 是一个负责管理内存布局、对象分配和方法调用的动态库。
  • 什么是 fishhook?
    fishhook 是一个库,它允许我们通过修改函数的指令指针来 Hook 系统函数。
  • 如何使用 fishhook Hook 系统函数?
    要 Hook 系统函数,需要导入 fishhook 头文件,定义 Hook 函数,并使用 fishhook_rebind_symbols 将 Hook 函数与目标函数关联。
  • fishhook 有什么优势?
    fishhook 可以在不影响应用程序稳定性的情况下 Hook 任意系统函数。
  • fishhook 在 iOS 逆向中有哪些用途?
    fishhook 可用于绕过代码签名验证、调试正在运行的应用程序和修改函数的返回值。