iOS逆向----使用IDA的Patch更改汇编或二进制代码( patch svc #0x80 with nop)

时间:2024-03-24 08:11:25

最近在研究iOS逆向中的绕过反调试,发现很多文章中频繁出现诸如“攻击者可以使用nop来移除掉命令svc #0x80”,“无脑静态nop SVC 0X80”,“可以通过 patch svc #0x80 with nop 轻松绕过”这种话,对于其中所谓的Patch一直不是很理解,可能对于大神们来说这些方法过于简单,所以直接没写如何操作。。

经过一段时间的研究,最后终于发现,原来大神们口中的Patch可以用IDA来实现。。
本次测试我自己打了个包,这个包用的是内联 svc + syscall + ptrace 实现反调试的,很简单的代码。可以看一下我上一篇讲反调试的文章

拿到打好之后的ipa包,把ipa改成zip解压缩得到Payload文件夹,从Payload文件夹中右键test.app,选择显示包内容,把其中的可执行文件Test抠出来,然后用IDA分析。。

IDA Pro中的Patch program

补图补图:
iOS逆向----使用IDA的Patch更改汇编或二进制代码( patch svc #0x80 with nop)

就是这个东西,
change byte … 就是直接修改二进制数值
change word… 就是直接改地址
Assemble 没法用: 一点就提示Sorry, this processor module doesn’t support the assembler。。不过直接通过二进制也能改,就不纠结这个东西了。
Apply patches to input file: 使我们修改写回原文件…

我们现在要做的就是在汇编中寻找x80,然后改掉他。
iOS逆向----使用IDA的Patch更改汇编或二进制代码( patch svc #0x80 with nop)

全局搜x80,然后发现有一处SVC 0x80,双击点进去看看:
iOS逆向----使用IDA的Patch更改汇编或二进制代码( patch svc #0x80 with nop)

然后让光标停留在SVC的位置,点击Edit-Patch Program-Change byte,弹出修改界面:
iOS逆向----使用IDA的Patch更改汇编或二进制代码( patch svc #0x80 with nop)

前四位就是指令的16进制编码,SVC是01 10 00 D4,而NOP的编码是1F 20 03 D5。想问我怎么知道的?自己找个NOP指令点击Edit-Patch Program-Change byte看一下就行了。。反正NOP指令会有很多。所以我们把SVC的编码改成NOP的编码,点击OK,然后你会发现原来SVC的位置变成了NOP(看一下上面的图片,对着地址比较一下):
iOS逆向----使用IDA的Patch更改汇编或二进制代码( patch svc #0x80 with nop)

然后就可以保存二进制文件了。。此时点击Edit-Patch Program-Apply patches to input file,直接点OK即可。然后关掉IDA,把改好的二进制文件再放回Test.app中,选中Payload文件,压缩,把zip改成ipa,这样就完成了重打包。。

然后再用IPAPatch调试ipa包,发现已经绕过了SVC防调试。