大厂的流行App都用技术手段检测手机硬件环境,标识用户的唯一性。这样的技术手段有两个目的,一个是为了更加精准的广告投放,另外一个原因是防止被薅羊毛等。其实无论是那种目的都是对个人隐私的侵犯。从Android10开始,API中已经禁止App读取硬件标识信息了。但是对于10以前的方法我们有没有办法屏蔽这样的行为呢?作为技术宅,闲着蛋疼,决定试一下,看看能在多大程度上阻止App的检测行为(保护自己的隐私)。


首先来考虑app们都会检测和读取那些内容

  1. 硬件环境: imei,imsi,手机号,mac地址,手机串号,cpu串号等等一大堆。。。
  2. 网络环境: 手机连接的wifi的mac和ssid,手机保存的wifi信息,手机连接的基站信息,手机的DNS和网关信息,也是一大堆
  3. 位置环境: 通过网络环境应该很容易推导出位置,另外一个是传感器数据
  4. 软件环境: 手机安装了那些App的信息,包括app的版本号,md5等
  5. 数据环境: 估计就是sdcard里面存储的一大堆东西了,包括手机里的照片的基本信息,还有联系人等等信息
     

  1.  

如果直接阻止app读取这些信息,很多应用就起不来了,就像小媳妇一样不和你搞了;所以说还不能霸王硬上弓,只能伪造这些数据给他们读。而且伪造的数据还不能太假,不然直接封号了。反过来说如果不被封,就证明伪造的数据被App认可了。

 

本次研究的核心就在于如何方便的伪造出数据(相当于是一套马甲)。总体方向有两个一是基于Xposed相关的技术,另一个是直接自己改Rom。

 

其实Xposed是最简单的方法。由于国内移动互联网安全环境十分恶劣,各个厂商基本把Xposed当成潜在威胁,见到就封。所以如果想把Xposed用到大厂的App上,就不能直接使用,必须要对Xposed的特征做修改。这样使用Xposed基本就不会被识别也不会被封号了。Xposed的另外一个缺点是不能在高版本的android上面使用。

 

自己改Rom难度也不低,要改很多东西。要改的东西基本就是Xposed需要hook的东西。

 

我使用了Xposed+改机rom的方式,在App访问涉及身份敏感信息时让他们读到的是马甲上的信息,不让他们读取真实的值。当然也可以指定包名白名单,白名单下的允许读取真实内容。

 

先说测试和验证方法:提前准备好一系列的相关数据,就是前面的5类内容,以备随时切换。然后用这些信息注册某大厂App的账号,看看是否能注册成功,成功的话,就再跑几天,看看会不会被封。

android api伪造设备信息 安卓设备伪装_java虚拟机

目前在一个物理设备上成功注册了几个大厂App的号,分别使用了不同的信息。并且到目前为止还都正常登陆和运行。后面再多测试几个厂家的App看看是否能够经得起考验