运行时的IOS修补程序指令是什么?

  • 回答 (3)
  • 关注 (0)
  • 查看 (37)

如何在应用程序运行时修改单个程序集指令?

我有一个移动基板的调整,我正在为一个现有的应用程序编写。的构造函数中(MSInitialize),我需要能够在应用程序的代码中重写单独的指令。我的意思是,在应用程序的地址空间中可能有多个位置,我希望修改这些位置,但是在每种情况下,只需要修改一个指令。我已经为应用程序禁用了aslr,并且知道要修补的指令的确切内存地址,并且我有十六进制字节(作为char[]),但这是不重要的,如果有必要,可以更改新指令。我只需要弄清楚怎么做改变。

我知道IOS使用数据执行预防(DEP)来指定可执行内存页也不能写,反之亦然,但我知道在越狱设备上可以绕过这一点。我还知道iDevice使用的ARM处理器有一个指令缓存,需要更新以反映变化。然而,我甚至不知道从哪里开始这样做。

婷留婷留提问于
一夜之后的沉默闲来无事回答于

#include <stdio.h>
#include <stdbool.h>
#include <mach/mach.h>
#include <libkern/OSCacheControl.h>

#define kerncall(x) ({ \
    kern_return_t _kr = (x); \
    if(_kr != KERN_SUCCESS) \
        fprintf(stderr, "%s failed with error code: 0x%x\n", #x, _kr); \
    _kr; \
})


bool patch32(void* dst, uint32_t data) {
    mach_port_t task;
    vm_region_basic_info_data_t info;
    mach_msg_type_number_t info_count = VM_REGION_BASIC_INFO_COUNT;
    vm_region_flavor_t flavor = VM_REGION_BASIC_INFO;

    vm_address_t region = (vm_address_t)dst;
    vm_size_t region_size = 0;

    /* Get region boundaries */
    if(kerncall(vm_region(mach_task_self(), &region, &region_size, flavor, (vm_region_info_t)&info, (mach_msg_type_number_t*)&info_count, (mach_port_t*)&task))) return false;
    /* Change memory protections to rw- */
    if(kerncall(vm_protect(mach_task_self(), region, region_size, false, VM_PROT_READ | VM_PROT_WRITE | VM_PROT_COPY))) return false;

    /* Actually perform the write */
    *(uint32_t*)dst = data;

    /* Flush CPU data cache to save write to RAM */
    sys_dcache_flush(dst, sizeof(data));
    /* Invalidate instruction cache to make the CPU read patched instructions from RAM */
    sys_icache_invalidate(dst, sizeof(data));

    /* Change memory protections back to r-x */
    kerncall(vm_protect(mach_task_self(), region, region_size, false, VM_PROT_EXECUTE | VM_PROT_READ));
    return true;
}

回答过的其他问题

申请到一个签名以后,这个签名在有效期内可以给多个客户端同时使用么?

可以,但是强烈不建议由客户端直接保存签名。签名应该保存在自己的服务器上,然后使用自定义的方式对客户端的请求进行身份验证,验证通过则直接在服务器上调用 COS API。

我存储桶创建了,为什么还是说文件不存在?

用的是不是旧版 API? https://cloud.tencent.com/document/product/436/6059 服务端 SDK 错误码 -1 指定的上传文件不存在... 展开详请

云对大数据分析意味着什么?

在云中创新 长期以来,Facebook的座右铭是“ 快速行动并打破局面。”通过Facebook,我们的想法是实现尽可能多的功能并尽可能多地探索机会。如果某个功能发生故障,他们可以修复并改进它。Facebook最终放弃了打破他们的网站,但他们继续鼓励创新文化。 云使敏捷文化比以往任...... 展开详请

如何利用云计算加固服务器,防止SSH攻击?

可以修改sshd服务器的配置文件/etc/ssh/sshd_config的读写权限,对所有非root用户设置只读权限,防止非授权用户修改sshd 服务的安全设置。

5G技术将可能带动哪些领域的发展?

首次安装mariadb,关于密码的问题?

1. 我的成都地域 CentOS 7 镜像里面是没有的,可以用 rpm -qa | grep maria 检测一下。

2. 重置密码可以参考这个:https://blog.csdn.net/geoffreychan/article/details/78076966

所属标签

扫码关注云+社区