- UID
- 98164
注册时间2015-8-26
阅读权限10
最后登录1970-1-1
周游历练
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;
}
|
|