为了账号安全,请及时绑定邮箱和手机立即绑定

iOS调试中debugserver常见问题详解:连接失败、权限错误与反调试应对

标签:
iOS

常见问题

Failed to get connection from a remote gdb process

  • 现象

debugserver 去调试抖音:

debugserver -x auto 0.0.0.0:20221 /private/var/containers/Bundle/Application/9AB25481-0AD3-435C-A02E-68F9623535BB/Aweme.app/Aweme

报错:

iPhone7P-1341:~/forDebug root# debugserver -x auto 0.0.0.0:20221 /private/var/containers/Bundle/Application/9AB25481-0AD3-435C-A02E-68F9623535BB/Aweme.app/Aweme
debugserver-@(#)PROGRAM:LLDB  PROJECT:lldb-900.3.104
 for arm64.
Listening to port 20221 for a connection from 0.0.0.0...
Failed to get connection from a remote gdb process.
Exiting.

debugserver_failed_get_connection_from_gdb

  • 原因

(iPhone7P中的) debugserver,多了额外的权限:

  • com.apple.security.network.server
  • com.apple.security.network.client
  • seatbelt-profiles

导致,不允许连接进程(去调试)

  • 解决办法:去掉权限
  • 具体步骤
    用去掉了上述权限:
    <key>seatbelt-profiles</key>
    <array>
        <string>debugserver</string>
    </array>
...
    <key>com.apple.security.network.server</key>
    <true/>
    <key>com.apple.security.network.client</key>
    <true/>

的entitlements文件:

  • debugserver_noSecurity.entitlements
<?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>com.apple.backboardd.launchapplications</key>
    <true/>
    <key>com.apple.backboardd.debugapplications</key>
    <true/>
    <key>com.apple.frontboard.launchapplications</key>
    <true/>
    <key>com.apple.frontboard.debugapplications</key>
    <true/>
    <key>com.apple.private.logging.diagnostic</key>
    <true/>
    <key>com.apple.private.memorystatus</key>
    <true/>
    <key>com.apple.private.cs.debugger</key>
    <true/>
    <key>get-task-allow</key>
    <true/>
    <key>task_for_pid-allow</key>
    <true/>
    <key>run-unsigned-code</key>
    <true/>
</dict>
</plist>

加到debugserver中 == 重新给debugserver签名:

  • 推荐用 codesign
codesign -f -s - --entitlements debugserver_noSecurity.entitlements debugserver

  • iOS < 15 也可以用 ldid

    ldid -Sdebugserver_noSecurity.entitlements debugserver
    
    

再放到iPhone中==拷贝到iPhone中

scp debugserver root@192.168.0.58:/usr/bin

即可。

Failed to open log file for writing: errno = 1 (Operation not permitted)

  • 现象

用debugserver调试程序,带日志参数:

debugserver -l debugservr_20220107_1050.log 0.0.0.0:20221 -a 8829

报错:

iPhone7P-1341:~ root# debugserver -l debugservr_20220107_1050.log 0.0.0.0:20221 -a 8829
Failed to open log file 'debugservr_20220107_1050.log' for writing: errno = 1 (Operation not permitted)debugserver-@(#)PROGRAM:LLDB  PROJECT:lldb-900.3.104
 for arm64.
...

  • 原因
    • 表面原因:debugserver没有写入(日志文件的)权限

    • 深层次原因:当前 debugserver 的权限entitlements中有:

          <key>seatbelt-profiles</key>
          <array>
              <string>debugserver</string>
          </array>
      
      
      • 意思是,给debugserver开启了Sandbox
        • 导致:没有(各种的,包括文件)写入的权限
  • 解决办法:把debugserver的entitlements权限中去掉:
        <key>seatbelt-profiles</key>
        <array>
            <string>debugserver</string>
        </array>

  • 注:再重签名debugserver,写回iPhone,即可。

Segmentation fault: 11

  • 现象

debugserver调试抖音,报错:

iPhone7P-1341:~ root# debugserver 0.0.0.0:20221 -a 8829
debugserver-@(#)PROGRAM:LLDB  PROJECT:lldb-900.3.104
for arm64.
Attaching to process 8829...
Segmentation fault: 11

  • 原因:此处的iOS的app, 抖音,内部做了反调试,使得此处调试中断,无法继续调试
  • 解决办法:深入逆向对应app,找到反调试的逻辑,进行反反调试
    • 概述
      • 此处抖音的反调试手段是:二进制 AwemeCore 中用 svc 0x80 的内联汇编实现的 syscallptracePT_DENY_ATTACH
      • 此处反反调试=破解反调试的手段是:把 AwemeCore 中的 svc 0x80 指令替换成 空指令 = NOP 指令

对于更全面的iOS应用安全保护,可以使用混淆工具如IpaGuard。IpaGuard是一款强大的iOS IPA文件混淆工具,无需源码即可对代码和资源进行混淆加密,支持多种开发平台,有效增加反编译和反调试难度。

点击查看更多内容
TA 点赞

若觉得本文不错,就分享一下吧!

评论

作者其他优质文章

正在加载中
  • 推荐
  • 评论
  • 收藏
  • 共同学习,写下你的评论
感谢您的支持,我会继续努力的~
扫码打赏,你说多少就多少
赞赏金额会直接到老师账户
支付方式
打开微信扫一扫,即可进行扫码打赏哦
今天注册有机会得

100积分直接送

付费专栏免费学

大额优惠券免费领

立即参与 放弃机会
微信客服

购课补贴
联系客服咨询优惠详情

帮助反馈 APP下载

慕课网APP
您的移动学习伙伴

公众号

扫描二维码
关注慕课网微信公众号

举报

0/150
提交
取消