V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
V2EX 提问指南
MengiNo
V2EX  ›  问与答

现在手机设备是不是还是可以轻松的获取到类似 imei 这样的唯一识别号?

  •  
  •   MengiNo · 2021-10-16 10:20:28 +08:00 · 4967 次点击
    这是一个创建于 894 天前的主题,其中的信息可能已经有所发展或是发生改变。

    我的 iPhone 昨天返厂了,今天要转钱于是就用 iPad 下载了一个 中国建设银行 app 。结果转账时发现被限额 5000,原因是还有一台设备 《曾经登录》 过 app 。要我必须去之前的设备解绑也好授权也好,能把 iPad 的权限提升成 “强绑定设备” 操作才能不受限。

    我的情况是这样的,像这类银行 app 从来都是,用时即下用完即删的状态,所以其实我的 iPhone 里其实也没有 中国建设银行 app,加上昨天返厂时已经抹掉过 iPhone 。如果建行没有本事识别出抹掉过的 iPhone,那这个功能不就纯粹恶心用户?他既然敢做成这样,是不是说明其实 app 已经掌握了一套哪怕 iOS 提供假的 mac 地址、哪怕 iOS 不提供 imei 、哪怕抹掉后重置用户标识的情况下,还是有办法获取到你的手段?

    42 条回复    2021-10-18 11:08:26 +08:00
    Aceycli
        1
    Aceycli  
       2021-10-16 10:26:44 +08:00
    这个,只需要判断你两台设备不是同一台就行了吧。
    MengiNo
        2
    MengiNo  
    OP
       2021-10-16 10:29:27 +08:00 via Android
    @Aceycli 我的意思就是主要他怎么判断是一台呢,单纯看型号? 以前可以看 iemi 现在不让看了,后来可以看 mac 地址,现在 iOS 可以针对不同 ssid 给一个虚拟 mac 地址,用户唯一标识也可以重置,拿他总得有个东西可以确认这样是独一无二的吧。
    DSKcpp
        3
    DSKcpp  
       2021-10-16 10:33:44 +08:00
    APP 生成一个超长“绝对”不会重复的 ID 存起来不就行了。
    ahhui
        4
    ahhui  
       2021-10-16 10:34:27 +08:00
    理论上是拿不到 imei 的,但是实现相应的功能有其它办法。比如,记录下你的手机型号等在抹掉之前都不会变的信息,然后由服务器发一段特殊的编码(如 cookie,签名的 authentication code 等),然后存到 keychain 里,这样即使你删掉 app,重装后,在同一台设备下的 keychain 是可以重复读取并验证机器唯一性的。抹掉后肯定就做不到了。除非楼主可以重现抹掉后,重装 app 还能识别为同一台,那才可以说,app 绕过了限制拿到了某种硬件唯一标识符了。
    Aceycli
        5
    Aceycli  
       2021-10-16 10:37:04 +08:00
    @MengiNo 读缓存就能确定你是否登录过了吧。可能 IDFA 重置后也会识别为新设备
    nsynet57
        6
    nsynet57  
       2021-10-16 10:38:46 +08:00 via Android
    安卓上是"读取本机识别码"权限可以关闭,但是有些 APP 可能无法使用。

    建行 APP 是这样子的
    MengiNo
        7
    MengiNo  
    OP
       2021-10-16 10:59:30 +08:00
    @DSKcpp @Aceycli 他存在哪里呢,总不至于我删掉 app 再装他就认不到了吧。iOS app 不是只能在他的沙盒里存东西么。

    如果删了再装或者重置用户识别号他就不认,那就大概率出现死循环。你想用必须退出之前的登录状态,而所谓的登录状态只是之前的服务端数据罢了,客户端早就直接卸载(或者丢失关联),永远无法同步给服务端了。并且这种情况只能去线下门店解决,这么恶心的东西他竟然没有明显提示。
    just1
        8
    just1  
       2021-10-16 11:00:48 +08:00
    作为一个银行应用,如果认为抹掉的手机是安全的,这才是问题吧
    MengiNo
        9
    MengiNo  
    OP
       2021-10-16 11:02:34 +08:00   ❤️ 1
    @ahhui 这种通过 keychain 恶心人的手法我是知道的(所以我直接关了 keychain iCloud 同步),而且绝大多数普通用户可能只有 iOS,可能一辈子都不会开 甚至都不知道 这个 keychain 功能,这种手法感觉不太稳定。
    MengiNo
        10
    MengiNo  
    OP
       2021-10-16 11:07:32 +08:00
    @just1 问题是这个逻辑不需要抹掉,只需要重置用户标识。难道重置用户标识就是不安全的?那也起码标注一下你重置了这个我们就跟踪不到你了,为了保证安全你不要随便重置。 这种 既隐私换便利 之后的 隐私换安全 论调我其实有点接受不了,何况其他银行或者银保监会都没有类似的手段、标准或者要求。
    ahhui
        11
    ahhui  
       2021-10-16 11:24:29 +08:00   ❤️ 2
    @MengiNo 同步只是同步,keychain 在本机是一直可以用的,里面可以存储登录 token,方便卸载 app 后,重装不需要再次登录(实际上逻辑和验证手机唯一性差不多,很多 app 都在用这个验证手机唯一性)。即使你不同步,这个 keychain 还是可以被 app 使用。
    cpstar
        12
    cpstar  
       2021-10-16 11:28:46 +08:00
    即便是 Android 给了识别本机的权限,重刷安装系统之后(等同于 iOS 抹掉)获取的识别码也是不一样的。iOS 更应该是这样了。机器 SN 这种东西,除了系统,一般 APP 通过系统调用,是无法获取的吧。
    这个唯一码是混合了用户标识和机器表示的。

    显然同一个 APP,在重刷前后,会识别为两个设备。如果不重刷系统,那 APP 再次安装之后获取的机器码肯定还是卸载之前那个——系统没有变化。换句话讲,如果在一台新设备上,能够模拟原设备的机器码,APP 是无法知道设备发生了变化的。
    至于安全问题,主要是给用户提供一个安全保护,让用户知道有哪些设备使用过相应服务,并且让用户对该设备更加信任,而且也让用户能够删除某个信任设备。
    Rocketer
        13
    Rocketer  
       2021-10-16 11:29:20 +08:00 via iPhone
    实测旧手机迁移到新手机会把建行 app 的绑定带过去,直接就是完整权限。所以它肯定没读到什么唯一码。
    ckaock
        14
    ckaock  
       2021-10-16 11:35:44 +08:00
    我也有类似问题,忘记怎么弄好了,问问客服
    Xushet
        15
    Xushet  
       2021-10-16 11:40:59 +08:00 via Android
    设备序列号?
    vocaloidchina
        16
    vocaloidchina  
       2021-10-16 12:32:43 +08:00 via iPhone
    我隐约记得 ios 追踪里面的条款是有说会对银行 app 稍微放宽限制的
    MengiNo
        17
    MengiNo  
    OP
       2021-10-16 12:45:38 +08:00
    @ckaock 客服说只能去门店,而且省会级别的城市,我在的区只有一个建行周六有上班。他说如果你实在急就绑定第三方,绑支付宝可以转 5k,微信可以转 5k,云闪付可以转 1w,量不大的话什么 jd,美团啥的都可以绑都可以转。我真是人傻了……
    ryh
        18
    ryh  
       2021-10-16 13:02:03 +08:00
    iOS 从一开始就不能获取 IMEI,
    @Xushet UDID (而且不是序列号)从 iOS5 (?)开始就不能行了,想太多
    dingwen07
        19
    dingwen07  
       2021-10-16 13:45:20 +08:00 via iPhone
    Keychain 可能是祖传问题了,苹果之前有一次尝试过在应用卸载同时删除对应 Keychain,但最后没有上线这个功能。
    EIJAM
        20
    EIJAM  
       2021-10-16 13:50:28 +08:00 via iPhone
    建行是这样,其他银行没有限制这么多。
    llopppp
        21
    llopppp  
       2021-10-16 15:34:00 +08:00
    设备指纹这个说法是存在的,只不过看是否要搭建环境。
    前两天我云闪付 app 直接用的数据迁移,在新手机上直接打开 app,提示登陆状态失效,同时原手机登陆状态也失效了。。提示的就是设备指纹变化。
    Maskeney
        22
    Maskeney  
       2021-10-16 20:02:56 +08:00
    针对标题:IMEI 基本获取不到,但是唯一识别号很容易获取尤其是国产机,iPhone 也不例外甚至还有通过钥匙串持久化的
    针对内容:建行这个你纯粹是想多了,根本不需要关联设备的唯一识别号,只需要强认证后保存一个 token 即可,即使你同一台设备卸载重装也是会告诉你当前设备是新设备的,不要把它想得太复杂,尤其是电子银行下水道的建行
    icyalala
        23
    icyalala  
       2021-10-16 20:16:26 +08:00
    如果删除 App 要清空 keychain,那 keychain 就完全没必要存在了,所以说那是 beta 版的 bug 。
    苹果需要做的是在 iOS 下提供像 Mac 那样的系统级 Keychain 查看工具。 @dingwen07
    dingwen07
        24
    dingwen07  
       2021-10-16 23:09:02 +08:00 via iPhone
    @icyalala #23

    https://developer.apple.com/forums/thread/22874?answerId=75464022#75464022

    > Indeed. This behaviour is more of an artefact of the implementation rather than a designed-in feature.

    我并不那样认为
    snorlax
        25
    snorlax  
       2021-10-16 23:46:39 +08:00
    @ahhui #11 除了抹掉还有别的清空 keychain 或者禁用 keychain 的方法吗?
    huxiaofan1223
        26
    huxiaofan1223  
       2021-10-17 00:59:15 +08:00 via iPhone
    老哥我比你还惨,ios15 降级到 14.8,我也被限额了,还得去线下解锁
    huxiaofan1223
        27
    huxiaofan1223  
       2021-10-17 01:03:28 +08:00 via iPhone
    @just1 可以增加验证方式吧,比如人脸识别,输入某张卡的银行卡密码,手机短信验证,我手机降级之后也被限额了,可他就是要你去线下,你说气不气?
    huxiaofan1223
        28
    huxiaofan1223  
       2021-10-17 01:05:57 +08:00 via iPhone
    @Rocketer 那可能是缓存起来的数据了
    MengiNo
        29
    MengiNo  
    OP
       2021-10-17 01:22:32 +08:00
    @huxiaofan1223 我今天去线下,结果明明只是一个 app 的功能,结果有身份证没带卡还不行。完了我说拿挂失补一张卡出来总可以吧,他说新补的卡限额 1w,我说那 1w 也不成啊,他说那总比你现在 5000 好吧,不要的话只能回去拿卡。问就是风控、安全。讲真论银行这块真就汇丰这种资本主义性质的银行玩得明白,看钱不就完事了讲那么多,卡里就两块钱爱干嘛干嘛,搞这么复杂你等下自己把自己锁了,他们还得倒贴一个人的工时给你做这些有的没的手续。
    daviddeng
        30
    daviddeng  
       2021-10-17 01:30:13 +08:00
    @MengiNo 对于银行来说通过银保监会的安全审查最重要,考虑到大多数人群有关网络的认识我认为银行的做法是正确的,即银行是为纯粹的小白提供安全的金融服务而不是某些对网络有一定了解的人群,此外,银行不需要追踪设备,银行只需要确认这台设备“不是”之前那台设备就可以了,所以它可以直接读取用户标识就可以了,一旦标识改变就认为这是一台新设备
    WebKit
        31
    WebKit  
       2021-10-17 01:39:47 +08:00 via Android
    现在除了系统以外,无论是 iphone 还是 android 都获取不到手机的硬件 id 的(imei mac 等等)
    WebKit
        32
    WebKit  
       2021-10-17 01:41:01 +08:00 via Android
    @nsynet57 关不关无所谓 Android10 以后返回的都是空的
    ruri
        33
    ruri  
       2021-10-17 08:29:33 +08:00   ❤️ 1
    楼主可能还不是很懂现在的用户跟踪技术,以前软件喜欢拿 IMEI 数据是因为这玩意儿和硬件绑定,基本上不可能变动(除非换 SoC 了,因为 IMEI 存储在基带里面)。但现在软件并不需要拿到 IMEI 也能跟踪用户,我举几个常见的例子:
    通过设备 ID 来判断设备是否为同一个,不过有些操作系统给软件的设备 ID 是虚拟的,并不是用物理硬件生成的 ID 。
    通过在存储设备里生成一个 token 来判断设备是否为同一个,Android 软件在 /sdcard 里到处拉屎就是为了实现这个方案。

    第二种跟踪方案目前在 Android 端除了通过 su 权限执行 mount --bind 以外(现成的轮子有“存储空间隔离”APP 和其它一些 Magisk 模块),没有任何办法避免,即使是 Android 11 + target 30 以后。因为 APP 在媒体目录里面依旧可以随便读写(例如 pilipili )。
    RightHand
        34
    RightHand  
       2021-10-17 08:29:40 +08:00 via Android
    运营商 app,权限很高,并且国内有一键通讯 sdk 。正常需要授权,银行嘛,不知道
    ruri
        35
    ruri  
       2021-10-17 08:34:32 +08:00
    第三种方法就是通过网络的一些信息来识别,例如 WIFI 的 SSID 和 WIFI 的位置信息。还有移动网络也能获取手机号码: https://www.v2ex.com/t/498548#r_6314563
    跟踪用户的技术多种多样,这就是为什么谷歌敢取消 cookie 的原因,因为它有更好的跟踪办法了,取消 cookie 可以打压友商竞品。
    fan123199
        36
    fan123199  
       2021-10-17 09:18:40 +08:00
    ,Android 现在没必要去获取 imei 号,获取 Android id 就行,这个是个不需要权限的 id,是跟着系统+app 走(每个 app 互相不一样),但是对于同个 app,是一致的,所以可以判断。iOS 应该是用 idfa 。 另外,这个判断逻辑是没有问题的,银行欺诈比你想象的多,风控也做了很多。问题在于后续的处理。一般其他银行是不用去线下的,这个线下就完成放弃了用户体验,只为了风控。
    ahhui
        37
    ahhui  
       2021-10-17 09:59:01 +08:00
    @snorlax 从目前掌握的信息看,还没有清空和禁用的方法。楼上有人提到曾经苹果想在卸载 app 的时候删除 keychain 里的数据,但是最终没上线,估计是因为这样造成的问题会更多吧。
    longxk
        38
    longxk  
       2021-10-17 13:21:07 +08:00
    谷歌现在限制了设备唯一标识的获取,但是国内 OV 华米等厂商为了广告收入又提供了 OAID,基本等于设备唯一标识
    huxiaofan1223
        39
    huxiaofan1223  
       2021-10-17 13:33:43 +08:00 via iPhone
    @MengiNo 还好我没去,我也不打算去了,以后尽量不用建行卡了吧
    icyalala
        40
    icyalala  
       2021-10-17 13:35:14 +08:00
    @dingwen07 看来我想错了。。
    根据那个苹果工程师的其他回答,确实是因为隐私问题想要改掉 keychain,但是因为有兼容问题所以又改回来了。
    jim9606
        41
    jim9606  
       2021-10-18 03:52:36 +08:00
    ios 应该是不能获得 imei 在内的永久设备标识符的。
    正因为不能跟踪,所以你才会被限额,这里跟踪是提升安全信度的。
    这种情况有些风控会设计冷却机制,旧设备长期不使用会被降权,新设备保持活跃会获得提权机会。在这种评价机制下楼主这种用完即删的策略很难获得提权。
    FlyingShark
        42
    FlyingShark  
       2021-10-18 11:08:26 +08:00
    说个和楼主无关的,移动 UAID,你猜猜有多少 app 正在用
    http://dev.10086.cn/docInside?contentId=11030372569757
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   我们的愿景   ·   实用小工具   ·   3089 人在线   最高记录 6543   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 31ms · UTC 12:51 · PVG 20:51 · LAX 05:51 · JFK 08:51
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.