debugserver + lldb环境搭建

1、重签debugserver

找到你Xcode的位置,右键打开包内容,然后按路径 /Applications/Xcode.app/Contents/Developer/Platforms/iPhoneOS.platform/DeviceSupport找到和你手机系统版本对应的DeveloperDiskImage.dmg

打开DeveloperDiskImage.dmg,找到/usr/bin/debugserver

拷贝一份debugserver到桌面

wifi:~ clf$ cp /Volumes/DeveloperDiskImage/usr/bin/debugserver ~/Desktop/debugserver

接下来,想让debugserver成功跑起来要做两件事

1)给debugserver瘦身

瘦身要把debugserver瘦成和我们设备相同arm指令集的对应类型,可参照下图


然后执行命令

 wifi:~ clf$ lipo -thin arm64 ~/Desktop/debugserver -output ~/Desktop/debugserver

备注:如果ldid支持fat binary的话,就不用瘦身,我还没有去验证ldid支不支持,所以还是瘦身下比较靠谱。

2)给debugserver添加task_for_pid权限

只有打了task_for_pid权限我们才可以在后来以进程为单位调试我们要调试的App。

查看原始的debugserver的签名属性:

ldid -e ~/Desktop/debugserver

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
<plist version="1.0">
<dict>
    <key>com.apple.backboardd.debugapplications</key>
    <true/>
    <key>com.apple.backboardd.launchapplications</key>
    <true/>
    <key>com.apple.diagnosticd.diagnostic</key>
    <true/>
    <key>com.apple.frontboard.debugapplications</key>
    <true/>
    <key>com.apple.frontboard.launchapplications</key>
    <true/>
    <key>com.apple.security.network.client</key>
    <true/>
    <key>com.apple.security.network.server</key>
    <true/>
    <key>com.apple.springboard.debugapplications</key>
    <true/>
    <key>run-unsigned-code</key>
    <true/>
    <key>seatbelt-profiles</key>
    <array>
        <string>debugserver</string>
    </array>
</dict>
</plist>

如果你输出结果有乱码什么的显示,就说明你的ldid有问题。

下面我们给debugserver重签名

新建一个entitlement.plist文件,内容如下:

 <?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/ PropertyList-1.0.dtd">
<plist version="1.0">
    <dict>
        <key>com.apple.springboard.debugapplications</key>
        <true/>
        <key>run-unsigned-code</key>
        <true/>
        <key>get-task-allow</key>
        <true/>
        <key>task_for_pid-allow</key>
        <true/>
    </dict>
</plist>

重签名,执行命令:

wifi:Desktop clf$ codesign -s - --entitlements entitlements.plist -f debugserver
debugserver: replacing existing signature

再查看下debugserver的签名:

wifi:Desktop clf$ ldid -e ~/Desktop/debugserver
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
<plist version="1.0">
<dict>
    <key>com.apple.springboard.debugapplications</key>
    <true/>
    <key>run-unsigned-code</key>
    <true/>
    <key>get-task-allow</key>
    <true/>
    <key>task_for_pid-allow</key>
    <true/>
</dict>
</plist>

把旧的属性列表替换掉了,说明OK了。

2、把重签名的debugserver拷贝到手机上
wifi:Desktop clf$ scp -p 22 debugserver root@192.168.2.2:/usr/bin/
root@192.168.2.2's password: 
22: No such file or directory
debugserver                                 100% 4599KB   2.1MB/s   00:02  

接下来就可以再手机上使用debugserver了。
当然你要赋予debugserver执行权限

iPhone:~ root# chmod +x /usr/bin/debugserver

备注:

如果你手机连接过xcode做过任何调试,在你手机的 /Developer/usr/bin/ 目录下会有个debugserver,你也可以把这个传到电脑上,重签名后再传回到手机上,这样的好处是不用瘦身,这个debugserver对应的指令集就是手机的指令集)

3、远程调试

再手机上开启debugserver

debugserver *:1212 -a <process name>

 iPhone:~ root# debugserver *:1212 -a TargetApp

失败了

 debugserver-@(#)PROGRAM:debugserver  PROJECT:debugserver-360.0.26.1
for arm64.
Attaching to process TargetApp...
error: failed to attach to process named: "" 
Exiting.

然后我尝试开启一个手机上有的程序

iPhone:~ root# debugserver *:1212 -a QQ  
debugserver-@(#)PROGRAM:debugserver  PROJECT:debugserver-360.0.26.1
 for arm64.
Attaching to process QQ...
Listening to port 1212 for a connection from *...

这个就是成功了的。

如果debugserver开启成功,就可以在电脑终端使用lldb命令
命令lldb,然后process connect connect://yourPhoneIp:1212

 wifi:Desktop clf$ lldb
 (lldb)  process connect connect://192.168.2.2:1212

这时候连接手机的一端就会增加一句输出

debugserver-@(#)PROGRAM:debugserver  PROJECT:debugserver-360.0.26.1
 for arm64.
Attaching to process QQ...
Listening to port 1212 for a connection from *...
Waiting for debugger instructions for process 0.

稍等一下,之后就会连接成功,然后就可以利用lldb的命令行,来调试连接的App了

当然这里QQ是从App Store上下载的,加壳的,我们负载不了

(lldb)  process connect connect://192.168.2.2:1212
Process 18659 stopped
* thread #1, queue = 'com.apple.main-thread', stop reason = signal SIGSTOP
frame #0: 0x0000000185231cf8 CoreFoundation`_CFSetTSD + 64
CoreFoundation`_CFSetTSD:
->  0x185231cf8 <+64>: cbnz   x22, 0x185231d20          ; <+104>
0x185231cfc <+68>: orr    w0, wzr, #0x1
0x185231d00 <+72>: mov    w1, #0x468
0x185231d04 <+76>: bl     0x1853c508c               ; symbol stub for: __76-[_CFXPreferences copyAppValueForKey:identifier:container:configurationURL:]_block_invoke
Target 0: (QQ) stopped.
(lldb)  

常见错误:

(lldb) process connect connect://127.0.0.1:1212
error: Failed to connect port
电脑端添加端口映射:iproxy 1212 1212
Failed to get connection from a remote gdb process. Exiting.

解决:删除debugserver 的以下权限,重新签名。
com.apple.security.network.server
com.apple.security.network.client
seatbelt-profiles
888:~ root# /usr/bin/debugserver --version
zsh: killed     /usr/bin/debugserver --version
解决:重签名使用codesign -fs
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 216,919评论 6 502
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 92,567评论 3 392
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 163,316评论 0 353
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 58,294评论 1 292
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 67,318评论 6 390
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 51,245评论 1 299
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 40,120评论 3 418
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 38,964评论 0 275
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 45,376评论 1 313
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 37,592评论 2 333
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 39,764评论 1 348
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 35,460评论 5 344
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 41,070评论 3 327
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 31,697评论 0 22
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 32,846评论 1 269
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 47,819评论 2 370
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 44,665评论 2 354

推荐阅读更多精彩内容