您好!
欢迎来到京东云开发者社区
登录
首页
博文
课程
大赛
工具
用户中心
开源
首页
博文
课程
大赛
工具
开源
更多
用户中心
开发者社区
>
博文
>
借助Xposed辅助检测安卓App隐私相关合规问题
分享
打开微信扫码分享
点击前往QQ分享
点击前往微博分享
点击复制链接
借助Xposed辅助检测安卓App隐私相关合规问题
京麦研发团队
2021-07-07
IP归属:未知
445400浏览
Android
    先说一下背景,2019年1月25日,中央wangxinban、gongxinbu、gonganbu、shichangjianguanzongju四部门联合发布《关于开展App违法违规收集使用个人信息专项治理的公告》(以下简称《公告》)。为落实《公告》相关部署,受四部门委托,全国信息安全标准化技术委员会、中国消费者协会、中国互联网协会、中国网络空间安全协会成立App违法违规收集使用个人信息专项治理工作组(以下简称“App专项治理工作组”),具体推动App违法违规收集使用个人信息评估工作。     正因为上述原因,所以现在需要对移动端应用内获取个人设备信息的情况进行排查。先说一下哪些属于获取个人设备信息的情况,1、获取MAC地址;2、获取AndroidId;3、获取IMSI信息;4、获取任务列表;5、获取剪切板信息。     我们的Android端应用也被三方检测机构检测出以下问题: 1. 通过检测,当前app存在用户点击同意隐私政策前获取用户MAC地址和任务列表的行为。 2. 通过检测,App存在频繁采集任务列表信息(1分钟内4次)、剪切板(1分钟内3次)、Androidid(1分钟内5次)、imsi(1分钟内3次)、mac地址(1分钟10次)的行为。     由于项目内我们自身的代码部分是可以直接排查出哪些地方是获取上述个人设备信息的,该整改的地方也都整改了,然而项目中引入的很多第三方SDK内使用的情况我们就不得而知了。除了挨个去联系第三方SDK的提供者,那只有通过一些技术手段来获得我们想要的信息了。     这里要想知道SDK内是否存在获取个人设备信息的情况,就应该想办法知道获取这些个人设备信息的系统方法被调用的情况,这就是我们现在的需求。现有技术可以快速实现上述需求的是一种是反射加动态代理的方式,第二种是Xposed框架。     说一下这两种方式的原理,第一种反射/动态代理方式,我们可以通过虚拟机提供的标准编程接口,来帮助我们访问到private属性并修改,以及直接动态的构造出代理对象,来操控这一代理对象,从而实现hook的过程;第二种是Xposed框架,Xposed框架是由rovo89开发的一款针对Android平台的动态劫持项目,是一款可以在不修改APK的情况下影响程序运行(修改系统)的框架服务,通过替换/system/bin/app_process 程序控制 zygote 进程,从而使 app_process 在启动过程中加载XposedBridge.jar 这个jar包,从而完成对Zygote进程及其创建的Dalvik虚拟机的劫持,从而达到hook的目的。     由于Xposed需要Root环境,所以这里使用VirtualXposed方案替代。VirtualXposed是一款无需Root直接使用Xposed框架的虚拟工具,它能让 Xposed 框架和模块直接在非 ROOT 环境下运行。     这里我也对以上两种方式进行了简单的对比,分别从hook的时机、是否需要入侵、是否可以hook其他App、以及hook的难度还有是否需要Root进行对比。 ![](//img1.jcloudcs.com/developer.jdcloud.com/5a651f7e-2d2b-4cdc-bf5e-be89b51a531320210707175045.png) 综上对比,我们选择VirtualXposed方式来实现我们的上述需求。     下面开始着手实施借助Xposed辅助检测安卓App隐私相关合规问题,首先是准备工作。你需要一部Android 5.0-10.0的设备(因VirtualXposed目前只支持这个Android版本范围)。然后接下来你就可以进入开发工作了。     第一步:来到VirtualXposed的github地址,下载最新的VirtualXposed应用。附上地址: https://github.com/android-hacker/VirtualXposed 注:最新版本的VirtualXposed 已经支持64位的了,如果你要检测的目标app不支持64位,需要去历史版本里找32位的,不然无法安装你的目标app到VirtualXposed里。     第二步:开发你的Xposed插件 1.项目导入,在app/build.gradle中配置如下信息 ![](//img1.jcloudcs.com/developer.jdcloud.com/0a0cfd21-a200-4eb7-ad06-dcd30c6e560820210707175330.png) 2.在AndroidManifest.xml配置 ![](//img1.jcloudcs.com/developer.jdcloud.com/4c093e0c-3bc4-4642-9f2c-162daa5056c120210707175348.png) 3.创建hook类 这里我们举例调用系统方法的ActivityManager里的getRunningAppProcesses方法。 顺便打印出当前方法所调用过来的堆栈信息,这样我们就可以得知是哪个SDK在调用了。 ![](//img1.jcloudcs.com/developer.jdcloud.com/1a3880b5-561e-46de-b2fd-3bd6c32b850a20210707175501.png) ![](//img1.jcloudcs.com/developer.jdcloud.com/26b611ca-030b-4a87-a58e-5310b76af9ab20210707175433.png) 4.在assets目录下创建xposed_init文件 内容填写为上面的hook类的包名+类名,不需要设定任何文件格式。 以上几步我们就简单创建了一个xposed的插件,这个插件是用来检测目标应用里是否有调用ActivityManager里的getRunningAppProcesses方法,并且会打印出相关的调用堆栈信息,便于我们排查是哪个SDK内部调用的。     第三步,把待检测的目标app和刚开发的Xposed插件安装到VirtualXposed里,类似于把这两个app到这个虚拟机里拷贝一份,然后开启我们的Xposed插件模块,然后重启我们的VirtualXposed,这样我们的插件就生效了。 ![](//img1.jcloudcs.com/developer.jdcloud.com/3c4509e6-a65f-402e-8b28-d1dcb5308f1820210707175631.png) ![](//img1.jcloudcs.com/developer.jdcloud.com/25e8c5a3-6c49-4079-b65d-2c0efa06884820210707175713.png)     第四步,测试阶段 ![](//img1.jcloudcs.com/developer.jdcloud.com/ca65b0df-8868-4022-85aa-1f10d17ee04320210707175726.png)     可以很明显地从我们的日志里发现我们要检查的这个ActivityManager里的getRunningAppProcesses方法是在我们app使用的什么时机被调用,并且被谁调用的,堆栈信息都可以看得很明白。     至此我们通过借助Xposed辅助检测我们app里隐私相关合规的问题, 就这样简单的实现了。
原创文章,需联系作者,授权转载
上一篇:Hive 迁移参考方案及测试
下一篇:降低部署人力成本80%!京东私有化环境快速部署平台罗汉堂探索与实践
相关文章
【技术干货】企业级扫描平台EOS关于JS扫描落地与实践!
京东mPaaS平台之Android组件化系统私有化部署改造实践!
【技术干货】企业级扫描平台EOS-Jenkins集群进阶之路
京麦研发团队
文章数
11
阅读量
69603
作者其他文章
01
京麦客户端组件化设计与实践
详细阐述了京麦windows客户端程序组件化的架构设计与实现
01
深度解析移动端各技术栈
移动端
01
Widget开发实践
Widget开发实践
01
借助Xposed辅助检测安卓App隐私相关合规问题
借助Xposed辅助检测安卓App隐私相关合规问题
京麦研发团队
文章数
11
阅读量
69603
作者其他文章
01
京麦客户端组件化设计与实践
01
深度解析移动端各技术栈
01
Widget开发实践
添加企业微信
获取1V1专业服务
扫码关注
京东云开发者公众号