1.1APP 违规收集使用个人信息现象频发
1.2个人信息定义APP可直接访问信息
1.3APP 隐私合规检测工具
2.1Demo 演示
图1,隐私 Demo 项目演示
图2,Demo 个人信息收集记录
3.1Privacy Sentry 技术思路
图3,Privacy Sentry 技术思路
所以这里面有个很重要的概念,就是 ASM 字节码修改。关于ASM 字节码修改,一起来看下一小节。
根据 ASM 官网的介绍,ASM 是一款通用的JAVA 平台字节码修改和分析框架。ASM 能够被用于直接在二进制层面修改现有的或生成新的class 文件。ASM还提供了一些常用的字节码转换和分析算法,可以用于构建自定义、复杂的转换和分析工具。当然,ASM 还有其高性能、使用简单等特点,使其非常适合在动态系统或动态分析中使用。ASM 由于上述的功能和特点,被众多开发者用于在 JAVA 应用程序中进行埋点、插桩和对控件的监控。
ASM 的核心包是 org.objectweb.asm,该包定义了ASM Visitor API,提供了ClassReader和ClassWriter类来读写编译后的Java class文件。ClassReader 用于访问class 文件的结构,ClassWriter可以用来生成新的 class 文件。
前文提到的 ASM 技术是用于字节码修改的框架,那么应该在何处以及何时进行字节码修改还是个问题,所以需要引入Transform。Gradle 1.5.0 以后开始提供 Transform API, Transform 是提供开发者在项目构建时期用来修改 class 文件的一套标准 API,用于将输入的 class文件转换为目标字节码文件。用户可以自定义 Tranform 来实现自己的字节码处理逻辑。
Transform 提供了获取所有class 文件集合的方法,所以可以在 Gradle编译过程中,引入 Transform, 让 Transform 接管从 class 文件生成到目标字节码的工作,接管以后,就能够获取到所有的 class 文件,而再通过 ASM 字节码修改,就能够完成 Hook 操作。
privacy-annotation 是对 java.lang.annotation 的一个封装。其存在的意思主要是为了给需要 Hook 的function 增加注解,对不同的属性构建了不同的注解类,对于需要注解的类命名为 PrivacyClassProxy,对于需要注解的method 命名为 PrivacyMethodProxy。
plugin-sentry 的工作主要使用 Gradle 编译时插件 Tranform 的运用,首先使用 Transform 接管 class 文件转目标字节码的工作,然后使用 ASM 的ClassReader 解析class 文件的结构,收集带有privacy-annotation注解的类和 method。再次使用Transform,运用 ClassReader 修改字节码。
privacy-proxy 主要工作是,定义 hook 规则以及设置代理方法。即需要 hook 的 method,只需要在在privacy-proxy 中增加,并且设定其代理方法即可。针对个人信息或设备信息的收集主要包括三大类,第一类是获取设备信息 API的拦截PrivacyProxyCall类,一般需要拦截的 API有:getRunningTasks(获取当前运行的任务)、getRecentTasks(获取最近运行的任务)、getInstalledPackages(获取设备已安全程序列表)、getPrimaryClip(获取剪贴板内容)、getSSID(获取 wifi名称)、getDeviceId(获取设备 id)、getImei(获取设备 IMEI )、getMacAddress(获取 MAC 地址)等等;第二类是获取用户个人信息,主要是针对联系人,通讯录,日历等等,该类为PrivacyProxyResolver类;第三类是获取设备传感器数据,名为PrivacySensorProxy类。
hook-sentry 是整个程序的业务层代码,主要包括日志管理、调用栈导出管理、各插件的联动管理、检测工具初始化等。
原文始发于微信公众号(SAINTSEC):隐私合规检测工具PrivacySentry分析
- 左青龙
- 微信扫一扫
-
- 右白虎
- 微信扫一扫
-
评论