越狱环境下查找App沙盒目录

  在iOS开发中,能够随意更改app在真机上的文件可方便我们调试app,但自从iOS9以后app目录也越来越不好获取了。当然首先你得需要一个越狱手机,关于手机如何越狱,以下列出最近几个版本的越狱方法:

iOS9.0-iOS9.1盘古官网

iOS9.2-iOS9.3.3盘古官网会跳转到pp助手,使用win版pp助手点击一键越狱即可

iOS10.0.0-iOS10.2此为越狱源码,开发者可自行下载编译,安装到手机上,然后根据提示来进行越狱

  app沙盒目录结构图

image

  下面来展示几种获取app沙盒目录的方法:

1、源码方式获取

  这种方式适合有源码调试的app。

NSArray* paths = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES);
NSString* cPath = [paths objectAtIndex:0];

  cPath即为该app沙盒下的Document文件夹,更改NSSearchPathForDirectoriesInDomains的第一个参数,相应的可以打印出其他文件夹。但是这种方式虽然简单,但是必须要有源码,有很大的限制,接下来介绍的两种方法就没有这种限制了。

2、辅助手机管理软件

  这里推荐iMazing或者iTools Pro,需要在越狱环境下的cydia中安装House Arrest Fix,即可找到app的沙盒目录。

House Arrest Fix

image

iMazing

image

iTools Pro

image

3、利用越狱插件来获取

  上述的几种方案在高版本的iOS系统中都只能获取Documents、Library和Temp目录,而不能获取.app目录,而利用越狱插件则可以获取.app目录。

  首先我们需要一些准备工作。

  • 打开ssh通道:以iOS10.2安装yalu102 B7版本为例,B7版本自带ssh,其他系统版本越狱系统请参考其他教程安装ssh。在cydia安装filza,打开目录var/containers/Bundle/Application其中就可以看到用户安装的程序.app目录了。然后在yalu102.app目录中,往下滑找到dropbear.plist 用属性表编辑器打开。其中的ProgramArguments项展开,把ltem4中的内容修改成22。然后重启手机就可以使用wifi远程登录手机了。另外也可以通过usb去登录手机,参考使用ssh 访问越狱iPhone的两种方式

image image

  注:此时通过filza其实已经可以看到.app目录了,另外也可以打开 var/mobile/Containers/Data/Application,这个目录下就是各个app的Documents、Library和Temp目录。以下的方法利用终端打印出沙盒目录地址。

  • 安装Cycript插件

image

  • 开始查找沙盒目录,以StoreApp为例。:首先在iOS中关掉所有StoreApp,然后打开Target,保持电脑和手机在同一网段,接着ssh到 iOS上,打印出所有进程,如下:
snakeninnysiMac:~ snakeninny$ ssh root@iOSIP FunMaker-5:~ root# ps -e

PID TTY TIME CMD

1 ?? 3:28.32 /sbin/launchd ……

5717 ?? 0:00.21 /System/Library/PrivateFrameworks/MediaServices.framework/Support/m

5905 ?? 0:00.20 sshd: root@ttys000 5909 ?? 0:01.86 /var/mobile/Containers/Bundle/Application/03B61840-23494559-B28E-0E2C6541F879/TargetApp.app/TargetApp 5911 ?? 0:00.07 /System/Library/Frameworks/UIKit.framework/Support/pasteboardd

5907 ttys000 5913 ttys000

0:00.03 -sh 0:00.01 ps –e

  因为iOS上只打开了一个StoreApp所以唯一的那个含“/var/mobile/Containers/Bundle/Application/”字样的 结果就是TargetApp可执行文件的全路径,也就是.app文件的路径。   用Cycript找出TargetApp的Documents目录路径。StoreApp的Documents目录位 于/var/mobile/Containers/Data/Application/YYYYYYYYYYYY-YYYY-YYYY–YYYYYYYYYYYY/下,Y与 之前的X值不同,而且这次PS也帮不上忙了。因此, 需要借助强大的Cycript,让App告诉我们Documents的路径。命令如下:

FunMaker-5:~ root# cycript -p TargetApp cy# [[NSFileManager defaultManager] URLsForDirectory:NSDocumentDirectory inDomains:NSUserDomainMask][0] 
#"file:///var/mobile/Containers/Data/Application/D41C434363AA-4BFF-904B-2146128611EE/Documents/"

  这样就找出了Documents路径,而Library和Temp和Documents在同一目录下,这样所有的沙盒路径全部找到。

参考书籍:iOS应用逆向工程

最近的文章

WebView与JS交互(转)

iOS中调用HTML1、加载网页 NSURL *url = [[NSBundle mainBundle] URLForResource:@"index" withExtension:@"html"]; NSURLRequest *request = [NSURLRequest requestWithURL:url]; [self.webView loadRequest:request];2、删除 NSString *str1 = @"var word ...…

继续阅读
更早的文章

UIButton的Category

  曾在网上看到过一个这样的文章iOS防止UIButton重复点击的三种实现方式,其中利用runtime来解决问题的思路很高端,但是使用过程中会碰到unrecognized selector sent to instance的问题。下面来解释产生这个问题的原因。  源代码:UIButton+TdxNoRepeatButton.h#import <UIKit/UIKit.h>@interface UIButton (TdxNoRepeatButton)@property (non...…

继续阅读