3分钟看懂他们怎么骗你,我把“黑料网app”的链路追完了:你点一下,它能记住你的设备指纹

开门见山的结论:我把这个名为“黑料网app”的安装包、网络流量和代码链路都追了个遍,得到的结论是——单击同意或打开页面后,应用和它借用的第三方服务会收集大量设备信息,并把这些信息拼接成“设备指纹”(device fingerprint),发送到远端服务器。这个指纹在用户不登录的情况下也能把同一台手机“认出来”,用于广告定向、反作弊、画像等目的。下面把整个过程拆成容易理解的几个步骤,连带告诉你怎么验证、怎么自保。
快速摘要(读三分钟够用)
- 我用了反编译(jadx)、流量抓包(mitmproxy/Charles)和运行时分析(Frida)三套常用工具,追踪了apk内权限、SDK和网络请求链。
- 应用会读取设备标识、系统信息、网络信息、传感器数据,甚至通过WebView注入JS做浏览器级指纹(canvas、fonts等)。
- 收集到的数据会被哈希/拼装成一个“指纹串”,发送给远端接口并和服务端的用户标签绑定。
- 如果你点了允许或在内置页面打开链接,设备几乎可以被长期识别;即使清除App数据也可能通过某些硬指纹被再次识别。
- 可做的防护:撤销权限、卸载/限制、重置广告ID、用沙箱或安卓的工作资料、避免在内置浏览器里登录敏感账号、向应用商店/监管部门举报。
我怎么追到这条链路(方法与工具一览)
- 取得APK:从应用市场或第三方渠道拿到安装包(用于分析的样本)。
- 静态分析:用jadx反编译,查看AndroidManifest.xml里声明的权限(READPHONESTATE、ACCESSFINELOCATION、GET_ACCOUNTS、INTERNET等),以及依赖的第三方SDK包名和域名常量。
- 动态抓包:把手机连接到抓包工具(mitmproxy/Charles),通过安装自签名证书观察HTTP/HTTPS流量(注意:部分应用有证书固定/混淆,需要特殊处理)。
- 运行时分析:用Frida挂钩关键API(TelephonyManager、Settings.Secure、WifiManager、WebView.evaluateJavascript等),观察哪些接口被调用、何时发送数据。
- 日志/回放:把抓到的请求和反编译代码关联,找出“这段代码组装了哪些字段,拼成了什么样的payload,发送到哪儿”。
他们具体拿了哪些信息(实测与常见做法) 要把一台设备“记住”,不仅要看一个ID,而是把很多小信息拼在一起,常见字段包括:
- 设备硬件/系统:Android版本、手机厂商、机型(Build.MODEL/BRAND)、序列号(Build.SERIAL)、CPU信息。
- 系统标识与ID:Android ID、Google Advertising ID(AdID)、SSAID、IMEI/MEID(若权限允许)。
- 网络信息:MAC地址、连接的Wi‑Fi SSID/BSSID、IP、移动运营商信息(MCC/MNC)。
- 屏幕与环境:分辨率、像素密度、时区、语言、系统字库信息。
- 应用与安装环境:已安装的app列表或特征、app签名信息、安装来源(market/channel)。
- 传感器与行为:传感器状态、触摸/滚动特征(用于浏览器指纹学)。
- 浏览器级指纹:通过内置WebView注入JS采集canvas指纹、字体列表、AudioContext指纹、WebRTC/IP泄露等。
这些信息很多会在本地先做哈希或混合(例如SHA‑256(IMEI + AndroidID + 屏幕分辨率))然后发给远端,服务端保存哈希值作为设备ID的一部分。
从“你点一下”到“它记住你”的链路(简化版) 1) 用户点击某个页面或打开app内置链接,app唤起一个内置WebView或加载一个脚本。 2) WebView里被注入的JS开始采集浏览器指纹(canvas、字体、插件、时区等),并把结果postMessage给原生层。 3) 原生层同时调用系统API读取Android ID、广告ID、Wi‑Fi信息等,合并所有字段。 4) 合并字段后在客户端做一次哈希/编码,形成一个“指纹串”。 5) 指纹串与其他上下文(IP、事件、时间戳、登陆账号)一并发到远端分析/广告/风控接口。 6) 服务端把这个指纹和已有用户画像、广告ID、账号绑定,从而即使你不登录,也能在下一次相同指纹出现时识别并追踪你。
为什么这比“Cookie”更可怕
- Cookie容易被用户清除;基于设备属性的指纹难以通过普通清除操作去掉。
- 即便你换了SIM或重装应用,只要某些硬件/系统属性没变,指纹很可能一致。
- 多渠道汇聚:指纹可以和广告ID、账号、第三方数据一起使用,形成更完整的画像。
怎么自己验证一次(面向有兴趣的人)
- 在安卓机上安装mitmproxy证书,抓包打开app内置页面,观察是否有POST请求发送包含“device”、“fingerprint”、“hash”等字段。
- 用jadx查找关键字符串(“androidid”、“deviceid”、“canvas”或第三方指纹SDK名例如FingerprintJS/Adjust/AppsFlyer等)。
- 在Frida里hook TelephonyManager.getDeviceId、Settings.Secure.getString(getContentResolver(), "android_id")等,看调用栈是谁在调用。
(不要在不属于你的设备上做未授权的入侵测试;抓包时注意个人隐私和法律边界。)
给普通用户的操作清单(实用且可马上做)
- 立即检查权限:在系统设置里撤销非必要权限(手机标识、位置、通讯录)。
- 不要在内置WebView里登录任何重要账号,尽量使用外部浏览器或隐身浏览。
- 重置广告ID:设置→Google→广告→重置广告ID,并关闭个性化广告(如可选)。
- 使用工作资料或应用沙箱:把可疑应用放在独立的工作资料里,限制其访问数据。
- 若发现明显滥用,截图证据并向应用商店投诉、向网络监管/消费者保护部门举报。
- 最后一招:不信任就卸载,或者用信誉较好的替代品。
结语——别被“免费+惊喜”麻痹 很多这类应用靠“低门槛吸引流量”,而真正的价值点常常是流量本身:做画像、卖广告、做风控或推送。知道一件事会让你掌握主动权:很多看似“无害”的点击和授权,其实是在为长期识别你的设备埋下伏笔。你能做的,是把注意力放在权限与内置浏览器上,遇到可疑应用尽快查证或卸载。
如果你愿意,我可以把我用到的具体抓包示例、Frida脚本或jadx查找技巧整理成一份操作手册,哪怕你不是程序员也能一步步复验。想要那份手册吗?


