合规检测主要是对隐私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或者堆栈检测就可以了。
如果想要很全面的检测需要在调用前进行声明,那就需要字节码注入和全局搜索方式了。

Logo

网易易盾是国内领先的数字内容风控服务商,依托网易二十余年的先进技术和一线实践经验沉淀,为客户提供专业可靠的安全服务,涵盖内容安全、业务安全、应用安全、安全专家服务四大领域,全方位保障客户业务合规、稳健和安全运营。

更多推荐