@111110 wrote:
在没有能力自己写cydia hook 框架的情况下,想实现在某个函数任意地址(目标12字节+)hook,怎么办呢。
下面分享个小玩具,可以实现在函数中部hook。步骤1:
首先找到你要hook那条语句地址,比如0x493B12步骤2:
创建2个函数
其中$warp函数是构造好的函数。
realFun是hook业务函数,funRet为函数返回地址。
realFun的参数根据自己需要设置。
如果hook目标地址的有效数据不是r0-r3,比如r6, 那么可以在
“bl %0\n” 这句之前加一句"mov r0, r6\n",也可以访问栈变量"ldr r1, [sp,#0x48] \n" 偏移自己估算。然后是实际的hook业务代码。
最后用MSHookFunction hook该地址,并将返回地址保存在funRet里。
void* addr = (void*)((dyldget_image_vmaddr_slide(0) + 0x493B12)|1);
MSHookFunction((void *)addr, (void *)$wrap, (void **)& funRet);注意标志位寄存器未保存,你可以自己加上,64位代码同理。
Posts: 1
Participants: 1