您的位置:首页 > 移动开发

在非越狱设备上使用 LLDB 调试第三方 App

2015-03-17 14:06 295 查看

说明

这个方法是在 iOS 8 刚发布的时候想到的,当时主要用来在非越狱的 iOS 8 设备上调试分析第三方已经支持 iOS 8 的 App,比如:UC 浏览器,下面也会使用 UCWEB 为例来说明一些命令。

为什么要进行这种调试

同一个功能在不同的系统版本上会有不同的实现方式,以现在的情况为例:目前 iOS 8.2 还没有越狱,假如想分析第三方程序在 iOS 8.2 上的实现方式。
有些功能可能是针对某些系统版本的。

原理

谈不上原理,主要就是利用 xcode 的工具链,当然如果对证书、签名、Entitlements 比较熟悉,可能会很自然的想到这个方法。当时想到方法后,就在 github 上搜索了一下发现已经有人写了相关的工具,下面跟大家说下具体如何操作。

工具

ios-deploy:https://github.com/phonegap/ios-deploy

环境

1、OS X Yosemite - 10.10.2
2、xcode - 6.1.1

步骤

1、配置 xcode 的命令行环境,如下图:



说明:xcode 支持的 iOS 系统版本号需要大于等于设备,否则会无法挂载调试工具。

2、签出工具:git clone https://github.com/phonegap/ios-deploy

3、编译工具,shell 进入到 ios-deploy 目录,直接 make 即可:




编译成功后,可以将 ios-deploy 拷贝到 /usr/local/bin 中,便于全局使用。

4、在越狱设备上解密第三方 App,可以手工操作,也可以使用 Clutch 等。
这步比较重要,不解密会报错,具体原因没有去追究。在开发调试时向设备上安装的应用也是没有加密的。

5、权限 Entitlements

<?xml version="1.0"?>
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
<plist version="1.0">
	<dict>
		<key>get-task-allow</key>
		<true/>
	</dict>
</plist>


将如上内容保存为:Entitlements.plist,后面签名时需要。

6、准备 mobileprovision 文件,可以 iOS Dev Center 中下载,mobileprovision 文件中需要包含目标设备,这个做 iOS 开发的应该都知道。检查方法是:可以使用 emacs 打开 mobileprovision 文件,然后查看设备的 udid 是否在文件中。
将下载到 mobileprovision 重命名为 embedded.mobileprovision,将重命名后的文件拷贝到 UCWEB.app 中:



7、运行如下命令重新签名


codesign -f -s "iPhone Developer: 你的证书名字" --entitlements Entitlements.plist UCWEB.app


8、运行如下命令开始调试,调试前请解锁屏幕:


ios-deploy -v -d -n -i “设别 UDID" -b UCWEB.app


说明:安装应用的过程比较长。
如果成功,状态如下图:




9、设置断点,运行程序:



10、其他的跟正常的 lldb 远程调试没有什么区别,enjoy。

[b]补充-2015-03-31:[/b]
对于 iOS 8.2 签名时需要增加 Key: application-identifier,且如果第三方应用包含 App Extension,也需要对扩展进行重签名。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: