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

iOS 的应用有没权限获得用户设备的特征码?

  •  
  •   nikoo · 2017-06-14 13:07:34 +08:00 · 3041 次点击
    这是一个创建于 2507 天前的主题,其中的信息可能已经有所发展或是发生改变。
    比如一台 iPhone 7,安装了一个应用并登录了该应用的一个账号 A,
    然后退出账号并删除该应用,更换 IP 后重新安装该应用,再登录账号 B

    那么该应用是否有能力知道在一台设备上登录了两个账号?

    BTW:该应用未索要任何特殊权限
    33 条回复    2017-06-16 22:27:40 +08:00
    operafans
        1
    operafans  
       2017-06-14 13:08:44 +08:00
    UUID ?
    nikoo
        2
    nikoo  
    OP
       2017-06-14 13:11:21 +08:00
    @operafans 苹果拒绝 iOS 应用访问 UDID 和 IMEI
    在我的理解,一个普通应用的权限是无法确定唯一设备的,不知道对不对
    PP
        3
    PP  
       2017-06-14 13:15:58 +08:00 via iPad   ❤️ 1
    据我所知,在 iPhone 3 和 4 的时代很早期苹果允许应用获得设备识别码,后来担心隐私问题关闭了这个接口,现在不允许了,除非应用使用私有接口。
    paradoxs
        4
    paradoxs  
       2017-06-14 13:18:22 +08:00   ❤️ 1
    finab
        5
    finab  
       2017-06-14 13:23:50 +08:00   ❤️ 1
    keychain 呀 ,将登陆过的账号保存在 keychain 中。卸载 APP 不删除 keychain 里保存的
    nikoo
        6
    nikoo  
    OP
       2017-06-14 13:31:27 +08:00
    @paradoxs 谢谢,读完了,似乎该文章最终也无法获得设备唯一 ID,最后是使用时间加激活次数来进行的反盗版?
    Citrus
        7
    Citrus  
       2017-06-14 13:43:44 +08:00
    搭车同问,iOS 应用能获取到我插的卡的手机号么?这两天拿了个安卓玩了玩,我擦居然不允许我禁止应用获取 IMEI 和手机号,打开微信点登陆手机号直接就输进去了。。。吓人。。。
    paradoxs
        8
    paradoxs  
       2017-06-14 13:52:41 +08:00   ❤️ 1
    @nikoo 办法肯定是有的, 你把 gmail 和百度贴吧, 卸了, 重新装, 还不是自动给你登录了.
    就算你关了 keychain
    nikoo
        9
    nikoo  
    OP
       2017-06-14 14:00:27 +08:00
    @finab @paradoxs /t/225463

    如果关闭 keychain 并且新系统只安装"百度贴吧"一个应用,登录后删除,重新装,他还能自动登录么?
    paradoxs
        10
    paradoxs  
       2017-06-14 14:02:47 +08:00
    @nikoo 可以的.
    nikoo
        11
    nikoo  
    OP
       2017-06-14 14:10:43 +08:00
    @paradoxs 百度这是用的什么黑科技,在删除应用后他把登录信息保存在哪了?(已关闭 keychain 的情况下)
    finab
        12
    finab  
       2017-06-14 14:22:35 +08:00   ❤️ 1
    @nikoo 兄弟,都说了是用 keychain 啦~ 你关闭的是 iCloud Keychain 吧~
    nikoo
        13
    nikoo  
    OP
       2017-06-14 14:26:21 +08:00
    @finab 的确关闭的是 iCloud Keychain,iPhone 上能否彻底关闭 keychain ?
    paradoxs
        14
    paradoxs  
       2017-06-14 14:57:42 +08:00
    iOS keychian 有分 icloud keychian 和 另外的 keychian 这个概念, 好像是很久之前 V2EX 首发的.

    我 google 了好久也没发现别处有这个说法
    sunhr
        15
    sunhr  
       2017-06-14 16:09:06 +08:00
    iOS10.3 之前,可以生成 UUID 写入 Keychain,卸载应用后 Keychain 内容保留。

    iOS10.3 及以上版本,卸载应用之后 Keychain 会被清空。

    楼上有童鞋提到 Google 和 Baidu,这两家的很多产品使用了 Keychain Sharing,也就是可以在一个开发者账号下的多个 Apps 之间共享 Keychain 的内容。

    在 iOS10.3 及以上版本,当共享一个 Keychain 的所有 Apps 都被卸载后,这个 Keychain 会被清空。
    kera0a
        16
    kera0a  
       2017-06-14 16:22:52 +08:00   ❤️ 1
    @nikoo 应该不能关闭

    @sunhr keychain 被删 是几个 beta 版才有的特性,最后一个 BETA 版和正式版不会删
    honeycomb
        17
    honeycomb  
       2017-06-14 16:31:16 +08:00
    iOS11 为开发者增加了读写一个非常受限的永久识别码的方案
    这里的永久指的是,这个识别码只有两个比特的容量,因此无法用于唯一性追踪。


    正如
    @sunhr 所说
    最后一个可以保留永久识别码的方法,也就是 Keychain 也受到了很大限制。

    @Citrus
    可以通过 AppOps 事实上阻止微信获取 IMEI 来补救
    但是说到底,微信从一开始就不可以要这个权限
    honeycomb
        18
    honeycomb  
       2017-06-14 16:32:42 +08:00
    @nikoo
    --如果关闭 keychain 并且新系统只安装"百度贴吧"一个应用,登录后删除,重新装,他还能自动登录么?

    在 iOS 10.3 以前,能自动登陆
    在 iOS 10.3 以后,不能(因上述 keychain 改动)

    如果手机内还有其它第三方应用,可能因为 Keychain Sharing 的缘故导致这个隐私措施被绕过
    sunhr
        19
    sunhr  
       2017-06-14 16:32:57 +08:00
    @kera0a

    卧槽我今天才知道 iOS10.3 正式版不会删
    kera0a
        20
    kera0a  
       2017-06-14 16:57:18 +08:00
    @sunhr 很多人只知道去掉了,不知道改回来了,坏事传千里嘛~ 😄 删掉的新闻一大堆,改回来的新闻一条没有~
    这位兄弟也不知道呢 @honeycomb
    honeycomb
        21
    honeycomb  
       2017-06-14 17:00:34 +08:00 via Android
    @kera0a
    是有这个说法:

    10.3 的测试版里有清理 keychain 的做法
    10.3 正式版又取消了
    honeycomb
        22
    honeycomb  
       2017-06-14 17:01:31 +08:00 via Android
    @kera0a 可是清理 keychain 是好事,开发者持久追踪用户会因此更难以持久追踪用户
    regicide
        23
    regicide  
       2017-06-14 17:32:08 +08:00
    应该是可以的 之前抓过今日头条的包 里面有跟机的 device_id 不会变
    mooczz
        24
    mooczz  
       2017-06-14 18:01:12 +08:00 via iPhone
    Keychain+UUID 可以实现,下个博雅斗地主看一下就知道了,只要你在这台设备登录过,删除再安装,会自动登录
    Citrus
        25
    Citrus  
       2017-06-14 18:08:38 +08:00
    @honeycomb 确实不应该要,国产软件流氓多。。。唉。。。
    AppOps 需要 root 么?
    honeycomb
        26
    honeycomb  
       2017-06-14 22:07:24 +08:00
    @Citrus
    无需 root
    手机应用可以使用网络 adb 模式,局限是每次重启手机需要重新启用一次网络 adb

    当然也可使用 root 模式,或把应用安装到 system/priv-app

    也可以手动通过 abd shell 的 appops 命令设置
    Citrus
        27
    Citrus  
       2017-06-15 11:06:34 +08:00
    @honeycomb 有相关教程么?我在 Google Play 上下下来直接要求 root 安装=。=
    honeycomb
        28
    honeycomb  
       2017-06-15 11:09:16 +08:00
    @Citrus

    我觉得不需要额外教程,应用自身的启动界面应当足以让你明白如何使用非 root 模式(从本地访问网络 adb 的接口)
    Citrus
        29
    Citrus  
       2017-06-15 13:55:17 +08:00 via iPhone
    @honeycomb 装成了李鬼,难怪。。。
    wzxjohn
        30
    wzxjohn  
       2017-06-16 14:41:46 +08:00
    @honeycomb 今天测试了一下 AppOps,发现一个很奇怪的问题。getLine1Number 这个 API 在文档中写的是需要:
    READ_PHONE_STATE, READ_SMS or READ_PHONE_NUMBERS
    这样的权限,那么是不是任意一个允许其中一个,就能调用呢?
    更奇怪的是,我明明已经关了 READ_SMS 这个权限,但是保留了 SEND_SMS 的权限(通过 AppOps ),这个应用还是能通过 getLine1Number 获取到手机号。。。这是为啥。。。
    honeycomb
        31
    honeycomb  
       2017-06-16 15:51:40 +08:00
    @wzxjohn
    考虑看一下 getLine1Number 的实现?

    看上去这个接口应该是由 OP_READ_PHONE_STATE 管的
    所以 READ_SMS/SEND_SMS 这两个 OP 和 getLine1Number 无关

    确实是这样
    https://android.googlesource.com/platform/frameworks/base/+/android-7.1.2_r12/telephony/java/android/telephony/TelephonyManager.java

    里面有一句

    number = telephony.getLine1NumberForDisplay(subId, mContext.getOpPackageName());
    后面的参数就是要把调用这个接口的应用包名传进去,appops 负责检查这个包是否可以执行特定的 OP
    但它的具体实现在 ITelephony.java 里,是要通过 ITelephony.aldl 生成的
    wzxjohn
        32
    wzxjohn  
       2017-06-16 22:26:57 +08:00
    @honeycomb 找了半天,发现实现权限判断的部分是内部实现,是否说明其实不同的安卓系统可能判断不同?
    还有,这段代码的 Java Doc 里面写的也是

    Requires Permission:
    READ_PHONE_STATE
    OR
    READ_SMS

    搜了一下发现有人遇到过这个问题,在 6.x 之后二者有一个即可,6.x 之前只能用 READ_PHONE_STATE。。。
    wzxjohn
        33
    wzxjohn  
       2017-06-16 22:27:40 +08:00
    @honeycomb 顺便说一个奇怪的问题,不知道是不是我手机的问题,在插卡之前,AppOps 是看不到 编辑短信 这个权限的,插卡之后才看到。。。
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   我们的愿景   ·   实用小工具   ·   5370 人在线   最高记录 6543   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 37ms · UTC 08:55 · PVG 16:55 · LAX 01:55 · JFK 04:55
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.