欢迎来到 嗅灵易学

零基础也能上手的脚本技术课,一对一答疑带你入门

[分享]用debugserver + lldb代替gdb进行动态调试

[分享]用debugserver + lldb代替gdb进行动态调试

根据:http://bbs.iosre.com./t/debugserver-lldb-gdb/65
在具体操作过程中有很多模糊地带,也走了很多弯路,现在记下来,分享给大家


设备:越狱后的iphone4s
iOSIP:手机的ip
~/debugserver:mac上的路径

一、配置debugserver

  1. 在iOS中安装debugserver

debugserver运行在iOS上,顾名思义,它作为服务端,实际执行LLDB(作为客户端)传过来的命令,再把执行结果反馈给LLDB,显示给用户,即所谓的“远程调试”。在默认情况下,iOS上并没有安装debugserver,只有在设备连接过一次Xcode,并在Window→Devices菜单中添加此设备后,debugserver才会被Xcode安装到iOS的“/Developer/usr/bin/”目录下。

  1. 帮debugserver减肥

将debugserver 从手机拷贝至MAC

   snakeninnysiMac:~ snakeninny$ scp root@iOSIP:/Developer/usr/bin/debugserver ~/debugserver

然后帮它减肥:

    snakeninnysiMac:~ snakeninny$ lipo -thin armv7 ~/debugserver -output ~/debugserver

注意把这里的“armv7”换成你的设备所对应的ARM。

  1. 给debugserver添加task_for_pid权限
    原文是debugserver 我测试的好像应该为debugserver的路径 ~/debugserver

下载ent.xml32到macOS的“/Users/iOS/”目录,然后运行:

   snakeninnysiMac:~ snakeninny$ /opt/theos/bin/ldid -Sent.xml debugserver

注意,此处的ldid来自joedj,且“-S”选项与“ent.xml”之间是没有空格的。正常情况下,上面这条命令会在5秒内执行完毕。如果ldid卡住了,执行超时,就换一种方案:下载ent.plist到“/Users/snakeninny/”,然后运行:

  snakeninnysiMac:~ snakeninny$ codesign -s - --entitlements ent.plist -f debugserver
  1. 将经过处理的debugserver拷回iOS

    snakeninnysiMac:~ snakeninny$ scp ~/debugserver root@iOSIP:/usr/bin/debugserversnakeninnysiMac:~ snakeninny$ ssh root@iOSIPFunMaker-5:~ root# chmod +x /usr/bin/debugserver

这里之所以把处理过的debugserver存放在iOS的“/usr/bin/”下,而没有覆盖“/Developer/usr/bin/”下的原版debugserver,一是因为原版debugserver是不可写的,无法覆盖;二是因为“/usr/bin/”下的命令无须输入全路径就可以执行,即在任意目录下运行“debugserver”都可启动处理过的debugserver。

二、在iOS上用debugserver来attach进程

01、攻击,调试SpringBoard

   debugserver *:1234 -a "SpringBoard"

成功后会显示:

屏幕快照 2017-08-01 18.53.03.png
屏幕快照 2017-08-01 18.53.03.png

注意:上传附件及图片大小不得大于30M。

⚠️ 版权声明:
本博客所有内容(含教程、源码、工具)仅供个人技术学习与研究交流使用,严禁商用、倒卖、二次分发及非法用途
未经作者书面授权,任何组织或个人不得转载、复制或用于其他平台,违者将追究相关责任。

0 0 0 举报
复制成功