Android App 合规检测

文章探讨了合规检测中针对隐私API无声明调用的筛选问题,主要包括启动时和运行时的检测。提到了直接调用和反射调用两种调用方式,并列举了四种检测方案:全局搜索、AOP代码注入、HOOK技术和循环打印调用堆栈。每种方法都有其优缺点,如全局搜索全面但处理三方SDK复杂,HOOK能提供调用堆栈但需root权限。选择哪种方案取决于具体需求,如启动时检测可简化为HOOK或堆栈检测,全面检测则需结合更多技术。
摘要由CSDN通过智能技术生成

合规检测主要是对隐私API的无声明调用的筛选

主要存在于:

启动时
  • 三方SDK的初始化
  • 协议声明前的隐私API调用和权限申请
  • 打开隐私协议对隐私API的调用
运行时
  • 三方/ app 对 隐私API的调用没有包含于协议或者无调用前声明
对隐私API的调用方式主要两种方式
  • 直接调用
  • 反射调用

检测方案:

首先要了解自己需要过滤那些API

使用Android Studio 进行全局搜索
  • 对于自己开发的APP代码可以使用全局搜索的方式
  • 如果包含第三方的SDK那就在无混淆和加固打包后进行反编译,然后再进行全局搜索
  • 对于反射调用的方法也要对关键字进行搜索
    优点:
    反编译后筛选比较全面,基本不会有遗漏。
    缺点:
    这种方案对于app本身的代码容易找到调用堆栈并做出调用方案处理,但是对于三方SDK较为麻烦,复杂的SDK很难找出调用路径
AOP注入代码

编译时使用gradle 插件在编译时进行检测
优点:
这种方案比全局搜索的方式更智能,
缺点:
也不会打印出调用堆栈,毕竟不是运行时

使用HOOK的方式

使用xposed或者frida hook隐私api的调用,并打印出调用堆栈
优点:
可以直接找出对应的调用堆栈做出处理
缺点:
只能在运行时检测,运行过程没有调用的API没法进行检测,无法在调用前进行声明
需要root的手机 或者模拟器,xposed 和 firda 都需要写对应的注入代码

使用循环打印调用堆栈方式

这种和HOOK相似,只是有代码侵入和不侵入的区别,在 application 中 启动一个新线程for循环对当前调用的方法的堆栈进行日志打印,从日志打印中筛选出对隐私api的调用
优点:
相对于Hook方式,代码量相对较少,无需开发插件。
缺点:

  • 检测时死循环可能对性能造成影响
  • 对源代码有侵入,检测完成后测试代码需要移除

三种方式各有优缺点,可根据自己的需求进行选择。
如果只是在启动时进行检测,只需要hook或者堆栈检测就可以了。
如果想要很全面的检测需要在调用前进行声明,那就需要字节码注入和全局搜索方式了。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值