查找目标 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
2
3
4
5
iPhone-5S:~ root# cycript -p QQ

*** _krncall(mach_vm_read_overwrite(task, data + offsetof(Baton, error), sizeof(baton->error), reinterpret_cast<mach_vm_address_t>(&baton->error), &error)):../Mach/Inject.cpp(293):InjectLibrary [return=0x4]
iPhone-5S:~ root# cycript -p QQ
unable to find process `QQ' using ps

看错误信息,我感觉到应该是手机上 QQ 出了问题,我重新将 QQ 切换回前台,发现这个时候 QQ 应该是被杀掉的样子,然后等 QQ 重新运行好了,再输入 cycript -p QQ 就能正确执行了。

cycript 退出命令为:

1
?exit

0x05 拷贝目标 App 的 Documents 目录

既然得到了目标 App 的 Documents 目录在手机中的绝对路径,那么我们就可以像上面拷贝目标 App 到 Mac 一样,将目标 App 的 Documents 目录也拷贝到 Mac 上,这里就不再累述了。

以上就是本文要记录的全过程了。