[Tweak] 让 xcode 使用 root 权限调试iOS设备上的任何应用或进程

想必论坛各路大佬都已经知道如何使用 debugserver + lldb 在真机设备上调试任意进程了,这里就不赘述了。

使用 debugserver + lldb 调试有一个问题就是有点麻烦。虽然有一些插件简化了调试的步骤, 如:SpringBoard tweak 双击图标启动debugserver,但使用终端调试总是有点不爽。

macOS上,xcode是可以直接使用root权限调试进程的,但是iOS上不支持。

能不能让xcode也支持使用root权限调试应用或者进程呢?如果可以,那么在熟悉的xcode上面调试岂不是舒服?

xcode 在iOS上调试,是使用mobile用户,启动/Developer/usr/bin/debugserver来对进程进行附加或者其他操作。

如果能替换/Developer/usr/bin/debugserver,那么debugserver的权限问题就解决了。

可惜/Developer/usr/bin/debugserver是放在一个只读磁盘上的,无法对它进行任何操作。

换个角度,如果知道是哪个进程启动了/Developer/usr/bin/debugserver,在它启动之前将debugserver的路径替换成修改过的debugserver路径不就行了。

使用xcode调试应用时可以看到debugserver 的启动参数:

/Developer/usr/bin/debugserver --lockdown --launch=frontboard --secure-socket-proxy

可以看到 lockdown 字眼,于是谷歌了一下,找到一篇文章usbmux原理以及PeerTalk源码解析,里面有这么一段话:

三方软件读取ios设备相册, iTunes备份iPhone,Xcode真机调试, Xcode若要执行真机调试,首先需要和lockdown服务通信,发出启动调试请求,lockdown收到请求以后,启动iOS端对应的调试服务(debugserver),然后Xcode便与debugserver之间建立了通信连接。

于是基本确定目标就在提供lockdown服务的lockdownd守护进程中。

经过一通分析,最后发现在lockdownd中是使用SMJobSubmit函数来提交启动一个进程的。

启动参数如下:

{
    EnvironmentVariables =     {
        "LOCKDOWN_MACH_SERVICE" = "lockdown.12392682664230.com.apple.debugserver.DVTSecureSocketProxy";
    };
    KeepAlive = 0;
    Label = "lockdown.12392682664230.com.apple.debugserver.DVTSecureSocketProxy";
    LaunchOnlyOnce = 1;
    MachServices =     {
        "lockdown.12392682664230.com.apple.debugserver.DVTSecureSocketProxy" = 1;
    };
    POSIXSpawnType = Interactive;
    ProgramArguments =     (
        "/Developer/usr/bin/debugserver",
        "--lockdown",
        "--launch=frontboard",
        "--secure-socket-proxy"
    );
    RunAtLoad = 0;
    UserName = mobile;
}

后面就简单了,直接hook它,然后将需要启动的/Developer/usr/bin/debugserver替换成自定义的debugserver路径,同时顺便把UserName改成root,就可以达到让xcode使用root权限调试任意进程的目的了。

代码在 这里

Cydia 源:https://repo.byteage.com

7 个赞

66666666

这个跟Mac上以root身份调试进程(或者自启动服务)很像啊。也是提供一个plist文件,用的SMJobSubmit

1 个赞

6666

你好,我安装了插件还是不行

iPhone 6s , 13.6

尝试重启lockdownd进程,然后在console.app里看下是否有注入成功的日志。

另外,推荐git上面拉最新代码自行编译插件。

:ox::beer:,大佬,我拉了最新代码自己安装编译了下可以了

太牛:cow:了,新方向!

大佬 思路牛逼

装了插件 为什么设置里面没有显示这个开关

尝试安装 PreferenceLoader 插件

谢谢 可以看到了 但是我用git上的编译会
/opt/theos/Prefix.pch:11:11: fatal error: ‘Foundation/Foundation.h’ file not found
#import <Foundation/Foundation.h>

另外再请问下 这个已root权限调试 意思是app是root权限的 能做一些系统api的调用么 谢谢回复

  1. 报错请确认 /opt/theos/sdks 里面是否存在对应的sdk
  2. 字面意思,就是使用root权限来调试应用,跟应用是不是root无关。至于插件到底解决什么了问题,参考github上的 README.md