当应用程序运行时,如何修改单个汇编指令?
我正在为现有应用程序编写一个Mobile Substrate(移动端代码注入框架)插件。在插件的构造函数(MSInitialize
)中,我需要能够重写应用程序代码中的单个指令。我的意思是,可能有多个位置在应用程序地址空间中需要被修改,但在每个实例中,只需修改单个指令。我已经为该应用程序禁用了ASLR,并且知道要修补的指令的精确内存地址,并且我有新指令的十六进制字节(作为char[],但这不重要,如果必要可以更改)。我只需要找出如何执行更改。
我知道iOS使用数据执行预防(DEP)来确定可执行内存页不能同时也是可写的,反之亦然,但我知道在越狱设备上是可能绕过此机制的。我还知道iDevices使用的ARM处理器具有指令缓存,需要更新以反映更改。但是,我甚至不知道从哪里开始做。
因此,回答那肯定会被问到的问题,我什么都没尝试过。这不是因为我懒惰,而是因为我完全不知道如何完成此操作。任何帮助都将不胜感激。
编辑:
如果可能的话,我的最终目标是在Mobile Substrate插件中钩住App Store应用程序。以前,为了修改该应用程序,必须先破解它以解密应用程序二进制文件,以便可以对其进行打补丁。我想让人们不必破解该应用程序,因为这可能会导致盗版,而我强烈反对盗版。我无法正常使用Mobile Substrate,因为所有工作都是在C++中完成,而不是Objective-C,并且应用程序已被剥离,没有符号可用于MSHookFunction
。
vm_write()
来写入进程的内存。 - user529758