Android 违规获取用户隐私(获取MAC地址)整改 |
您所在的位置:网站首页 › android获取手机的基本信息 › Android 违规获取用户隐私(获取MAC地址)整改 |
前几天,收到公司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 |