越狱Hooker开发注意事项
首先iphone上安装mobilesubstrate库版本
参考示例代码,编写hook工程,编程成dylib形式部署到/Library/MobileSubstrate/DynamicLibraries下,并重启SpringBoard(killall SpringBoard)
主体代码如下:
// 声明原接口
static IMP original_GexinDaemonHookPoint_showRegDialog_;
// 声明替换后的新接口
static void* replaced_GexinDaemonHookPoint_showRegDialog_(SMSApplication* self, SEL _cmd, NSString* msg);
// 实现替换后的新接口
static void* replaced_GexinDaemonHookPoint_showRegDialog_(SMSApplication* self, SEL _cmd, NSString* msg)
{
return (void*)(int)YES;
}
// 声明hook,传入需要hook的类名,方法,替换后的接口以及原接口
MSHookMessageEx(objc_getMetaClass("GexinDaemonHookPoint"), @selector(showRegDialog:), (IMP)replaced_GexinDaemonHookPoint_showRegDialog_, (IMP *)&original_GexinDaemonHookPoint_showRegDialog_);
几点注意事项:
1. MSHookMessageEx对于类函数,即带+的函数,需要使用objc_getMetaClass指定类名,第二个参数,◎selector(xxx:) 注意不要忘了:
2. 返回值的处理:replaced_xxx函数的返回值不支持BOOL,int等基础类型,如果需要hook的接口返回值是基础类型,需要转换成void*类型来做,即将replaced_xxx定义为void*返回类型,然后在函数实现里将返回值强制转换为void*类型,如此来骗过编译器。
3. 通过编写与xxx.dylib同名的xxx.plist文件,添加filter,可以限制只对某些应用加载hook。plist格式如下:
Filter = {
Bundles = (com.apple.springboard,com.apple.MobileSMS);
};

浙公网安备 33010602011771号