MSHookFunction没有生效是什么情况?

MSHookFunction需要设备上另外安装什么插件的么?

操作步骤:
unsigned long slide=_dyld_get_image_vmaddr_slide(0);
NSLog(@"[kinglog] slide:%p",slide);
NSLog(@"[kinglog] slide ptr:%p",(slide+0x100721210));
MSHookFunction((char*)(g_slide+0x10071E2F0),(void*)my_encrypt,(void**)&ori_encrypt);
确定是有执行到这里的。但是lldb观察,hook调用后这个函数也没有发生任何变化,目标函数确定有执行,但是没有调用我替换的函数。

然后我怀疑我的代码用法有问题,或者是目标函数有啥特殊的,然后找了个人家的例子来测试
https://github.com/gltwy/sub_xxx
用了这个项目里面的app,然后用里面的hookapp例子,同样也没有hook成功。

环境是:iphone6 ios12 ,越狱工具是unc0ver

执行前后memread看一下函数开头的指令有没有变化

额。我重新跑了遍。发现是有变化的。但是并没有效果。替换的函数是更改了弹框的内容了的。但是点击方块还是弹的原来的内容


你这个输出结果正确吗

这个输出结果我断点函数对比过了的。完全一致。我现在是连人家那个例子都没法成功hook。我感觉是环境的问题

你可以跟一下MSHookFunction, ios10的时候会因为某些文件夹没有创建, 导致substrate临时文件创建失败, 新版的实现没有看过, 你可以看一下

好的。那个例子可以成功了。我看了下。是因为例子的偏移地址要重新找一下。我看看我自己的是不是有啥问题。确定MSHookFunction能成功执行

查到一点头绪了。那个github的例子是可以成功hook的
对比代码后发现
我的代码是写在.xm里面。
他的代码是写在.m里面。
我怀疑是没有找到替换的函数,所以执行失败了把。这里可以在xm里面写MSHookFunction的函数的么?
例如
下面这样。好像无法找到my_dylib_info这个函数

void** (*ori_dylib_info)(void** data);
void** my_dylib_info(void** data);
void** my_dylib_info(void** data){
    NSLog(@"[kinglog] MSHookFunction my_dylib_info");
    return NULL;
}

%ctor
{
    %init;
    NSLog(@"[kinglog] ctor init");
    NSLog(@"[kinglog] wechatIndex:%d",wechatIndex);
    unsigned long slide=_dyld_get_image_vmaddr_slide(0);
    NSLog(@"[kinglog] slide:%p",slide);
    NSLog(@"[kinglog] slide ptr:%p",(slide+0x100721210));
    MSHookFunction((char*)(g_slide+0x100721210),(void*)my_dylib_info,(void**)&ori_dylib_info);
    NSLog(@"[kinglog] slide over");
}

已解决。。瞎了
错误****
MSHookFunction((char*)(g_slide+0x100721210),(void*)my_dylib_info,(void**)&ori_dylib_info);
NSLog(@"[kinglog] slide over");

正确
MSHookFunction((void*)(g_slide+0x100721210),(void*)my_dylib_info,(void**)&ori_dylib_info);
NSLog(@"[kinglog] slide over");

第一个参数的类型的问题。改void*就没问题了。

2 个赞