momo非sdk接口限制失效
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了momo非sdk接口限制失效相关的知识,希望对你有一定的参考价值。
本篇动态主要解决Momo中以下几个提示:权限系统异常(+)、包管理服务异常、存在Magisk或TWRP等可疑文件、非SDK接口的限制失效、已开启调试模式(+)。
以上提示中后面带“+”的经测试会被某些(银行类金融类游戏类)应用检测,不带“+”的未发现有(银行类金融类游戏类)应用会检测。所以是否解决Momo的以上提示,由你自己决定。如果你想达到我配图的效果,你可以花一些时间成本来学习,但我不觉得这样做很有意义。我只建议你去解决以上提示中后面带“+”的,不带“+”的不用解决。
一、权限系统异常(+)、包管理服务异常
Momo提示“权限系统异常、包管理服务异常”,是因为你安装了核心破解软件或者你是官改系统第三方系统。
解决方法:打开核心破解,关闭“禁用软件包管理器签名验证”选项,重启手机。等开机后打开Momo,就看不到Momo提示“权限系统异常或包管理服务异常”了。如果还是不行,卸载核心破解软件,重启手机再试试。
如果你是官改系统第三方系统或者未安装核心破解却提示“权限系统异常(+)、包管理服务异常”,那基本上是没有解决方法了。虽然有实验性的解决方法,上手难度很高不做介绍。
二、已开启调试模式(+)
已开启调试模式,是因为你在开发者选项里打开了“USB调试”,你去开发者选项里关闭“USB调试”就不会提示了。如果你不会进开发者选项,可以百度你机型的品牌。比如你是小米10手机,你可以百度搜索关键句“小米手机如何进入开发者选项”。
如果你关闭“USB调试”后,Momo还是提示“已开启调试模式”,你可以强制结束Momo的后台运行再打开Momo试试。如果依旧不行,重启手机再试试。
三、存在Magisk或TWRP等可疑文件
“存在Magisk或TWRP特定文件”这个提示,是因为你刷了第三方recovery TWRP,TWRP会在你手机的内部存储生成了一个名叫“TWRP”的文件夹。
解决方法:把手机内部存储存在的TWRP文件夹重命名,比如重命名为TWRP1就好了。
如果你重命名TWRP文件夹后,Momo还是提示“存在Magisk或TWRP特定文件”,你可以强制结束Momo的后台运行再打开Momo试试。
四、非SDK接口的限制失效
“非SDK接口的限制失效”这个提示,是因为你使用了FakeLoaction虚拟定位软件。
解决方法:本篇教程置顶评论的链接里下载一个名为“一键解决非SDK接口的限制失效”的zip压缩包,下载后用MT管理器解压一下,里面有使用教程和解决“非SDK接口的限制失效”的sh脚本。用MT管理器以root执行里面的sh脚本,可解决Momo提示“非SDK接口的限制失效”。
PS:用sh脚本解决“非SDK接口的限制失效”之前,第一步要先卸载FakeLoaction虚拟定位软件。因为就是它,导致Momo检测出“非SDK接口的限制失效”的。且你卸载FakeLoaction虚拟定位以后,你不可以再次安装使用它,否则还会出现“非SDK接口的限制失效”。

解决“非SDK接口的限制失效”的zip压缩包在我这篇 https://www.coolapk.com/feed/42265274?shareKey=OTAyZmQ5NDRiYmRlNjNjMTNhODU~&shareUid=24618613&shareFrom=com.coolapk.market_13.0-beta4 动态的链接里可下载。 参考技术A momo非sdk接口限制失效
众所周知,android P 引入了针对非 SDK 接口(俗称为隐藏API)的使用限制。这是继 Android N上针对 NDK 中私有库的链接限制之后的又一次重大调整。从今以后,不论是native层的NDK还是 Java层的SDK,我们只能使用Google提供的、公开的标准接口。这对开发者以及用户乃至整个Android生态,当然是一件好事。但这也同时意味着Android上的各种黑科技有可能会逐渐走向消亡。
作为一个有追求的开发者,我们既要尊重并遵守规则,也要有能力在必要的时候突破规则的束缚,带着镣铐跳舞。恰好最近有人反馈 VirtualXposed 在 Android P上无法运行,那么今天就来探讨一下,如何突破Android P上针对非SDK接口调用的限制。
系统是如何实现这个限制的?
知己知彼,百战不殆。既然我们想要突破这个限制,自然先得弄清楚,系统是如何给我们施加这个限制的。
文档 中说,通过反射或者JNI访问非公开接口时会触发警告/异常等,那么不妨跟踪一下反射的流程,看看系统到底在哪一步做的限制(以下的源码分析大可以走马观花的看一下,需要的时候自己再仔细看)。我们从 java.lang.Class.getDeclaredMethod(String) 看起,这个方法在Java层最终调用到了 getDeclaredMethodInternal 这个native方法,看一下这个方法的源码:
注意那个 ShouldBlockAccessToMember 调用了吗?如果它返回false,那么直接返回nullptr,上层就会抛 NoSuchMethodXXX 异常;也就触发系统的限制了。于是我们继续跟踪这个方法,这个方法的实现在 java_lang_Class.cc,源码如下:
毫无疑问,我们应该继续看 hidden_api.cc 里面的 GetMemberAction方法 :
可以看到,关键来了。此方法有三个return语句,如果我们能干涉这几个语句的返回值,那么就能影响到系统对隐藏API的判断;进而欺骗系统,绕过限制。
应对之策
在分析这三个条件之前,我们再思考一下,在调用一个方法/获取一个成员的时候,除了反射(JNI也算)就没有别的办法了吗?看起来系统只是把反射这条路堵死了,那如果我不走这条路呢?
首先,很显然,除了反射,我们还能 参考技术B 解决方法:把手机内部存储存在的TWRP文件夹重命名,比如重命名为TWRP1就好了。 如果你重命名TWRP文件夹后,Momo还是提示“存在Magisk或TWRP特定文件”,你可以强制结束Momo的后台运行再打开Momo试试。 四、非SDK接口的限制失效 “非SDK接口的限制失效”这个提示,是因为你使用了FakeLoaction虚拟定位软件。 解决方法:本篇教程置顶评论的链接里下载一个名为“一键解决非SDK接口的限制失效”的zip压缩包,下载后用MT管理器解压一下,里面有使用教程和解决“非SDK接口的限制失效”的sh脚本。 用MT管理器以root执行里面的sh脚本,可解决Momo提示“非SDK接口的限制失效”。 PS:用sh脚本解决“非SDK接口的限制失效”之前,第一步要先卸载FakeLoaction虚拟定位软件。 因为就是它,导致Momo检测出“非SDK接口的限制失效”的。 且你卸载FakeLoaction虚拟定位以后,你不可以再次安装使用它,否则还会出现“非SDK接口的限制失效”。
非SDK接口自动化检测工具--veridex
前言
在Android P版本,Google对非SDK接口增加了管控。
SDK接口指的是Android官方开发文档中声明的方法,即文档地址 中所能查询到的API,除了这些,其他的API都是非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 指令的机器上运行。
以上内容均来自官网的文档翻译。
实测结果:
看到输出的结果unsupported
、blocked
、max-target-x
。是文档过期了,还是我的 veridex
工具版本太旧了,网上找了几个其他版本输出的都是这个结果。
继续在官网找了找其他说明,在一篇https://developer.android.com/about/versions/10/non-sdk-q文章中看到了max-target-x
相关的说明。
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就会抛出异常。
最好寻找相关替代的api进行使用,否则在使用的时候进行异常捕获。
文章到这里就全部讲述完啦,若有其他需要交流的可以留言哦~!~!
以上是关于momo非sdk接口限制失效的主要内容,如果未能解决你的问题,请参考以下文章