IOS逆向--调试别人项目之准备debugserver

debugserver是运行在ios上,作为服务端,实际上执行LLDB(作为客户端)传过来的没命令,再把执行结果反馈给LLDB,显示给用户,即所谓的”远程调试”。在默认情况下,ios上并没有安装debugserver。需要设备连接Xcode,在window-->Devices菜单中增加此设备后,debugserver才会被Xcode安装到IOS设备的/Developer/usr/bin/目录下。注意:由于缺少task_for_pid权限,通过Xcode安装的debugserver只能调试自己的APP。为了逆向,我们需要对debugserver进行相关配置,使我们可以调试别人的APP

配置

在配置前,我们需要看一下各设备对应的ARM的类型

Name ARM
iPhone 4s armv7
iPhone 5 armv7s
iPhone 5c armv7s
iPhone 5s arm64
iPhone 6 plus arm64
iPhone 6 arm64
iPad 2 armv7
iPad mini armv7
The New iPad armv7
iPad with Retina display armv7s
iPad Air arm64
iPad Air 2 arm64
iPad mini with Retina display arm64
iPad mini 3 arm64
iPad touch 5 armv7

将未经处理的debugserver从IOS拷贝到OSX中/Users/snkeninny目录下。

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

然后帮它瘦身,命令如下:

 ~ snkeninny$  lipo -thin armv7s ~/debugserver -output ~/debugserver

注意:这里的armv7s换成你设备对用的ARM

 给debugserver增加task_id_pid权限

  • 方案一

下载ent.xml到OSX的/Users/snkeninny/目录,然后运行如下命令:

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

注意:"-S"选项与"ent.xml"之间没有空格。

  • 方案二

下载ent.plist 到/Users/snakeninny/,然后运行如下命令:

~ snakeninny$  codesign -s - --entitlements  ent.plist -f debugserver

将处理过的debugserver拷贝回ios

将经过处理的debugserver 拷贝回ios,并增加执行权限,命令如下:

~ snakeninny$  scp ~/debugserver  root@iOSIP:/usr/bin/debugserver
~ snakeninny$  ssh root@iOSIP
~ root# chmod +x /usr/bin/debugserver

这里之所以把处理过得debugserver存放到ios版的/usr/bin/下而没有覆盖/Developer/usr/bin/下的原版debugserver,一是因为原版debugserver是不可写的,无法覆盖,二是因为在/usr/bin/下无需输入全路径就可以执行。


用debugserver启动或附加进程

debugserver最常见的2中场景,就是启动和附加进程,它的命令都很简单,分别为:

debugserver -x backboard IP:port /path/to/executable

debugserver会启动executable,并开启port端口,等待来自IP的LLDB接入。

debugserver IP:port -a "ProcessName"

debugserver会附加ProcessName,并开启port端口,等待来自IP的LLDB接入。

例如:

debugserver -x backboard *:1234  /Applications/MobileSMS.app/MobileSMS

上面的命令行会启动mobileSMS,并开启1234端口,等待任意IP地址的LLDB接入。

你可能感兴趣的:(逆向和越狱开发)