参考 同盾设备指纹简单分析
研究了下设备指纹,我发现设备指纹无非三个方面。
1.设备指纹不可伪造性 2.设备指纹唯一性(降低重码数)3.设备篡改可识别性
下面分别说说以上三个方面。
设备指纹不可伪造,无非就是通过加密的手段,加密后我方可验证是否为我们自己加密的设备信息。
设备指纹唯一性、设备篡改可识别性,以同盾为例子,同盾在生成设备指纹唯一ID时,相应的生成了一些其他组合的DeviceId。
首先当用户篡改设备并且我们存储的设备指纹都被清了时(恢复出厂),依然可以根据其中一组DeviceId识别设备。
说下我知道的几种DeviceId组合:(优先根据设备信息恢复,其次根据本地存储)
1. imei + udid + wifiMac
2. androidId + wifiMac + brand
3. imei + wifiMac + serialNo + totalStorage
其次如果根据DeviceId组合没有找到设备的话,采取读取本地存储的设备指纹,一般生成的设备指纹会存储多个位置,还是以同盾为例,设备指纹存储了3个位置。
(International Mobile Equipment Identity)是国际移动设备身份码的缩写,国际移动装备辨识码,是由15位数字组成的"电子串号",它与每台手机一一对应,而且该码是全世界唯一的。每一部手机在组装完成后都将被赋予一个全球唯一的一组号码,这个号码从生产到交付使用都将被制造生产的厂商所记录。
IMEI是区别移动设备的标志,储存在移动设备中,可用于监控被窃或无效的移动设备。IMEI可用移动终端设备通过键入“*#06#”查得(不同厂商的手机所需输入的内容不同,同一厂商不同手机所需输入的内容也可能不同)。其总长为15位,每位数字仅使用0~9的数字(含义见下文)。
IMEI俗称“串号”,存储在手机的EEPROM(俗称“码片”)里,熟悉并了解这个号码对我们今后识别手机会起到非常大的作用。首先TAC码(IMEI的前六位数字)前三位在不同的时期会发生变化,而且即使同一部手机在不同的时期也会有不同的TAC码,如大家最熟悉的8210升级8250。再如爱立信的同一型号手机T39MC在不同地区的地方亦会有不同的号码:大陆行货为520406,香港则为520407。
IMEI为TAC + FAC + SNR + SP。
IMEI码由GSM(全球移动通信协会)统一分配,授权BABT(英国通信认证管理委员会)审受。
修改工具:EasyIMEIChanger
Mobile Equipment IDentifier(MEID)是全球唯一的56bit移动终端标识号。标识号会被烧入终端里,以后可以被修改。可用来对移动式设备进行身份识别和跟踪。由于ESN号段是有限的资源,基本上耗尽,可能还有少量回收利用的号段,所以制定了56位的MEID号段,用来取代32位的ESN号段。MEID主要分配给CDMA制式的手机。
MEID的格式:
如上图所示,MEID由14个十六进制字符标识,第15位为校验位,不参与空中传输。
RR:范围A0-FF,由官方分配
XXXXXX:范围 000000-FFFFFF,由官方分配
ZZZZZZ:范围 000000-FFFFFF,厂商分配给每台终端的流水号
C/CD:0-F,校验码
MEID号码的查看,没有一个通用的方法,由各手机制造商自己设置。可以通过查看手机说明书得到查看MEID号码的方法。
相关修改工具:MEID ESN一键修改工具等
UDID 「Unique Device Identifier Description」是由子母和数字组成的40个字符串的序号,用来区别每一个唯一的iOS设备,包括 iPhones, iPads, 以及 iPod touches,这些编码看起来是随机的,实际上是跟硬件设备特点相联系的,另外你可以到iTunes,pp助手或itools等软件查看你的udid(设备标识),如下
UDID是用来干什么的?
UDID可以关联其它各种数据到相关设备上。例如,连接到开发者账号,可以允许在发布前让设备安装或测试应用;也可以让开发者获得iOS测试版进行体验。苹果用UDID连接到苹果的ID,这些设备可以自动下载和安装从App Store购买的应用、保存从iTunes购买的音乐、帮助苹果发送推送通知、即时消息。
在iOS 应用早期,UDID被第三方应用开发者和网络广告商用来收集用户数据,可以用来关联地址、记录应用使用习惯……以便推送精准广告。
为什么苹果反对开发人员使用UDID?
iOS 2.0版本以后UIDevice提供一个获取设备唯一标识符的方法uniqueIdentifier,通过该方法我们可以获取设备的序列号,这个也是目前为止唯一可以确认唯一的标示符。
许多开发者把UDID跟用户的真实姓名、密码、住址、其它数据关联起来;网络窥探者会从多个应用收集这些数据,然后顺藤摸瓜得到这个人的许多隐私数据。同时大部分应用确实在频繁传输UDID和私人信息。
为了避免集体诉讼,苹果最终决定在iOS 5 的时候,将这一惯例废除,开发者被引导生成一个唯一的标识符,只能检测应用程序,其他的信息不提供。现在应用试图获取UDID已被禁止且不允许上架。
iOS 6.0系统新增了两个用于替换uniqueIdentifier的接口,分别是:identifierForVendor,advertisingIdentifier。
提供的功能就是“同一开发商的APP在指定机器上都会获得同一个ID。当我们删除了某一个设备上某个开发商的所有APP之后,下次获取将会获取到不同的ID。” 也就是说我们通过该接口不能获取用来唯一标识设备的ID,具体如下:
代码:
#import
NSString *adId = [[[ASIdentifierManager sharedManager] advertisingIdentifier] UUIDString];
来源:iOS6.0及以后
代码:
NSString *idfv = [[[UIDevice currentDevice] identifierForVendor] UUIDString];
来源:iOS6.0及以后
程序猿们又想到了使用WiFi的mac地址来取代已经废弃了的uniqueIdentifier方法。具体可见: http://stackoverflow.com/questions/677530/how-can-i-programmatically-get-the-mac-address-of-an-iphone
然而在iOS 7中苹果再一次无情的封杀mac地址,使用之前的方法获取到的mac地址全部都变成了02:00:00:00:00:00。然后又有了新方法,使用KeyChain来保存获取到的唯一标示符呢,这样以后即使APP删了再装回来,也可以从KeyChain中读取回来。但是不同程序得到的UDID都不一样,相对于单个程序来说是唯一的,所以这个UDID也就无法唯一的确定某台设备。不过不管怎样,至少可以保证同一个开发商的所有程序针对同一台设备能够获取到相同的不变的UDID。
什么是序列号?(IOS特有)
序列号是一串标识你手机出生证明以及身材特征的信息,甚至还可用来识别是否为官方翻新机。
你可以简单的将这一串数字分割为:aabccdddeef 的形式。拿iPhone 4为例
aa = 工厂及生产线编号 b = 年份 cc =制造周数 ddd = 机身识别码 ee = 颜色 f = 容量大小 ,通过序列号在苹果官网可以查询手机的激活和保修信息
综上,UDID和序列号是iOS设备特有的属性。
ICCID(Integrate circuit card identity) 集成电路卡识别码(固化在手机SIM卡中)
ICCID为IC卡的唯一识别号码,共有20位数字组成,其编码格式为:XXXXXX 0MFSS YYGXX XXXXX。分别介绍如下: 前六位运营商代码:中国移动的为:898600;中国联通的为:898601,中国电信的为:898603。
国际移动用户识别码(IMSI:International Mobile Subscriber Identification Number)是区别移动用户的标志,储存在SIM卡中,可用于区别移动用户的有效信息。其总长度不超过15位,同样使用0~9的数字。
IMSI 与你的手机卡是绑定关系 用于区别移动用户的有效信息
IMEI 与你的手机是绑定关系 用于区别移动终端设备