我终于越狱了我的第一台设备,我想尝试以root身份运行以Xcode内置的应用程序。
我做的第一件事就是尝试在setuid(0)
上运行main.c
,但失败了。
也尝试运行以下解决方案:[Gaining root permissions on iOS for NSFileManager (Jailbreak)
问题是,我只能通过Xcode安装该应用程序后才能手动执行此操作。另外,由于启动时崩溃,我什至无法手动运行该应用程序。
任何人都知道如何从这里前进吗?
[iOS版本:11.4.1
Unc0ver版本:3.3.0
谢谢你!
Unc0ver越狱会导出必要的偏移量,以使自己成为tfp0
(task_for_pid(0)
)或内核任务端口。然后,您可以使用这些证书在内核内存中修补自己的凭据。让我举一个例子。
Unc0ver越狱将包含kernel task port
的偏移量存储在以下路径的文件中:/var/offsets.plist
。越狱之前,请确保在Unc0ver设置中切换“导出TFP0”。
一旦越狱,就分析偏移文件,每个文件都在自己的变量中。对于tfp0
变量,需要将其设置为task_port_t
类型。 kernel_slide
和kernel_base
是默认的uint64_t
。
[从plist
解析它们后,您需要执行以下操作来从tfp0
为您设置的HSP4 (Host Special Port #4)
中获取有效的Unc0ver
,以便您可以获取tfp0
并提升自己的特权。
这里有一些示例代码:
task_port_t tfp0 = null;
kern_return_t ret = host_get_special_port(mach_host_self(), HOST_LOCAL_NODE, 4, &tfp0);
printf("Task FOR PID: 0x%x\n", tfp0);
这基本上将为您提供真正的内核任务端口。此时,您可以遵循GeoSn0w的指南,了解如何将自己的特权提升为root
,以及如何转义sandbox
。该指南和补丁可在其Jailbreak Development forum上找到,但为防万一,我将在此处添加它们。
要获得root特权,根据GeoSn0w:
uint64_t selfProc = findOurselves();
uint64_t creds = kernel_read64(selfProc + off_p_ucred);
// GID
kernel_write32(selfProc + off_p_gid, 0);
kernel_write32(selfProc + off_p_rgid, 0);
kernel_write32(creds + off_ucred_cr_rgid, 0);
kernel_write32(creds + off_ucred_cr_svgid, 0);
printf("[i] STILL HERE!!!!\n");
// UID
creds = kernel_read64(selfProc + off_p_ucred);
kernel_write32(selfProc + off_p_uid, 0);
kernel_write32(selfProc + off_p_ruid, 0);
kernel_write32(creds + off_ucred_cr_uid, 0);
kernel_write32(creds + off_ucred_cr_ruid, 0);
kernel_write32(creds + off_ucred_cr_svuid, 0);
printf("[i] Set UID = 0\n");
kernel_write32
,kernel_write64
,kernel_read32
和kernel_read64
通常是在Google Project Zero
漏洞利用程序中发现的基元。您将需要将它们导入到程序中,以便可以调用它们。 They can be found on GitHub,但它们只是系统功能(例如mach_vm_read_overwrite(...)
和mach_vm_write(...)
)的包装。
就这些。到那时,您应该已经将特权升级为root。当然,您需要重新实现许多越狱功能,例如上述内核读取和写入原语,您需要Unc0ver偏移量,并且还需要用于off_ucred_cr_ruid
,off_p_gid
之类的偏移量表等从iOS版本更改为iOS版本。
进行调整并由Cydia
安装它会更容易。 Cydia Substrate
会帮您rootify
。