-
-
[原创]使用Xcode制作一个root类型的App
-
发表于: 2019-12-24 14:58 2133
-
注意事项
- 测试环境
- macOS: 10.14.6
- iPhoneOS: iOS11.0、iOS12.0、
- iPhone机型:两个iPhone6
- 越狱工具:unc0ver3.6.2
- 没有测试:iOS13和iOS10,也许可以。
- 关于链接
- 阅读本文前,请首先阅读 RunAppAsRootForTheos理论部分
- 此文使用Xcode新建的App,如果使用Theos新建的App,请转入RunAppAsRootForTheos
- 实现目标:制作一个root类型的App,App里面点击按钮执行
killall -9 SpringBoard
,注销SpringBoard
App代码
- 本案例中使用Xcode新建的项目名称叫RootApp
- 在Xcode中找到main.m,添加
setuid(0)
,设置uid12345678#import <UIKit/UIKit.h>
#import "AppDelegate.h"
int
main(
int
argc, char
*
argv[]) {
@autoreleasepool
{
setuid(
0
);
return
UIApplicationMain(argc, argv, nil, NSStringFromClass([ AppDelegate
class
]));
}
}
点击动作相关的代码如下
1234567891011121314#import <spawn.h>
int
spawn(const char
*
executable, ...) {
int
ret;
pid_t pid;
va_list args;
va_start(args, executable);
ret
=
posix_spawn(&pid, executable, NULL, NULL, (char
*
const
*
)args, NULL);
if
(ret
=
=
0
) waitpid(pid, NULL,
0
);
return
ret;
}
-
(IBAction)stop:(
id
)sender {
NSLog(@
"RootAppTest: %d, %d, %d"
, getuid(), geteuid(), spawn(
"/usr/bin/killall"
,
"/usr/bin/killall"
,
"-9"
,
"SpringBoard"
, NULL));
}
- 代码写完后,进行编译,编译完成后把RootApp.app放入iPhone上的/Applications里面
运行App
- SSH登录iPhone,执行以下命令,要不然看不到App图标1
~ root
# uicache
- 更改二进制文件权限,要不然App不能启动1
~ root
# chmod 755 /Applications/RootApp.app/RootApp
- 至此App可以成功打开
设置euid
- 点击按钮并不会注销SpringBoard,打印uid和euid都为501而不是01
RootAppTest:
501
,
501
,
1
- 为RootApp文件设置euid1
~ root
# chmod u+s /Applications/RootApp.app/RootApp
- 执行
killall -9 SpringBoard
,然后重新打开App,点击按钮,这个时候打印出来uid和euid为0 - 虽然uid和euid为0但是不能注销SpringBoard,因为需要
可执行文件签权
可执行文件签权
- 新建RootApp.entitlements文件,内容为123456789101112
<?xml version
=
"1.0"
encoding
=
"UTF-8"
?>
<!DOCTYPE plist PUBLIC
"-//Apple//DTD PLIST 1.0//EN"
"http://www.apple.com/DTDs /PropertyList-1.0.dtd"
>
<plist version
=
"1.0"
>
<
dict
>
<key>com.apple.private.security.no
-
container<
/
key>
<true
/
>
<key>com.apple.private.skip
-
library
-
validation<
/
key>
<true
/
>
<key>platform
-
application<
/
key>
<true
/
>
<
/
dict
>
<
/
plist>
- 通过iFunBox上传到iPhone,然后签权1
ldid
-
S
/
RootApp.entitlements
/
Applications
/
RootApp.app
/
RootApp
- 执行
killall -9 SpringBoard
,重新打开App,点击按钮会注销SpringBoard - 至此大功告成
[注意]传递专业知识、拓宽行业人脉——看雪讲师团队等你加入!
最后于 2020-10-20 12:21
被slfh编辑
,原因:
赞赏
看原图
赞赏
雪币:
留言: