最近在小米开放平台上线时,驳回报告中说在用户同意之前获取了设备ID。

一般来说,合规政策推出这么久了,又上线了这么多次,正常业务流程是不会再出现这种问题,就是怕一些第三方库在ContentProvider做初始化,然后调用了TelephonyManager的getDeviceId或getImei方法,这可能会导致未经用户同意就获取设备ID的情况。解决办法首先就是要找到调用这2个方法的代码位置,然后再避免在用户同意之前获取设备ID。

要找出这样的代码,或者要实现一些类似判断app是否调用了某些方法的情况,靠肉眼和逻辑分析可能会很难受,还需要借助工具来帮我们判断。

现在我要说的工具就是epic库中的DexposedBridge类,这个是它的中文说明文档:epic/README_cn.md at master · tiann/epic · GitHub 。这个库类在本文论述中的作用就是检测app中是否调用了某些方法。

下面我们直接上使用步骤。

一、库的引入

1、在工程级的build.gradle中添加:

allprojects { repositories { ... maven { url 'https://jitpack.io' } } }

2、在主模块的build.gradle中添加:

implementation 'com.github.tiann:epic:0.11.2'

implementation 'com.github.tiann:epic:0.11.2@aar'

3、确保主模块的build.gradle中配置的CPU架构仅仅是:

abiFilters  "arm64-v8a"

为什么只是它?因为上面那个链接里面有说:

4、确保你运行的设备的是 Android 5.0 ~ 11,原因见上图。

二、准备要监听的方法配置表

在主模块的assets目录新建一个叫privacy.json的文件,文件内容如下:

{
    "methods": [
        {
            "className": "android.telephony.TelephonyManager",
            "method": "getDeviceId"
        },
        {
            "className": "android.telephony.TelephonyManager",
            "method": "getImei"
        }
    ]
}

这个代码的意思很明显了,就是要监听className这个类当中的method方法。在本例中,就是要检查下app是否调用了TelephonyManager的getDeviceId和getImei方法。

三、实现对方法的监听(专业点叫Hook)

import android.content.Context;
import android.util.Log;import com.lancoo.homework.util.JsonUtil;import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStream;
import java.io.InputStreamReader;
import java.util.ArrayList;import de.robv.android.xposed.DexposedBridge;
import de.robv.android.xposed.XC_MethodHook;public class MyHook {public static void initPrivacy(Context context) {try {InputStream is = context.getAssets().open("privacy.json");Privacy privacy = JsonUtil.parseJson(getJson(is), Privacy.class);if (privacy == null) {Log.e("My", "没发现privacy.json,或者privacy.json里面没正确的东西");return;}ArrayList<PrivacyMethod> methods = privacy.methods;for (PrivacyMethod method : methods) {hookMethod(method.className, method.method);}} catch (IOException e) {e.printStackTrace();}}private static void hookMethod(String className, String method) {Class<?> clazz;try {clazz = Class.forName(className);} catch (ClassNotFoundException e) {e.printStackTrace();Log.e("My", "没发现privacy.json里面的className: " + className);return;}DexposedBridge.findAndHookMethod(clazz, method, new XC_MethodHook() {@Overrideprotected void beforeHookedMethod(MethodHookParam param) throws Throwable {super.beforeHookedMethod(param);Log.e("My", "beforeHookedMethod: this:" + param.thisObject, new RuntimeException("stack"));}@Overrideprotected void afterHookedMethod(MethodHookParam param) throws Throwable {super.afterHookedMethod(param);}});}private static String getJson(InputStream is) {StringBuilder sb = new StringBuilder();try {BufferedReader reader = new BufferedReader(new InputStreamReader(is));String s;while ((s = reader.readLine()) != null) {sb.append(s);sb.append("\n");}reader.close();} catch (IOException e) {e.printStackTrace();}return sb.toString();}public static class Privacy {private ArrayList<PrivacyMethod> methods;}public static class PrivacyMethod {String className;String method;}
}

四、监听调用

在你的Application的onCreate方法的super.onCreate()下一行代码打上MyHook.initPrivacy(this)。

class App : MultiDexApplication() { override fun onCreate() {super.onCreate()MyHook.initPrivacy(this)// ...}
}

这样你就可以监听到所有调用被监听方法的地方了。

五、查看监听反馈

我们先看MyHook中的下面这句代码:

Log.e("My", "beforeHookedMethod: this:" + param.thisObject, new RuntimeException("stack"));

这句代码的意思就是,在app的业务代码中,如果有地方调用 TelephonyManager.getDeviceId 或getImei,都会被epic的beforeHookedMethod拦截到,我们只需要在beforeHookedMethod打印出堆栈,即可看到是谁调用的。打印堆栈也很简单,我们就让他抛出一个异常即可在LogCat中看到。

六、@#¥%……&*

说个秘密:这个思路我是从App 隐私合规代码排查思路!获得的,只不过我把坑都列出来了,这样一来,小伙子们只要原原本本按照我这个步骤就可以搞定了。

检查 “同意用户隐私” 之前的隐私代码调用(epic > DexposedBridge)相关推荐

  1. 苹果 M1 单核性能勇超 Intel 11 代 i7;经纬张颖:用户增长与保护隐私不矛盾;阿里云盘正式公测 | EA周报

    EA周报 2021年3月26日 每个星期7分钟,元宝带你喝一杯IT人的浓缩咖啡,了解天下事.掌握IT核心技术. 周报看点 1.6 名黑客因盗取区块链货币被抓,涉案 1450 万 2.2020 年,腾讯 ...

  2. 苹果手机隐私分析数据是什么_苹果公司以用户为中心的隐私保护方法能教给我们什么?

    苹果手机隐私分析数据是什么 重点 (Top highlight) Moving beyond the rollercoaster of excitement and controversy Apple ...

  3. 个性化广告的未来:通过隐私计算技术实现用户个人信息及隐私全生命周期保护

    2022年6月20日,<财经>商业治理研究院与中国社科院大学互联网法治研究中心联合发布了<个性化广告合规发展研究报告--从个人信息保护角度出发>(以下称<报告>). ...

  4. ios获取新数据要不要关_100%安卓APP都在获取用户隐私,网络隐私进入深入区

    (图片来源:全景视觉) 经济观察网 记者 任晓宁 "很多时候用户对自己的隐私是麻木的,"腾讯社会研究中心总监王晓冰去年开始与DCCI一块合作做互联网数据隐私报告,今年1月底的报告发 ...

  5. HomeKit、米家、智汀智能家居应该如何确保用户的安全和隐私

    智能家居行业发展迅速,各类智能家居设备在一点一点的步入我们的家庭中. 但智能家居设备毕竟是物联网设备,在网络安全和隐私泄漏方面,大家还是存有疑惑的,人们的担忧开始浮出水面.由于过度依赖云基础设施和互联 ...

  6. Android底层隐私数据,100%安卓APP都在获取用户隐私,网络隐私进入深入区

    原标题:100%安卓APP都在获取用户隐私,网络隐私进入深入区 (图片来源:全景视觉) 经济观察网 记者 任晓宁"很多时候用户对自己的隐私是麻木的,"腾讯社会研究中心总监王晓冰去年 ...

  7. 【Google Play】Android 应用隐私政策 ( 生成隐私政策 | HTML 隐私政策模板 | Markdown 隐私政策模板 )

    文章目录 一.生成隐私政策 二.HTML 隐私政策模板 三.Markdown 隐私政策模板 一.生成隐私政策 推荐使用 https://toolbox.yolo.blue/#/privacy-poli ...

  8. 隐私保护与隐私计算研讨会 | 余维仁:大数据时代下需要各界更新对个人隐私保护的固有认识

    8月13日下午,由深圳市信息服务业区块链协会.陀螺研究院.矩阵元主办,中国生物识别与计算机视觉科技创新产业联盟.金砖国家未来网络研究院中国分院.中国船舶综合技术经济研究院.深圳市人工智能产业协会.深圳 ...

  9. 《三国塔防游戏》隐私政策》隐私政策

    三国塔防游戏尊重和保护利用用户的隐私所有的服务.为了向您提供更准确,更人性化的服务,将三国塔防游戏使用和披露按照本隐私政策您的个人信息. 但是三国塔防游戏将是一个高度的勤勉,审慎义务对待这些信息.除本 ...

  10. 微信小程序获取用户收货地址 完整代码

    微信小程序开发交流qq群   173683895    承接微信小程序开发.扫码加微信. 获取用户收货地址需要用户点击授权,所以有两种情况,确认授权.取消授权. 情况一,用户第一次访问用户地址授权,并 ...

最新文章

  1. AIX下镜像制作与取消,更换硬盘
  2. ifelse语句是否必须以else结尾?
  3. 常用打开新页面的方法
  4. .NET Core 2.0 Preview2 发布汇总
  5. HTML如何添加锚点,总结到位
  6. ITU衡量信息社会报告:我国ICT发展指数进入亚太前十
  7. gulp html页面路径,通过gulp-connect部署静态页面,html页面中include路径无法get!
  8. Box(-and-Whisker) Plot SPSS and Excel 箱图学习
  9. oracle regexp_instr,Oracle REGEXP_INSTR 用法
  10. selenium无头浏览器
  11. 高考方向计算机基础试题题库,计算机基础考试题库 计算机基础考试题库(含答案).doc...
  12. 牛人搜集的常用的资源类网站及68个各类资源网站汇总
  13. Testin云测:深耕企业应用服务
  14. 2010南非世界杯32强手绘海报
  15. 深度Linux怎样关闭休眠,deepin如何休眠,
  16. 大数据分析服务器硬件配置如何选择
  17. 古筝d调变降e调怎么办_古筝各个调式转调详细解读
  18. 三菱GX Developer+GX Simulator进行仿真调试
  19. C++初阶学习————二叉树进阶(二叉搜索树)
  20. python anaconda下载包_anaconda python 2.7

热门文章

  1. VMware 单机(伪分布式)安装方式
  2. 融云携手普元信息为国家部级单位打造协同办公平台
  3. 群体的一般特征---(群体心理学习之一)
  4. STM32开发——感应垃圾桶(舵机、超声波测距、振动检测)
  5. 学生用计算机如何清除,学生计算器怎么去掉d
  6. 分布式任务调度平台SIA-TASK的架构设计与运行流程
  7. 查找游戏里数据存放的内存位置
  8. log4jdbc日志框架
  9. 优梵艺术完成近亿元A轮融资,打造时尚家具品牌
  10. 光纤对接的模场失配损耗计算