IOS越狱开发 root权限获取

首先,只有在越狱的ios设备上才可以获取root权限,未越狱就不用考虑了!

思路:用具有普通权限的app引导具有root权限的app。假设你的应用程序为Demo,引导程序为Start。

具体步骤如下:

1、在Demo工程main.m文件开头添加一句:setuid(0);编译你的程序。进入Demo.app文件把Demo的执行文件改名为Demo_

2、在Start工程main.m文件开头添加一下代码:

NSString* string = [[NSBundle mainBundle]pathForResource:@"Demo_" ofType:nil];
argv[0] = (char*)[string UTF8String];
execve([string UTF8String], argv, NULL);

编译程序,进入Start.app文件夹将执行文件Start拷贝到Demo.app文件夹并且改名为Demo。

3、在桌面新建一个文件夹假设名为test,在test文件夹下再新建两个文件夹分别为:Applications、DEBIAN

4、将Demo.app包拷贝到Applications目录下,将Demo.app中得control可执行文件拷贝到DEBIAN目录下(这属于deb打包的部分,如有问题可以网上搜索解决)

我当时遇到的问题是打包的时候control出错,解决方法:打开control文件在末尾加两行空行。

5、用Terminal进入到Applications/Demo.app目录下,输入以下3条命令:

sudo chown root:admin Demo_

sudo chmod 777 Demo_

sudo chmod u+s Demo_

6、将test目录下的两个文件打包成一个deb文件、命令如下:

sudo dpkg-deb -b ~/Desktop/test ~/Desktop/Demo.deb

7、将生成的Demo.deb拷贝到iOS指定目录下:/var/root/Media/Cydia/AutoInstall。(可以用windows下得91助手,也可以用命令scp拷贝)

8、在iOS设备上用iFile安装deb包,重启iOS设备,OK!

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
iOS越狱开发中,常用的Hook检测包括以下几种: 1. 检测当前进程是否被其他进程注入 ``` void anti_injection() { char path[1024]; int ret = proc_pidpath(getpid(), path, sizeof(path)); if (ret <= 0) { NSLog(@"anti_injection: proc_pidpath failed"); exit(1); } if (strstr(path, "/Library/MobileSubstrate") != NULL) { NSLog(@"anti_injection: MobileSubstrate detected"); exit(1); } if (strstr(path, "/Library/Frameworks/CydiaSubstrate.framework") != NULL) { NSLog(@"anti_injection: CydiaSubstrate detected"); exit(1); } } ``` 2. 检测是否被调试 ``` void anti_debugging() { int name[4]; struct kinfo_proc info; size_t info_size = sizeof(info); name[0] = CTL_KERN; name[1] = KERN_PROC; name[2] = KERN_PROC_PID; name[3] = getpid(); if (sysctl(name, 4, &info, &info_size, NULL, 0) == -1) { NSLog(@"anti_debugging: sysctl failed"); exit(1); } if (info.kp_proc.p_flag & P_TRACED) { NSLog(@"anti_debugging: traced"); exit(1); } } ``` 3. 检测是否被hook ``` void anti_hooking() { const char *functionName = "ptrace"; void *handle = dlopen("/usr/lib/libc.dylib", RTLD_GLOBAL | RTLD_NOW); if (handle == NULL) { NSLog(@"anti_hooking: dlopen failed"); exit(1); } void *ptrace_func = dlsym(handle, functionName); if (ptrace_func == NULL) { NSLog(@"anti_hooking: dlsym failed"); exit(1); } if (ptrace_func != (void *)&ptrace) { NSLog(@"anti_hooking: hook detected"); exit(1); } } ``` 4. 检测是否被注入Cycript等调试工具 ``` void anti_cycript() { char *cycript = strstr(getenv("DYLD_INSERT_LIBRARIES"), "cycript"); if (cycript != NULL) { NSLog(@"anti_cycript: cycript detected"); exit(1); } } ``` 此外,还可以在代码中添加闪退检测断点,当程序发生闪退时就可以打断点进行调试,例如: ``` void crash_handler(int signal) { signal(SIGTRAP, NULL); NSLog(@"crash_handler: signal=%d", signal); exit(1); } void set_crash_handler() { signal(SIGTRAP, crash_handler); } ```

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值