Quantcast
Channel: 應用教學 – Hiraku Dev
Viewing all articles
Browse latest Browse all 94

在 iOS 7 獲得 UDID (需越獄)

$
0
0

iOS 7 對開發者來說一個頭痛的問題就是:UDID 完全無效了。

雖然 iOS 5 開始 Apple 就逐漸禁用 UDID,

但是到 iOS 6 之前其實還是可以偷偷用 [[UIDevice currentDevice] uniqueIdentifier] 呼叫,

只是應該是不能上架,所以只有 JB 軟體在用。

 

不過現在連這個方法都被擋了,

還好我偷看了 Cydia 的 source code ,發現原來可以繞道而行

首先寫上這行:

static CFStringRef (*$MGCopyAnswer)(CFStringRef);

之後在要抓 UDID 的 function 前加上:

void *gestalt(dlopen("/usr/lib/libMobileGestalt.dylib", RTLD_GLOBAL | RTLD_LAZY));
$MGCopyAnswer = reinterpret_cast<CFStringRef (*)(CFStringRef)>(dlsym(gestalt, "MGCopyAnswer"));

最後用

(id)$MGCopyAnswer(CFSTR("UniqueDeviceID"));

就可以抓到 UDID 了!

 

不過身為懶人當然直接 hook UIDevice 比較快(炸)

static CFStringRef (*$MGCopyAnswer)(CFStringRef);
%hook UIDevice
-(NSString *)uniqueIdentifier
{
	if (kCFCoreFoundationVersionNumber > 800)
	{
		void *gestalt(dlopen("/usr/lib/libMobileGestalt.dylib", RTLD_GLOBAL | RTLD_LAZY));
		$MGCopyAnswer = reinterpret_cast<CFStringRef (*)(CFStringRef)>(dlsym(gestalt, "MGCopyAnswer"));
		return (id)$MGCopyAnswer(CFSTR("UniqueDeviceID"));
	}
	else
		%orig;
}
%end

之後就可以繼續用 [[UIDevice currentDevice] uniqueIdentifier] 爽一年了 XDXD

 

 


Viewing all articles
Browse latest Browse all 94

Trending Articles