查找目标 App 在 iPhone 里的目录
0x00 前言
本文记录了我在学习 iOS 逆向工程的过程中学到的相关知识中的定位目标 App 的一些目录在 iPhone 中的路径,我看的书是 iOS应用逆向工程(第2版),有兴趣的同学可以购买学习。
0x01 准备工作
准备工作就不扯那么多了,要学习 iOS 逆向工程,最基本的是需要有一台已经越狱的 iPhone,而且已经安装了 OpenSSH 和 Cycript,刚越狱的 iPhone 的 SSH 密码默认是 alpine.
(带英文标点),为了安全,最好修改成其他的,然后最好是还有一台 Mac。
0x02 定位目标 App 的安装目录
首先,我们先找到目标 App 的安装目标,AppStore 上下载的 App 一般都是安装在 /var/mobile/Containers/Bundle/Application/
下的,书中提到的这个小技巧,非常方便,简单粗暴,先关掉所有从 AppStore 上安装的 App,就只运行目标 App,然后用 Mac 通过 SSH 连接 iPhone,使用命令打印出所有的进程:
可以看到有非常多的进程,找起来好麻烦,这里有一个更方便查看的命令,那就是使用 grep
,因为我们知道了 App 所在目录的路径前缀,所以直接用 grep
来 “筛选” 出来,命令如下:
可以看到,只有一个结果,这个就是我们目标 App (这里是以 QQ 为例) 在我们的 iPhone 中所在的安装目录的绝对路径了。
0x03 拷贝目标 App
既然找到了,那我们就可以将它拷贝到我们的 Mac 上了,方法有多种,你可以选择是用类似 iFunBox 这样的工具,或者直接使用命令行 (scp) 的方式,这里以命令行的方式来进行拷贝,我在 Mac 上重新打开了一个终端,然后输入以下的命令来进行拷贝:
Ps. 其实我这里已经完成了拷贝,只是命令被刷屏不见了,所以这里再把命令弄出来可以看到。
在 Finder 中打开拷贝的目标目录,可以看到目标 App 已经被拷贝出来了:
0x04 定位目标 App 的 Documents 目录
我们使用 Cycript 来找到目标 App 的 Documents 目录,非常简单,三步就能找到,首先要先知道目标 App 的 CFBundleExecutable:
可以看到 QQ 的 CFBundleExecutable 就是 “QQ”,根据我拷贝出来的几个 App,基本上可以估计,App 的 CFBundleExecutable 都是跟 目标 App.app
的名字一样的,不过为了确定性,使用上面的命令来确定真正的 CFBundleExecutable 也不麻烦。
确定了目标 App 的 CFBundleExecutable,那么就可以开始定位 Documents 目录了,输入下面的命令:
1 | [[NSFileManager defaultManager] URLsForDirectory:NSDocumentDirectory inDomains:NSUserDomainMask][0] |
这里说一下我在这个过程中遇到的问题以及怎么解决的,从上面这些图中可以看到,有时候我输入了命令,没有正确执行,比如:
1 | ssh: connect to host 192.168.36.75 port 22: Host is down |
这个问题的话,只要将手机解锁一下就 OK 了,反正我是这么解决的。
输入 cycript -p QQ
的时候,报了这个错误:
1 | iPhone-5S:~ root# cycript -p QQ |
看错误信息,我感觉到应该是手机上 QQ 出了问题,我重新将 QQ 切换回前台,发现这个时候 QQ 应该是被杀掉的样子,然后等 QQ 重新运行好了,再输入 cycript -p QQ
就能正确执行了。
cycript 退出命令为:
1 | ?exit |
0x05 拷贝目标 App 的 Documents 目录
既然得到了目标 App 的 Documents 目录在手机中的绝对路径,那么我们就可以像上面拷贝目标 App 到 Mac 一样,将目标 App 的 Documents 目录也拷贝到 Mac 上,这里就不再累述了。
以上就是本文要记录的全过程了。