[vm_protect在使用Xcode 11编译时失败

问题描述 投票:2回答:1

我正在使用Mach-O部分之一的运行时内存解密。为此,我使用了vm_protect,如下所示:

uint8_t *section_start = 0;
unsigned long section_size = 0;
section_start = getsectiondata(&_mh_execute_header, "__TEXT", "__mysection", &section_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;
}

当我使用Xcode 10编译Debug配置时,vm_protect成功。但是,使用Xcode 11编译的相同代码将失败。

我试图将这些权利添加到项目中:

com.apple.security.cs.disable-executable-page-protection
com.apple.security.cs.allow-jit
com.apple.security.cs.allow-unsigned-executable-memory

,没有成功。

也将签名证书更改为专门针对Xcode 11的Apple Development证书,结果相同。

在Catalina和Mojave上运行项目会得到相同的结果-如果使用Xcode 10构建,则成功,而使用Xcode 11-失败。

提前感谢。

xcode macos memory xcode11 entitlements
1个回答
0
投票

我也遇到同样的问题。如果启用了强化运行时并指定所有权利(包括上面指定的权利),那么我会遇到相同的问题。另外,如果我禁用了强化运行时。

我曾尝试编译到较早的SDK(最早可追溯到10.8),问题仍然存在(即使如果将XCode的较早版本编译到相同的SDK,该问题也不存在。

我还尝试使用链接器标志使__TEXT段可写:segprot,__ TEXT,rwx,rwx。这次而不是vmprotect失败,它因dyld错误而更早崩溃:“ __ TEXT段映射文件的开头但可写”

确定这是XCode 11的错误吗?

© www.soinside.com 2019 - 2024. All rights reserved.