Android 违规获取用户隐私(获取MAC地址)整改

您所在的位置:网站首页 android获取手机的基本信息 Android 违规获取用户隐私(获取MAC地址)整改

Android 违规获取用户隐私(获取MAC地址)整改

2023-09-19 01:27| 来源: 网络整理| 查看: 265

前几天,收到公司App违规收取用户隐私的邮件,说是存在收集设备MAC地址的行为。 这就让我很方了,上次已经整改过一次违规获取用户隐私的问题了,这次又来。。 因为上次整改的时候,已将所有的第三方库移到用户同意了隐私协议后,才去初始化的,自己的代码又不会去获取这些数据,理应不会再出现获取,所以就很奇怪,不知道哪里出了问题。

后来想到,既然是去获取了MAC地址,必定要调用系统的API,那么我只要去HOOK系统的方法,就可以知道在什么时候,去获取了MAC地址了。

由于各个系统版本获取MAC地址的方式不同,所以特意拿了个Android5.1的手机进行测试。

/** * Android 6.0 之前(不包括6.0)获取mac地址 * 必须的权限 * * @param context * @return */ private String getMacDefault(Context context) { String mac = "0"; if (context == null) { return mac; } WifiManager wifi = (WifiManager) context.getSystemService(Context.WIFI_SERVICE); WifiInfo info = null; try { info = wifi.getConnectionInfo(); } catch (Exception e) { e.printStackTrace(); } if (info == null) { return null; } mac = info.getMacAddress(); return mac; }

可以看到,我们在Android6.0以前是通过WifiManager.getConnectionInfo()的方式来获取相关数据的。 我们来看下这个方法。

IWifiManager mService; public WifiInfo getConnectionInfo() { try { return mService.getConnectionInfo(mContext.getOpPackageName()); } catch (RemoteException e) { throw e.rethrowFromSystemServer(); } }

可以看到,这里调用的是IWifiManager.getConnectionInfo(),IWifiManager是一个接口

interface IWifiManager{ WifiInfo getConnectionInfo(String callingPackage); ... }

那么这个IWifiManager是什么时候被赋值的呢?我们回到context.getSystemService(Context.WIFI_SERVICE); 我们知道,context的实现类其实是ContextImpl.java,我们直接来看ContextImpl.getSystemService()

@Override public Object getSystemService(String name) { return SystemServiceRegistry.getSystemService(this, name); }

我们可以看到,这里调用了SystemServiceRegistry.getSystemService(this, name); 我们再来看这个类

public static Object getSystemService(ContextImpl ctx, String name) { ServiceFetcher fetcher = SYSTEM_SERVICE_FETCHERS.get(name); return fetcher != null ? fetcher.getService(ctx) : null; }

这里的SYSTEM_SERVICE_FETCHERS是一个Map



【本文地址】


今日新闻


推荐新闻


CopyRight 2018-2019 办公设备维修网 版权所有 豫ICP备15022753号-3