首页 > 其他分享 >非SDK接口自动化检测工具--veridex

非SDK接口自动化检测工具--veridex

时间:2022-11-15 16:31:16浏览次数:62  
标签:veridex -- max 接口 API greylist Android 检测工具 SDK


前言

在Android P版本,Google对非SDK接口增加了管控。

SDK接口指的是Android官方开发文档中声明的方法,即​​文档地址​​ 中所能查询到的API,除了这些,其他的API都是非SDK接口

​官网:针对非 SDK 接口的限制​

非SDK接口分类

随着每个 Android 版本的发布,会有更多非 SDK 接口受到限制。

为最大程度地降低非 SDK 使用限制对开发工作流的影响,我们将非 SDK 接口分成了几个名单,这些名单界定了非 SDK 接口使用限制的严格程度(取决于应用的目标 API 级别)。下表介绍了这些名单:

名单

说明

屏蔽名单 (​​blacklist​​)

无论应用的​​目标 API 级别​​​是什么,您都无法使用的非 SDK 接口。 如果您的应用尝试访问其中任何一个接口,系统就会​​抛出错误​​。

有条件屏蔽 (​​greylist-max-x​​)

从 Android 9(API 级别 28)开始,当有应用以该 API 级别为目标平台时,我们会在每个 API 级别分别限制某些非 SDK 接口。这些名单会以应用无法再访问该名单中的非 SDK 接口之前可以作为目标平台的最高 API 级别 (​​max-target-x​​​) 进行标记。例如,在 Android Pie 中未被屏蔽、但现在已被 Android 10 屏蔽的非 SDK 接口会列入 ​​max-target-p​​​ (​​greylist-max-p​​​) 名单,其中的“p”表示 Pie 或 Android 9(API 级别 28)。如果您的应用尝试访问受目标 API 级别限制的接口,系统就会​​将此 API 视为已列入屏蔽名单​​。

不支持 (​​greylist​​)

当前不受限制且您的应用可以使用的非 SDK 接口。 但请注意,这些接口不受支持,可能会在不另行通知的情况下随时发生更改。预计这些接口在未来的 Android 版本中会被有条件地屏蔽,并列在 ​​max-target-x​​ 名单中。

SDK (​​whitelist​​)

已在 Android 框架​​软件包索引​​中正式记录、受支持并且可以自由使用的接口。

  • ​greylist​​ :不支持,可以正常使用;
  • ​blacklist​​ :无论什么版本的手机系统,使用这些api,系统将会抛出异常;
  • ​greylist-max-o​​ :受限制的灰名单,APP运行在 版本<=8.0的系统里 可以正常访问,targetSDK>8.0且运行在>8.0的手机会抛出异常;
  • ​greylist-max-p​​ :受限制的灰名单,APP运行在 版本<=9.0的系统里 可以正常访问,targetSDK>9.0且运行在>9.0的手机会抛出异常;
  • ​greylist-max-q​​ :受限制的灰名单,受限制的灰名单。APP运行在 版本<=10.0的系统里 可以正常访问,targetSDK>10.0且运行在>10.0的手机会抛出异常;

使用 veridex 工具进行测试

Google提供了一个静态检测工具veridex​​下载地址 ​

您还可以在 APK 上运行静态分析工具 veridex。veridex 工具会扫描 APK 的整个代码库(包括所有第三方库),并报告发现的所有使用非 SDK 接口的行为。

veridex 工具存在以下局限性:

  • 它无法检测到通过 JNI 实现的调用。
  • 它只能检测到一部分通过反射实现的调用。
  • 它对非活动代码路径的分析仅限于 API 级别的检查。
  • 它只能在支持 SSE4.2 和 POPCNT 指令的机器上运行。

以上内容均来自官网的文档翻译。

实测结果:

非SDK接口自动化检测工具--veridex_ide

看到输出的结果​​unsupported​​​ 、​​blocked​​​ 、​​max-target-x​​​。是文档过期了,还是我的 ​​veridex​​ 工具版本太旧了,网上找了几个其他版本输出的都是这个结果。

继续在官网找了找其他说明,在一篇​​https://developer.android.com/about/versions/10/non-sdk-q​​​文章中看到了​​max-target-x​​相关的说明。

非SDK接口自动化检测工具--veridex_抛出异常_02

​blacklist​​​ == ​​blocked​​ :无论什么版本的手机系统,使用这些api,系统将会抛出异常;

​greylist​​​ == ​​unsupported​​ :不支持,但可以正常使用;

​greylist-max-x​​​ == ​​max-target-x​​ :APP运行在 版本<=x的系统里 可以正常访问,targetSDK>x且运行在>x的手机会抛出异常;

找​​max-gerget-0​​的case分析一下:

#37: Reflection max-target-o Landroid/content/pm/ActivityInfo;->isFixedOrientation use(s):
Lcom/xxx/xxx/xxx/j;->b(Landroid/app/Activity;)Z
#84: Reflection max-target-o Landroid/view/View;->sAcceptZeroSizeDragShadow use(s):
Lcom/xxx/xxx/xxx/a/c;->M(Landroid/widget/TextView;)V
  • ​ActivityInfo#isFixedOrientation​
  • ​View#sAcceptZeroSizeDragShadow​

以上两个方法或者变量可以在​​targetSDK<=27​​的时候使用,但如果升级targetSDK就会抛出异常。

非SDK接口自动化检测工具--veridex_ide_03

最好寻找相关替代的api进行使用,否则在使用的时候进行异常捕获。

文章到这里就全部讲述完啦,若有其他需要交流的可以留言哦~!~!


标签:veridex,--,max,接口,API,greylist,Android,检测工具,SDK
From: https://blog.51cto.com/u_15758326/5853183

相关文章

  • MySQL驱动表和被驱动表说明
    老男孩Linux运维MySQL中级DBA-第12章-MySQL驱动表和被驱动表说明-补#驱动表和被驱动表####1.什么是驱动表和被驱动表?在join连接查询中,驱动表在SQL语句执行的过程中总......
  • 异步pyppeteer:并发运行多个浏览器并收集结果
    网上代码一大抄,居然网上讲pyppeteer异步的一大推,但运行起来都是await,并没有讲如何同时并发运行十几二个pyppeteer页面,那有个卵用呀,还不如开个多进程呢。话不多说,上代码。......
  • 第十四章学习笔记
    第十四章MySQL数据库系统1.MySQL介绍MySQL是一个关系数据库系统在关系数据库中,数据存储在表中。每个表由多个行和列组成。表中的数据相互关联。表也可能与其他表有关......
  • [Python]学习笔记之-正则表达式
           在使用Python做文件处理时,经常需要使用到匹配、搜索功能,这就离不开一个核心的知识:正则表达式。正则表达式(RegularExpression)描述一种字符串匹配的模式(pat......
  • What's the difference between "Request Payload" vs "Form Data" as seen in C
      TheRequestPayload-ortobemoreprecise: payloadbodyofaHTTPRequestisthedatanormallysendbya POSTorPUTRequest.It'sthepartafter......
  • Java注解
    1.@PostConstruct可作用在方法上。在项目启动的时候执行该方法,也可以理解为在spring容器初始化的时候执行该方法。可作为一些数据的常规化加载,比如数据字典。2.......
  • el-menu 菜单不高亮
    问题在部分页面el-menu的菜单栏不会高亮。分析初步分析是default-active的默认路径和当前页面的路由地址不同。打印下来果然——默认激活的路径中把中文转码了。......
  • CSS左侧固定 右侧自适应方案
    1.浮动将左边固定区域设置浮动,右边margin设置为左边固定div的宽度html代码 <div class="left"></div> <div class="right"></div>css代码.left{width:200px;......
  • MySQL、Kafka(含zookeeper)、Redis的docker-composer文件
    以下docker-composer文件仅用于开发环境,快速搭建原型使用,生产环境,请进行针对性设置。MySQLversion:'3.1'services:db:image:mysql:8.0.28command:--d......
  • Python第10章 实例 实战
    一、实验目的和要求文件操作二、实验过程 通过pycharm进行代码编辑三、实验过程敲代码四、代码及其结果实例print("\n","="*10,"蚂蚁庄园动态","="*......