早前研究OpenUDID,最近整理资料,故贴出关于OpenUDID的测试分析结果
1、OpenUDID的测试结果
1)同一台设备下(黑色iPhone4)
a、 Demo1OfOpenUDID测试结果
无线局域网下:
137891ec369c899b01cc3df6cad90360514827e7
GPRS下:
137891ec369c899b01cc3df6cad90360514827e7
飞行模式下:
137891ec369c899b01cc3df6cad90360514827e7
b、安装第二个Demo2OfOpenUDID测试结果【Demo1存在未删除】
无线局域网下:
137891ec369c899b01cc3df6cad90360514827e7
GPRS下:
137891ec369c899b01cc3df6cad90360514827e7
飞行模式下:
137891ec369c899b01cc3df6cad90360514827e7
c、Demo1存在,删除Demo2应用并重装后:
137891ec369c899b01cc3df6cad90360514827e7
d、 将使用了LXF_OpenUDID方案的应用全部删除【关机重启iPhone,Xcode彻底清除并重启】重装Demo2
da0fd9abf16b6c8dade7e5228a6761b8adfc958b
2)不同设备下
a、 黑色iPhone4:
3be23eac6a6fc0721c184a0acfd5d54af4431bb7
b、 白色iphone4
b6d314050e29bf9dd12574320bec8f03354d8547
c、 黑色iPhone4S
965e60bd2a95e3c350066f56a44420d40822df96
(以已有的三部设备分别交替重复测试)
2、OpenUDID测试结果分析
1)优点:
a、没有用到MAC地址。MAC地址跟UDID一样,存在隐私问题。不能保证以后不会禁用MAC地址。
b、不同设备能够获取各自唯一的识别码,保证了唯一性,可以用于以往UDID的相关用途。
c、从代码分析OpenUDID的获取,识别码获取方便并且保存谨慎
OpenUDID生成唯一识别码的代码:
unsigned char result[16];
const char *cStr = [[[NSProcessInfo processInfo] globallyUniqueString] UTF8String];
CC_MD5( cStr, strlen(cStr), result );
_openUDID = [NSString stringWithFormat:
@"%02x%02x%02x%02x%02x%02x%02x%02x%02x%02x%02x%02x%02x%02x%02x%02x%08x",
result[0], result[1], result[2], result[3],
result[4], result[5], result[6], result[7],
result[8], result[9], result[10], result[11],
result[12], result[13], result[14], result[15],
arc4random() % 4294967295];
当设备装上第一个使用OpenUDID方案的应用程序第一次调试时,会生成一个唯一识别码,追加8为随机数保持了40位的UDID,并且利用了NSUserDefaults类将识别码进行了保存。
但是当应用删除,UserDefaults同样会被清空,为了避免重新生成唯一识别码,该方案还使用到了UIPasteboard类(设备剪切板),将识别码同时保存到了UIPasteboard中。
UIPasteboard* slotPB = [UIPasteboard pasteboardWithName:availableSlotPBid create:YES];
[LXF_OpenUDID _setDict:localDict forPasteboard:slotPB];
d、当设备上安装第二个使用了OpenUDID方案的应用程序,将会从UIPasteboard中获取唯一识别码,这里取到的就是之前第一个应用保存到UIPasteboard中的。【前提:设备上有一个使用了OpenUDID的应用存在】
2)缺点
a、当将设备上所有使用了OpenUDID方案的应用程序删除,且设备关机重启,xcode彻底清除并重启,重装应用程序去获取OpenUDID,此时OpenUDID变化,与之前不一样了,从测试结果可看出。
b、由缺点1分析,所有OpenUDID应用卸载后,由UIPasteboard保存的数据即被清除,重装故会重新获取新的OpenUDID。
那么当因为用户干预或者恶意程序,致使UIPasteboard数据清除,从而导致OpenUDID被删除,重装也会获取新的OpenUDID。
Demo参见