首页
社区
课程
招聘
[原创]使用Xcode制作一个root类型的App
发表于: 2019-12-24 14:58 2133

[原创]使用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,也许可以。
  • 关于链接
  • 实现目标:制作一个root类型的App,App里面点击按钮执行killall -9 SpringBoard,注销SpringBoard

App代码

  • 本案例中使用Xcode新建的项目名称叫RootApp
  • 在Xcode中找到main.m,添加setuid(0),设置uid
    1
    2
    3
    4
    5
    6
    7
    8
    #import <UIKit/UIKit.h>
    #import "AppDelegate.h"
    int main(int argc, char * argv[]) {
        @autoreleasepool {
            setuid(0);
            return UIApplicationMain(argc, argv, nil, NSStringFromClass([  AppDelegate class]));
        }
    }
  • 点击动作相关的代码如下

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    #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而不是0
    1
    RootAppTest: 501, 501, 1
  • 为RootApp文件设置euid
    1
    ~ root# chmod u+s /Applications/RootApp.app/RootApp
  • 执行killall -9 SpringBoard,然后重新打开App,点击按钮,这个时候打印出来uid和euid为0
  • 虽然uid和euid为0但是不能注销SpringBoard,因为需要可执行文件签权

可执行文件签权

  • 新建RootApp.entitlements文件,内容为
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    <?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编辑 ,原因:
收藏
免费 0
支持
分享
最新回复 (0)
游客
登录 | 注册 方可回帖
返回
//