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

压力给到了前端这边: app 如何获取应用唯一标识?

  •  1
     
  •   nathanleeinph · 334 天前 · 4204 次点击
    这是一个创建于 334 天前的主题,其中的信息可能已经有所发展或是发生改变。

    通常一个设备的 udid 在目前移动端操作系统的限制下是无法真正识别用户的,比如应用卸载重装就会发生改变。

    但是最近发现市面上有些 app 能真正识别到一个设备。

    这个唯一标识不受应用卸载重装、网络状态改变、IP 地址改变、显示分辨率改变、禁止访问剪贴板、禁止获取定位、禁止获取 imei 信息等影响,始终能识别是初次安装的设备及注册的用户信息

    有人知道大概实现的原理吗?

    27 条回复    2023-05-01 14:04:47 +08:00
    sl0000
        1
    sl0000  
       334 天前
    系统重装再试试呢
    ho121
        2
    ho121  
       334 天前 via Android
    浏览器指纹
    nvkou
        3
    nvkou  
       334 天前 via iPhone
    用户总不能卸载浏览器吧
    j20001112
        4
    j20001112  
       334 天前 via Android
    uber lyft 打车可以识别同一台设备,用的是 iCloud local keychain. 即使卸载重装也能自动登录之前的账号。
    j20001112
        5
    j20001112  
       334 天前
    目前只有手机刷机 /三星的安全文件夹用多用户的 work profile 可以让 uber 无法识别是同一台设备, 微信的新设备登录好像也可以.
    j20001112
        6
    j20001112  
       334 天前
    0o0O0o0O0o
        7
    0o0O0o0O0o  
       334 天前
    1. 如果重装后还能自动登录,你先排除 iOS KeyChain ,设备指纹再精准,我相信也没公司敢仅靠设备指纹自动登录
    2. 还有,绝大多数普通用户最好放弃对抗设备指纹,我觉得物理隔离更行之有效,无论是浏览器还是 APP ,很多东西防君子不防小人的
    https://www.ishumei.com/new/product/tw/sdk
    https://www.tongdun.cn/product/bddevicefingerp
    https://www.dingxiang-inc.com/business/fingerprint
    https://dun.163.com/product/dna
    j20001112
        8
    j20001112  
       334 天前
    @0o0O0o0O0o uber 就是靠设备 ID 指纹判断自动登录的,除非手机刷机,否则退出登录之后只要选择查找我的账号就能自动查到该设备所有登录过地账号. uber 用设备指纹来防止信用卡盗刷欺诈,之前信用卡有笔扣款不记得了就报告给银行说是盗刷,最后 Uber 直接把我的 iOS 三星谷歌安卓设备 信用卡 PayPal 全给拉黑了,永远无法叫车. 哪怕是用新的手机号新的信用卡卡号创建一个新的账号都是秒封. 最后只有手机刷机,不从 iOS 备份恢复,没有恢复那些设备指纹 ID 才成功创建新的账号没被封号. 之前手机刷机用从 iOS 备份恢复 /旧手机换机迁移助理都能自动登录之前的账号, 导致新设备一并拉黑.
    0o0O0o0O0o
        9
    0o0O0o0O0o  
       334 天前 via iPhone
    @j20001112 #8

    确实,uber android 这个询问之后需要进行一些验证才能登录吗? iOS 某些 app 是“静默”地自动登录上了,第一次遇到时毛骨悚然,还是看到 v 站网友科普才明白
    j20001112
        10
    j20001112  
       334 天前   ❤️ 1
    https://techcrunch.com/2017/04/23/uber-responds-to-report-that-it-tracked-users-who-deleted-its-app/ 之前库克 CEO 还约谈 uber CEO 威胁下架 关于设备指纹追踪用户,哪怕是刷机都能继续识别. Uber 说是防止信用卡盗刷者一次叫了四五百美金的 uber 打车,最后抹掉设备又能继续盗刷, 拉黑设备完全没用. 最后 Uber 还是坚持继续追踪设备指纹. icloud local keychain 本来是为了卸载游戏后还能继续保存游戏进度不用注册登录账户,最后被大公司拿来识别同一台设备. v 站之前也有讨论过 /t/916353
    通过搜索发现在已有大量关于 KeyChain 隐私问题的讨论,但基本都停留在“重置手机删除”,没有人讨论过这部分 App 写入的 KeyChain 是否会被 iCloud 同步,导致重置手机后被再次跟踪。
    现状是重度依赖钥匙串账号密码同步功能,那么问题来了:
    App 写入的 KeyChain 是否会被 iCloud 同步?
    如果会,如何只保留账号密码同步,阻止 App KeyChain 同步?
    如果无法阻止,有没有其他办法或思路来避免被同步跟踪?
    有没有大佬全面详细的写一下 KeyChain 的细节,以及如何规避其引发的隐私跟踪问题。

    除了 icloud local keychain 还用了 device check https://developer.apple.com/documentation/devicecheck
    Using the DCDevice class in your app, you can get a token that you use on your server to set and query two binary digits of data per device, while maintaining user privacy. For example, you might use this data to identify devices that have already taken advantage of a promotional offer that you provide, or to flag a device that you’ve determined to be fraudulent. The server-to-server APIs also let you verify that the token you receive comes from your app on an Apple device.
    在您的应用程序中使用 DCDevice 类,您可以获取一个令牌,然后在您的服务器上设置和查询每个设备的两个二进制数据位,同时保持用户隐私。例如,您可以使用这些数据来识别已经利用您提供的促销优惠的设备,或者标记您认为是欺诈性的设备。服务器到服务器的 API 还允许您验证您收到的令牌是否来自 Apple 设备上的您的应用程序。
    j20001112
        11
    j20001112  
       334 天前
    @0o0O0o0O0o 安卓也是卸载重装 /恢复手机备份 /从旧手机迁移数据到新手机都能自动登录. 只有当你主动退出登录之后才会询问是是否登录之前该设备 ID 登录过的账号. 目前只有三星的安全文件夹 knox 生成另一个 work profle 才能不被识别到同一台设备. ubereats refer 一个新用户给 35 美金, 老用户给 25 美金. 光是一个新用户就 60 美金. 之前设备指纹技术做地不够到位被羊毛党薅几天就走了上千万美金
    j20001112
        12
    j20001112  
       334 天前
    iOS 开发者证书重签名砸壳的 ipa 也能让 uber 认为是一台新设备,但是之后卸载重装还是能继续识别到是同一台设备. app store 版跟开发者证书重签名砸壳的 ipa 版本有两个不同的设备 ID
    j20001112
        13
    j20001112  
       334 天前   ❤️ 1
    https://developer.apple.com/forums/thread/72271 之前 iOS10.3 beta2 移除掉了 iCloud keychain items 来防止 APP 追踪同一台设备,最后被很多开发者反对, iOS10.3 RC 之后又添加回去了.


    In previous versions of iOS, the keychain data persisted even when the app was uninstalled and reinstalled on the device. After upgrading to iOS 10.3 beta 2, it appears as if deleting the app also deletes all associated keychain contents for that app. The code I'm using to interface with the keychain hasn't changed, and works with iOS 10.2. Is anyone else experiencing this behavior? I haven't had a chance to test this with 10.3 beta 1.
    I've searched through related threads here:
    https://forums.developer.apple.com/message/75464
    https://forums.developer.apple.com/message/112523
    The conclusion from the Apple staff member is that the persistence of the keychain data across apps re-installs is a side-effect of the implementation rather than a feature, and that the behavior should not be relied upon. Maybe they finally decided to update the implementation?
    * This is an intentional change in iOS 10.3 to protect user privacy. Information that can identify a user should not be left on the device after the app that created it has been removed.
    It has never been a part of the API contract that keychain items created by an app would survive when the app is removed. This has always been an implementation detail.
    If a keychain item is shared with other apps, it won't be deleted until those other apps have been deleted as well.
    There is documentation in the works about this change that should address questions raised in this thread.
    --gc
    在之前的 iOS 版本中,即使应用程序被卸载并重新安装在设备上,钥匙串数据仍然存在。在升级到 iOS 10.3 beta 2 之后,似乎删除应用程序还会删除与该应用程序关联的所有钥匙串内容。我用来与钥匙串进行交互的代码没有改变,并且可以在 iOS 10.2 上使用。有没有其他人遇到这种情况?我还没有机会测试 10.3 beta 1 。
    我在这里查找了相关帖子:
    https://forums.developer.apple.com/message/75464
    https://forums.developer.apple.com/message/112523
    苹果员工得出的结论是,钥匙串数据在应用程序重新安装之间的持久性是实现的副作用,而不是功能,并且不应依赖这种行为。也许他们终于决定更新实现?
    * 这是 iOS 10.3 中有意为之的更改,以保护用户隐私。在创建它的应用程序被删除后,不应将可以识别用户的信息留在设备上。
    API 合同中从未规定应用程序创建的钥匙串项目在应用程序被删除时会保留。这一直是实现细节。
    如果钥匙串项目与其他应用程序共享,那么在其他应用程序被删除之前,它不会被删除。
    关于此更改的文档正在编写中,应该会解答本帖提出的问题。
    --gc
    j20001112
        14
    j20001112  
       334 天前
    uber 百万美金的工程师还是挺牛的,像微信刷机之后从 iCloud 恢复备份之后还要旧设备扫码登录,而这本身就是同一台设备. Uber 可以自动登录,连一个按钮一个字符都不用按. 而且 uber 绑定着用户上几十万上百万美金的银行卡信用卡, 设备指纹 ID 技术哪怕是出现 1 次错误都会造成严重的资金被盗. 而银行 APP 支付宝都无法做到
    a570295535
        15
    a570295535  
       334 天前 via Android   ❤️ 3
    很简单啊,用户第一次(打开 app/登陆 app)的时候,直接在其他已有文件夹拉一个屎,用户根本不知道你还偷偷拉了屎,由于是在其他文件夹的屎,用户也想不到是你的屎,再加上这个屎是加密的乱码或是拥有某些系统文件的名称,就算用户发现了也不敢随便删除。
    WebKit
        16
    WebKit  
       334 天前 via Android
    uuid 我记得 iOS 卸载后重装也不会变,Android 国产有 OAID 国外有 google ID ADID
    j20001112
        17
    j20001112  
       334 天前 via Android
    @WebKit uuid 没有权限获取的,还要安装个描述文件才可以在浏览器获取到。比如 Uber 在设备刷机之后就无法识别是同一台设备了,如果知道 uuid 还是可以继续识别到的。
    James369
        18
    James369  
       334 天前
    这么麻烦吗,不是手机号码关联了吗
    j20001112
        19
    j20001112  
       334 天前 via Android
    @James369 封了手机号用户还是能创建新账号,无法做到直接封设备来风控。
    tyzandhr
        20
    tyzandhr  
       334 天前 via Android
    网络环境的话,可能会追踪你的路由器的
    yoyoyoyolol
        21
    yoyoyoyolol  
       334 天前 via iPhone
    iOS 可以自己生成一个唯一 id 存到 keychain 里,手机只要不恢复出厂设置不会被清除,很多公司都是这样做的
    okakuyang
        22
    okakuyang  
       334 天前
    用 ios 漏洞获取唯一 id
    nathanleeinph
        23
    nathanleeinph  
    OP
       334 天前
    @j20001112 感谢热心分享,增长见识了

    @a570295535 不存在拉屎,因为在顶楼的情况中,安卓端甚至没有给本地读写权限就已经识别到了

    感谢大家分享
    janus77
        24
    janus77  
       333 天前 via iPhone
    Android 可以在外置存储创建个文件就可,你的前提没说禁止储存权限…ios 应该有钥匙串
    e3c78a97e0f8
        25
    e3c78a97e0f8  
       333 天前
    @j20001112 “ uber 绑定着用户上几十万上百万美金的银行卡信用卡” 你这段话完全夸张了,首先 99%用户绑定的都是信用卡,谁的信用卡有几十万上百万美金的额度。其次就算有人盗用了 Uber 账号,他最多叫几次远路的车,并不能把信用卡拿去买买买。
    j20001112
        26
    j20001112  
       333 天前
    @e3c78a97e0f8 有的人绑定的是储蓄卡, 里面存个几百万几千万美金岂不是很正常, 盗刷的团队肯定不是自己叫几次远路的车,是在微信群朋友圈推特 ins 抖音 tiktok 小红书上招揽顾客五折代叫车,从圣地亚哥叫一个远路的车到西雅图最高档次的豪华 Black SUV XL 一下子就能刷走 5000 美金. 而且国外银行卡默认不开启消费提醒的
    e3c78a97e0f8
        27
    e3c78a97e0f8  
       333 天前
    @j20001112 绑储蓄卡就已经不正常了,绑几百万几千万美金的储蓄卡更不正常。
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   我们的愿景   ·   实用小工具   ·   2885 人在线   最高记录 6543   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 28ms · UTC 11:26 · PVG 19:26 · LAX 04:26 · JFK 07:26
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.