越狱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);
};

posted @ 2012-03-13 15:17  卢龙  阅读(295)  评论(0)    收藏  举报