我使用的是其中一个Mach-O部分的运行时内存解密。为了做到这一点,我像这样使用vm_protect:
uint8_t *section_start = 0;
unsigned long section_size = 0;
section_start = getsectiondata(&_mh_execute_header, "__TEXT", "__mysection", §ion_size);
// change virtual memory protection
if (vm_protect(mach_task_self(), (vm_address_t)section_start, (vm_size_t)section_size, 0, VM_PROT_READ | VM_PROT_WRITE) != KERN_SUCCESS) {
os_log_error(my_logger, "Virtual memory protection changing to write error");
return false;
}当我使用Xcode10编译Debug configuration时,vm_protect成功。但是,使用Xcode11编译的相同代码会失败。
我已经尝试将这些权利添加到项目中:
com.apple.security.cs.disable-executable-page-protection
com.apple.security.cs.allow-jit
com.apple.security.cs.allow-unsigned-executable-memory,但没有成功。
还将签名证书更改为Apple Development one,这是专门针对Xcode11的,结果相同。
在Catalina和Mojave上运行该项目会得到相同的结果-如果使用Xcode 10构建,则会成功,使用Xcode 11则会失败。
提前谢谢。
发布于 2020-01-17 20:32:00
我也遇到了同样的问题。如果我启用了Hardened并指定了所有权利(包括上面指定的权利),那么我就会遇到同样的问题。另外,如果我禁用了Hardened。
我尝试编译到较早的SDK (早在10.8),但问题仍然存在(即使使用较早版本的XCode编译到相同的SDK也不存在)。
我还尝试使用以下链接器标志使__TEXT段可写: segprot、__TEXT、rwx、rwx。这一次,它没有失败,而是在较早的时候崩溃,并显示了一个dyld错误:"__TEXT段映射了文件的开头,但它是可写的“。
这肯定是XCode 11的一个bug吧?
https://stackoverflow.com/questions/59407982
复制相似问题