美文网首页
16_动态调试

16_动态调试

作者: 伶俐ll | 来源:发表于2020-08-18 08:42 被阅读0次

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

一、xcode的动态调试原理

Snip20200813_11.png

首先,lldb传送指令给debugserver,debugserver接收到指令后将指令在app中执行,app再将反馈信息交给debugserver,debugserver再将反馈信息传送lldb。

关于GCC、LLVM、GDB、LLDB
  • xcode的编译器发展历程:GCC -> LLVM
  • xcode的调试器发展历程:GDB -> LLDB
关于debugserver
  • debugserver一开始存放在Mac的Xcode里面
    /Applications/Xcode.app/Contents/Developer/Platforms/iPhoneOS.platform/De viceSupport/9.1/DeveloperDiskImage.dmg/usr/bin/debugserver
  • 当Xcode识别到手机设备时,Xcode会自动将debugserver安装到iphone上
    /Developer/usr/bin/debugserver
  • Xcode调试具有局限性,一般只能调试通过Xcode安装的APP

二、动态调试任意 app

Snip20200813_12.png
debugserver的权限问题
  • 默认情况下,通过xcode安装的/Developer/usr/bin/debugserver缺少一定的权限,只能调试通过xcode安装的APP,无法调试其他APP(比如来自App Store的APP)
  • 如果希望调试其他APP,需要对debugserver重新签名,签上2个调试相关的权限
    get-task-allow
    task_for_pid-allow
如何给debugserver签上权限
  • iphone上的/Developer目录是只读的,无法直接对/Developer/usr/bin/debugserver文件签名,需要先把debugserver复制到Mac

  • 通过ldid命令导出文件以前的签名权限
    % ldid -e debugserver > debugserver.entitlements

  • 给debugserver.entitlements文件加上get-task-allowtask_for_pid-allow权限

    Snip20200813_14.png
  • 通过ldid命令重新签名
    ldid -Sdebugserver.entitlements debugserver

  • 将已经签好权限的debugserver放到/usr/bin目录,便于找到debugserver指令

  • 给debugserver文件赋予可执行权限
    ~ root# chmod +x /usr/bin/debugserver

让debugserver附加到某个APP进程

debugserver *:端口号 -a 进程

~ root# debugserver *:10011 -a YueLiao
  • 端口号:使用iphone的某个端口启动debugserver服务(只要不是保留端口号就行)
  • -a 进程:输入APP的进程信息(进程ID或者进程名称)
在Mac上启动LLDB,远程连接iphone上的debugserver服务
  • 启动lldb
lingli@bogon ~ % lldb
(lldb) 
  • 连接debugserver服务

    • (lldb) process connect connect://手机IP地址:debugserver服务端口号
    (lldb) process connect connect://192.168.1.26:10011
    
    • 端口映射
      将iphone的10011端口映射到Mac的10011端口,与Mac的10011端口进行连接
     % python ~/Documents/iOS/usbmuxd/tcprelay.py -t 22:10010 10011:10011
     
     ~ root# debugserver *:10011 -a YueLiao
    
     lingli@bogon ~ % lldb
     (lldb) process connect   connect://localhost:10011
    
  • 使用LLDB的c命令让程序先继续运行
    c(continue)

(lldb) c
Process 7541 resuming

相关文章

  • 16_动态调试

    将程序运行起来,通过打断点,打印等方式,查看参数、返回值、函数调用等流程等。 一、xcode的动态调试原理 首先,...

  • IOS逆向_动态调试:debugserver

    1. 动态调试的概念; 2. Xcode动态调试的原理; 3. 通过debugserver调试APP; 1. 动态...

  • 十二 iOS逆向-动态调试

    动态调试概念 Xcode动态调试原理 调试任意第三方App LLDB简介 一 动态调试概念 就是在程序运行的过程中...

  • iOS安全防护方案

    1.阻止动态调试 GDB、LLDB是Xcode内置的动态调试工具。使用GDB、LLDB可以动态的调试你的应用程序(...

  • iOS逆向工程(八):动态调试

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

  • iOS逆向工程(八):动态调试

    动态调试 一、什么是动态调试 1.动态调试就是将程序运行起来,通过打断点、打印等方式,查看参数、返回值、函数调用流...

  • Nexus 5X如何开启系统调试,如何root

    一、如何开启系统调试 很多时候我们逆向app的时候就会需要动态调试,动态调试需要修改AndroidManifest...

  • iOS 项目中安全相关

    动态调试攻击风险 非 DEBUG 模式下禁止调试

  • Python(七十七)管道、日志与全站爬取

    16_管道、日志与全站爬取/myspider02/myspider02/items.py: 16_管道、日志与全站...

  • 动态调试

    动态调试简介 将程序运行起来,通过下断点,打印等方式,查看参数,返回值,函数调用流程等。 Xcode的动态调试原理...

网友评论

      本文标题:16_动态调试

      本文链接:https://www.haomeiwen.com/subject/bybbdktx.html