| 
注册时间2015-8-26
阅读权限10
最后登录1970-1-1UID98164 周游历练 
 
 TA的每日心情|  | 奋斗 2015-8-27 16:14
 | 
|---|
 签到天数: 1 天 [LV.1]初来乍到 | 
 
 发表于 2015-8-27 15:52:07
|
显示全部楼层 
| 本帖最后由 leaveMeAlone 于 2015-8-27 16:07 编辑 
 感谢飘大,现在另外一种思路,就是hook libMobileGestalt.dylib里面的MGCopyAnswer方法,这样是不是连十六进制的文件的修改都可以省略了。
 于是我写了下面的方法(基本是照抄飘大的),可是发现 别的插件调用了MGCopyAnswer的时候 根本就没走我hook的新方法,希望能帮忙指正下。
 
 
 #include <dlfcn.h>
 #import <substrate.h>
 static CFPropertyListRef(*orig__MGCopyAnswer)(CFStringRef);
 CFPropertyListRef new__MGCopyAnswer(CFStringRef property)
 {
 NSLog(@"[****]into MGCopyAnswer........");
 
 CFPropertyListRef value = nil;
 
 if (!strcmp(CFStringGetCStringPtr(property, kCFStringEncodingMacRoman), "UniqueDeviceID")) {
 value = @"edee5ca30793b14b71eb4f434f318677d2d1c925"; //正版uuid
 }else{
 
 void *handle = dlopen("/usr/lib/libMobileGestalt.dylib", RTLD_GLOBAL | RTLD_LAZY);
 
 static CFStringRef (*$MGCopyAnswer)(CFStringRef);
 $MGCopyAnswer = reinterpret_cast<CFStringRef (*)(CFStringRef)>(dlsym(handle, "MGCopyAnswer"));
 
 if ($MGCopyAnswer) {
 value = $MGCopyAnswer(property);
 }             dlclose(handle);
 }
 return value;
 }
 
 %ctor
 {
 void *h = dlopen("/usr/lib/libMobileGestalt.dylib", RTLD_LAZY);
 if (h != NULL) {
 void* p = (void*)dlsym(h, "MGCopyAnswer");
 
 if (p!= NULL)
 {
 MSHookFunction( p, (void*)new__MGCopyAnswer, (void**)&orig__MGCopyAnswer);
 }
 dlclose(h);
 }
 %init;
 }
 
 
 
 
 | 
 |