我正在使用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;
}
使用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开发证书,结果仍然相同。
在Catalina和Mojave上运行项目 - 如果使用Xcode 10构建,则成功;如果使用Xcode 11,则失败。
提前感谢。
vm_protect
的实现方式不同。尝试更改SDK为与Xcode 10相同的版本。 - Irad K__TEXT
段。 - Kamil.Svm_protect()
返回的错误代码是什么?另外,您尝试过更现代的函数mach_vm_protect()
吗? - Ken Thomases