【发布时间】:2012-11-15 22:05:20
【问题描述】:
如何在应用程序运行时修改单个汇编指令?
我正在为现有应用程序编写一个 Mobile Substrate 调整。在调整的构造函数 (MSInitialize) 中,我需要能够重写应用程序代码中的各个指令。我的意思是,我希望修改应用程序地址空间中的多个位置,但在每个实例中,只需要修改一条指令。我已经为应用程序禁用了 ASLR,并且知道要修补的指令的确切内存地址,并且我有新指令的十六进制字节(作为 char[],但这并不重要,可以根据需要进行更改)。我只需要弄清楚如何执行更改。
我知道 iOS 使用数据执行保护 (DEP) 来指定可执行内存页也不能是可写的,反之亦然,但我知道可以在越狱设备上绕过这一点。我还知道 iDevices 使用的 ARM 处理器有一个指令缓存,需要更新以反映更改。但是,我什至不知道从哪里开始。
所以,为了回答肯定会被问到的问题,我没有尝试过任何事情。这不是因为我懒惰;相反,这是因为我完全不知道如何做到这一点。任何帮助都将不胜感激。
编辑:
如果它有帮助的话,我的最终目标是在 Mobile Substrate 调整中使用它来挂钩 App Store 应用程序。以前,为了修改这个应用程序,必须先破解它来解密应用程序,这样才能修补二进制文件。我想让人们不必破解该应用程序,因为这会导致盗版,我强烈反对。我无法正常使用 Mobile Substrate,因为所有工作都是用 C++ 而非 Objective-C 完成的,并且应用程序被剥离,没有留下任何符号可以使用 MSHookFunction on。
【问题讨论】:
-
为什么这个问题被否决了?我没有清楚地解释我的问题吗?还是只是因为我提到了可怕的J字(越狱)?
-
我不知道,这是个好问题,+1。
-
我找到了this question and answer - 他们建议使用
vm_write()来写入进程的内存。 -
@H2CO3 这种方法对我不起作用。我认为他们正在讨论写入其数据内存,而不是可执行内存。我加了一个赏金。
-
顺便说一句,如果可执行文件被剥离,你想如何找出修改什么/在哪里?
标签: ios c assembly jailbreak cydia-substrate