使用这个方法,可以从sandbox的app中获取权限,前提是越狱。
以下步骤在沙箱的app中实现
1、删除/var/mobile/Library/Preferences/com.apple.locationd.plist
2、软连接步骤1的文件到需要权限的目录,比如/Library/MobileSubstrate/DynamicLibraries
3、执行CoreLocation.framework中的一个函数,将locationd重启
4、睡眠一下,等待locationd重启完成
这个时候,步骤2中的目标文件夹已经是mobile mobile权限,与沙箱权限相同。
然后我可以把DL设置成777,然后做个locationd的钩子放过去,再重启一次locationd。这时钩子生效,且有着locationd的root级别权限,可以做任何你爱做的事。
这个方法可以从一个越狱的ipa中安装deb,是目前比较流行的一个应用。
步骤3里的这个函数留给大家去挖掘。
第2步的软连接,是指在
/Library/MobileSubstrate/DynamicLibraries
下用
[NSFileManager createSymbolicLinkAtPath:withDestinationPath:error:]
等函数创建一个到
/var/mobile/Library/Preferences/com.apple.locationd.plist
的符号链接吗?因为第1步已经把这个文件删掉了,怎么还能创建它的符号链接呢?
我刚粗略看了一下,步骤3里提到的函数应该是
+[CLLocationManager shutdownDaemon]
或者
void CLClientShutdownDaemon(void)
吧~我是这么测试的:
FunMaker-5:~ root# ps -e | grep locationd
1835 ?? 0:03.39 /usr/libexec/locationd
1854 ttys000 0:00.01 grep locationd
FunMaker-5:~ root# cycript -p MicroMessenger
cy# [CLLocationManager shutdownDaemon]
1
cy#
FunMaker-5:~ root# ps -e | grep locationd
1865 ?? 0:01.94 /usr/libexec/locationd
1868 ttys000 0:00.01 grep locationd
我又看了好几遍,理解起来是不是这样的:
把
/Library/MobileSubstrate/DynamicLibraries
的权限降低,然后用沙盒内的App向这个目录写入一个dylib,钩住locationd,从而拿到root权限;接下来需要root权限的操作其实都在这个dylib中完成,原App的权限实际上是不变的。是这样吗?
ipa通过什么方法可以删除/var/mobile/Library/Preferences/com.apple.locationd.plist文件
jimmy54
(jimmy54)
6
其它倒时成功了。就是沙盒内的App向这个目录写入一个dylib…失败。说权限问题
11147
(恒星雨)
8
用ln -s测试, 可以对一个不存在的文件进行连接
xxzzddxzd
(xxzzddxzd)
10
由于刚变为mobile mobile时的权限为755,所以要先提升权限才可以写入文件
jimmy54
(jimmy54)
11
他说的这个方法貌似不行吧。。。
[NSFileManager createSymbolicLinkAtPath:withDestinationPath:error:]
xxzzddxzd
(xxzzddxzd)
12
如果有时间可以研究一下腾讯手机管家安装ipa里的执行文件,包括了整个流程。
当然他们对所有的关键字、函数方法、文件名和路径等做了加密,解密方法很弱,可以尝试一下:titter:
11147
(恒星雨)
13
总算试出来了
-
沙盒代码删除/var/mobile/Library/Preferences/com.apple.locationd.plist (iOS8以后貌似不行了,用了个8的设备没有成功)
-
这步LZ说的让人比较容易误解, 操作是这样的, 例如我们要修改/Library/MobileSubstrate/DynamicLibraries这个文件夹的owner, 就在/var/mobile/Library/Preferences/路径下创建一个名为com.apple.locationd.plist的Symbol文件指向/Library/MobileSubstrate/DynamicLibraries
lrwxr-xr-x 1 mobile staff 57 Mar 18 22:53 com.apple.locationd.plist → /var/mobile/Library/Preferences/com.apple.locationd.plist
就这一步的手误:
应该是:
lrwxr-xr-x 1 mobile staff 57 Mar 18 22:53 com.apple.locationd.plist → /Library/MobileSubstrate/DynamicLibraries
3.重启守护进程
4.检验/Library/MobileSubstrate/DynamicLibraries 从 mobile staff 变成了 mobile mobile了!
11147
(恒星雨)
14
可以的, iOS7下尝试没问题
NSString * plistPath = @"/var/mobile/Library/Preferences/com.apple.locationd.plist";
NSString * path2 = @"/Library/MobileSubstrate/DynamicLibraries";
NSError * error = nil;
[NSFileManager defaultManager] createSymbolicLinkAtPath:plistPath withDestinationPath:path2 error:&error];
if (error != nil) {
NSLog(@"error2 : %@", error);
}
11147
(恒星雨)
18
iOS8.1的mini没有成功, 请问下LZ用的8的哪个版本呢?