先说一下背景。。本人用的Hopper Disassembler v4的Demo版本,因此只能使用Modify -> Assemble Instruction功能,但是不能导出二进制文件。但是手上又有IDA Pro的绿色版。。所以只能Hopper改完之后,再通过IDA Pro导出二进制文件。
当然大能(逆向的老手)可以直接用IDA的Patch program来改,但是因为Hopper Disassembler改Mac或者iOS的程序比较简单,所以我就两边结合来改了。
首先我们先分析(IDA和Hopper都要分析啊)一下二进制文件,这里我要把[SMLicenseManager verifyLicenseWithName:code:]函数的返回值定为true,所以直接找到这个函数返回的地方:
先看Hopper:
rax寄存器是返回值寄存器,相当于被放在rax里的值最后都会被return rax;。
rax在第2行出现过一次,mov指令可以理解为赋值语句,意义是将qword [_objc_release_10014e238]的值赋予rax。
我们不用管qword [_objc_release_10014e238]是什么,我们要的结果是return true,也就是return 0x01,只需要确保在ret指令的时候rax的值是0x01即可。
因此选中mov rax, qword [_objc_release_10014e238]一行,选择Modify-Assemble Instruction,输入如下指令:
mov rax, 0x1
然后函数会变为:
此时选择直接查看二进制页面,发现二进制做了如下修改:
这里的地址要靠自己数了。。每一行的开头都是起始地址,每走一个数(45这样的算一个数)地址加1。
然后进入IDA Pro,先查看上面修改的那条指令的地址:
然后进入Hex页面,查看二进制:
对比两边哪里有修改,证明应该改哪里。因此我们直接在IDA中选择Edit-Patch Program-Change byte,然后修改成跟Hopper Disassembler一样的二进制即可:
这里要注意你的光标位置,Change byte的起始位置是根据你的光标位置来的,所以光标位置一定要正确
然后查看IDA View,修改成功:
总结一下:建议大家有钱还是直接买正版Hopper Disassembler,$99(涨价了,以前是$89,不知道以后还会不会涨),比IDA便宜了太多。。也免得两边切换。