MALWARE的解决思路

文摘   2024-09-19 14:16   广东  

免责声明:以下所有内容均为民间偏方,不保证正确or有效。

最近很多同业碰到了MALWARE政策导致的App Suspended,其中包括不少百万/千万安装量的包。今天主要跟大家梳理一下这个问题产生的原因,以及解决的思路。

背景:Play Policy的变量面

最近几个月Play升级了风控策略和处罚尺度,以前大家心照不宣的“保主包”政策已经失效

背景:Play Policy的政策面 - AppList

Play很早(约2020年,参考blog:https://medium.com/androiddevelopers/package-visibility-in-android-11-cc857f221cd9)就意识到了获取AppList的功能被各个应用滥用的问题,所以从安卓11(2021年)起就有意识地在修复这个漏洞。(回顾历史:Android11隐私更新 —— 你可能会踩的坑

On Android 10 and earlier, apps could query the full list of installed apps on the system using methods like queryIntentActivities(). In most cases, this is far broader access than is necessary for an app to implement its functionality.

With our ongoing focus on privacy, we’re introducing changes on how apps can query and interact with other installed apps on the same device on Android 11. In particular, we’re bringing better scoped access to the list of apps installed on a given device.

To provide better accountability for access to installed apps on a device, apps targeting Android 11 (API level 30) will see a filtered list of installed apps by default.

In order to access a broader list of installed apps, an app can specify information about apps they need to query and interact with directly. This can be done by adding a <queries> element in the Android manifest.

根据那年安卓11的政策,Play认为一个人的手机上的AppList属于他的隐私,但是允许我们通过声明<queries>继续拿。


接下来时间到了2022年的4月,Play又进一步明确了AppList获取的问题。如果你的App的核心功能是“启动、搜索或与别的App进行交互”(比如应用市场),那么你可以使用Broad App Visibility(并且需要声明QUERY_ALL_PACKAGES),如果不是的话你需要使用Limited App Visibility在这个时候,大部分甲方还是通过去声明QUERY_ALL_PACKAGES来使用Broad App Visibility方案拿AppList。(回顾历史:GoolgePlayAppList获取政策更新


接下来到了2022年的8月,Play开始对Broad App Visibility下手了。所有的App被要求整改或直接Removed。(回顾历史:薛定谔的QUERY_ALL_PACKAGES

这个时候大家纷纷开始转Less App Visibility方案,Google提供了三种方法::按软件包名称 / 按intent签名 / 按提供程序授权,这之后intent就成了主流的方法。

第一种方式需要我们穷举所有需要监控的App(对于金融品类来说,其实也没有那么多,大概Lending/非Lending各几百个),实现起来有点傻,而且需要维护监控的List。 

第二种方式我们可以通过android.intent.action.MAIN来通过启动器入口来获取App List(参考下图,考虑到有些App是不进应用程序列表的,也就是桌面没有入口,所以下面的category其实可以删,只留action)。


第二种方式有点骚,我不确定是Google特意给留的后门还是没考虑到。这两种方式获取的字段跟QUERY_ALL_PACKAGES一致,该有的字段一个不缺,基本不需要对当前代码做修改。


平稳过了一年多,时间来到了2023年底至2024年初。这段时间很多版本更新因为disclosure的问题失败。经历过修改隐私协议、修改App权限弹窗均无效后,我们通过修改AppList的抓取代码,缩小查询范围解决掉了这个问题,并一直苟活至今。(回顾历史:AppList拒绝的无效方案和有效方案,btw文章里提到的方案已失效,我们现在用的是自己的新方案,你们不用再去找那个方案了)。


背景:Play Policy的政策面 - SMSList & CallLog

Play其实在2019年不允许Lending获取SMS和CallLog了。

但是后来被聪明的同业找到了突破口,目前获取这两个权限的方法主要是蹭了2个Exception


分析

这一批因为Malware被Suspended的App,(不负责任地猜测底层原因如下:

  • AppList(可信度80%):拿的方法有问题,需要缩小获取范围

  • SMSList(可信度10%)

  • SpyLoan报毒(可信度10%)


如果你们也被Suspended了,可以去找AM申诉一下试试,是否可以定位到具体的原因。

友情提示申诉有风险,之前有多个甲方出现过申诉后全球一锅端的先例,这个风险我必须要提前告知。


结论

Suspended后可以直接用同账号上同AppName新包,改一下packagename就可以,不过你最好先解决上一段里面提到的几个问题。

(btw,别找我要AppList的解决方案代码,本方案不对外提供)

出海小黑板
有幸被照亮,也想成为光。