debugserver 动态调试

栏目: IOS · 发布时间: 5年前

内容简介:动态调试是指将程序运行起来,通过下断点、打印等方式,查看参数、返回值、函数调用流程等。通过

动态调试是指将程序运行起来,通过下断点、打印等方式,查看参数、返回值、函数调用流程等。

一、Xcode动态调试原理

Xcode 内置调试器 lldb 将输入的指令通过 debugserver 传输给App,App执行指令后将反馈信息再通过 debugserver 传送给 lldb

debugserver 动态调试
  • 关于GCC、LLVM、GDB、LLDB

    Xcode
    Xcode
    
  • debugserver 一开始存放在电脑中的 Xcode 里面(注意版本号)

    • /Applications/Xcode.app/Contents/Developer/Platforms/iPhoneOS.platform/DeviceSupport/9.1/DeveloperDiskImage.dmg/usr/bin/debugserver
  • Xcode 识别到手机设备时,会将 debugserver 安装到手机上

    • /Developer/usr/bin/debugserver
  • Xcode 动态调试局限性

    • 一般情况下,只能调试通过 Xcode 安装的App

二、动态调试任意App

通过 Xcode 安装到手机上的 debugserver 缺少一定权限,只能调试通过 Xcode 安装的APP。若想调试任意APP,则需要对 debugserver 做一些改动。 手机上的 /Developer 目录是只读的,无法直接对 /Developer/usr/bin/debugserver 文件修改,需要先把其复制到电脑。

0x01 debugserver瘦身

  • 默认情况 debugserver 是支持全部 arm 架构

    $ lipo -info debugserver
    
    Architectures in the fat file: debugserver are: armv7 armv7s arm64 
    复制代码
  • 减小 debugserver 的大小,只支持当前手机架构

    $ lipo debugserver -thin arm64 -output debugserver_64
    $ lipo -info debugserver_64 
    
    Non-fat file: debugserver_64 is architecture: arm64
    复制代码

0x02 给debugserver新增权限

  • 获取 debugserver 初始权限

    $ codesign -d --entitlements - 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>
    复制代码
  • 将上面获取的原始权限保存到 debugserver.entitlements 中,并添加两个调试相关权限

debugserver 动态调试

0x03 对debugserver重签名

  • codesign

    # 签名权限
    $ codesign -f -s - --entitlements debugserver.entitlements debugserver_64
    
    debugserver_64: replacing existing signature
    
    # 或简写为
    $ codesign -fs- --entitlements debugserver.entitlements debugserver_64
    复制代码
  • ldid

    # 获取debugserver之前那的权限(可到当前目录下查看debugserver.entitlements内容)
    $ ldid -e debugserver > debugserver.entitlements
    
    # 添加两个权限
    
    # 重签名
    $ ldid -Sdebugserver.entitlements debugserver
    
    debugserver_64: replacing existing signature
    复制代码

任选上述两种方法的一种重签名方式,将签好权限的 debugsever_64 重命名为 debugserver ,复制到手机的 /usr/bin/debugserver ,便于找到 debugserver 指令。

  • ssh 登录到手机给 debugserver 执行权限

    iPhone:~ root# chmod +x /usr/bin/debugserver
    复制代码

以上就是本文的全部内容,希望本文的内容对大家的学习或者工作能带来一定的帮助,也希望大家多多支持 码农网

查看所有标签

猜你喜欢:

本站部分资源来源于网络,本站转载出于传递更多信息之目的,版权归原作者或者来源机构所有,如转载稿涉及版权问题,请联系我们

Python Cookbook 中文版,第 3 版

Python Cookbook 中文版,第 3 版

David M. Beazley、Brian K. Jones / 陈舸 / 人民邮电出版社 / 2015-5-1 / 108.00元

《Python Cookbook(第3版)中文版》介绍了Python应用在各个领域中的一些使用技巧和方法,其主题涵盖了数据结构和算法,字符串和文本,数字、日期和时间,迭代器和生成器,文件和I/O,数据编码与处理,函数,类与对象,元编程,模块和包,网络和Web编程,并发,实用脚本和系统管理,测试、调试以及异常,C语言扩展等。 本书覆盖了Python应用中的很多常见问题,并提出了通用的解决方案。......一起来看看 《Python Cookbook 中文版,第 3 版》 这本书的介绍吧!

随机密码生成器
随机密码生成器

多种字符组合密码

URL 编码/解码
URL 编码/解码

URL 编码/解码

Markdown 在线编辑器
Markdown 在线编辑器

Markdown 在线编辑器