type
Post
status
Published
date
Mar 31, 2026
slug
summary
在 iOS 安全研究和逆向分析中,动态调试是一项至关重要的技术。通过动态调试,我们可以实时观察程序的运行状态、内存数据以及函数调用流程。本文将结合实际案例——“XXXX” App,分享如何搭建 iOS 动态调试环境并成功附加进程。
tags
category
技术分享
icon
password
在 iOS 安全研究和逆向分析中,动态调试是一项至关重要的技术。通过动态调试,我们可以实时观察程序的运行状态、内存数据以及函数调用流程。本文将结合实际案例——“XXXX” App,分享如何搭建 iOS 动态调试环境并成功附加进程。

1. 环境与工具准备

在开始调试之前,我们需要确保以下工具已就绪:
  • 硬件:一台已越狱的 iOS 设备(或具备调试权限的环境)。
  • 二进制文件debugserver(通常位于 iOS 系统的 /Developer/usr/bin/ 目录下,或者从 Xcode 的 SDK 中获取)。
  • 调试端工具:本地 macOS 上的 lldb 以及用于端口映射的 iproxy
  • 目标 App: XXXX (Bundle ID: cn.com.xx)。

2. 关键步骤:为 debugserver 赋予调试权限

默认的 debugserver 权限受限,无法直接调试第三方应用。我们需要通过重签名的方式为其注入特定的 entitlements

2.1 准备 Entitlements 文件

创建一个名为 debugserver.entitlements 的文件,内容如下(这是本次实战中使用的关键配置):

2.2 执行重签名

在本地终端执行以下命令:

3. 实战演示:附加“XXXX”进程

第一步:将重签名后的 debugserver 拷贝至设备

使用 scpFilza 将文件传送到设备的 /usr/bin/ 目录下,并赋予执行权限:

第二步:端口映射

在 macOS 终端启动 iproxy,将本地 1234 端口映射到设备的 1234 端口:

第三步:在设备侧启动 debugserver

首先在手机上打开“XXXX” App。然后在设备终端(SSH 连接)执行:
当看到 Listening to port 1234 for a connection from *... 时,说明 debugserver 已就绪。

第四步:本地 LLDB 连接

在 macOS 终端输入以下命令:

4. 调试验证

成功连接后,我们可以执行以下操作进行验证:
  1. 连接状态确认:看到 Process 1234 stopped 提示,表示已成功挂起进程。
  1. 查看 UI 层级:使用 po [[UIWindow keyWindow] recursiveDescription] 查看当前 UI 结构,辅助分析功能模块。
  1. 动态分析:可以设置断点 (br s -n functionName) 或观察内存数据变化。

结论

通过本次实践,我们确认了“XXXX” App 可以被动态调试。这为后续的安全加固分析或功能研究提供了坚实的基础。

免责声明:本文仅供技术交流和安全研究之用。请确保您的调试行为符合相关法律法规及平台服务协议,严禁用于非法用途。