缘起,一个反侦察能力超强的小程序
今天,好友向我推荐了一款小游戏,建议我扒一下它。我没多想就打开了,然后着实被它恶心到了。话不多说先上录像:
点击分享的小程序后,会自动跳转到第二个小程序,第二个小程序一闪而过直接进入一款小游戏。
仅自动跳转还不够狠,如果你使用的iPhone,你可以逐次关闭这三个小程序回到聊天界面。但如果你是安卓,抱歉,你将被卡在第二和第三个小程序之间,进入无限的关闭-自动打开循环:
是的,你退不出来了!不管你的手多快,你都无法正常退回到聊天界面,它会无限让你访问这个小游戏!
当你使用彻底关闭微信的方式,回到正常状态,你想到第一件事应该是举报它。安卓端目前还没发现只进入第一个小程序方法,所以举报暂时无法实现;在iPhone端通过依次退出,退回到第一个小程序后点击左上角的举报进入投诉界面时,系统提示我们要上传一张证截图:
但是当你回到小程序界面准备截图取证时,这个小程序自动关掉了!
它自动关掉了!
关掉了!
如果你有耐心,尝试再次打开它,你会发现,你!再!也!打!不!开!了!
就问你,服不服!
这位小程序开发者绝对是行家,具有非常强的反侦查能力!他从一开始就知道这会惹怒你,遭到你的举报,所在他在举报的关键环节加入了反侦察技术,让你在案发现场找不到任何证据!
套路分析
这种野路子喜哥最喜欢了。我们先简单梳理一下它的实现逻辑,整个流程涉及到三个小程序,我们可以在小程序历史记录页找到他们:
我们从后往前依次访问他们,看看“无限循环”这个操作是从哪一步开始的。
游戏没有问题
我在小程序历史列表直接打开这个投篮小游戏(序号3),然后点击退出,发现可以正常退出的,截图也正常。说明恶心不在于小游戏,它只是个最终呈现。那说明无限打开这个操作有可能是它上家(序号2)那个导航小程序造成的。
导航小程序也没有问题
同样从小程序历史列表直接打开导航小程序(序号2),打开它后没有自动跳转到小游戏,可以正常关闭,并且截图也不会触发自动关闭。那么也就是说在正常情况下,它也是没有问题的。只有被特殊环境“刺激”了,才会激发出它疯狂的状态。
所以问题肯定出在第一个小程序身上了。
第一个小程序唤起了其他小程序的疯狂
由于之前截图被小程序“记录在案”,我们需要清理一下缓存才能再次打开这个恶心的小程序。清掉历史记录后,打开这个小程序,之前疯狂无限循环再次复现……
扒代码
既然你这么作,就不要怪我扒代码了。
我通过特殊的渠道,扒出了这个计算器小程序的JS源代码。大概了解了它的基本实现逻辑:
在onShow或者onLoad函数中使用wx.navigateToMiniProgram接口,直接跳转到导航小程序;
跳转的同时在wx.navigateToMiniProgram接口的extraData参数中传递变量给导航小程序;
本来正常的导航小程序接收到通过extraData传递的参数后,激活隐藏在它代码里的自动跳转脚本,进入疯狂无限循环状态。
第一个小程序的部分JS代码:
至于截图小程序自动关闭功能,可以通过wx.onUserCaptureScreen监听手机的截屏事件,一旦用户截屏,则将该路径关闭即可。
代码如下:
问题和反思
1. 盈利空间很大
目前业内小程序广告有两种计费方式,分别为CPM和CPC,参考价格如下图:
回头再想想,如果你的手机是安卓手机,被困在无限循环里的那几次点击,就可以为那个导航小程序赚到2-5元钱。如果这套恶心的小程序组合被分享到一个100人的活跃群聊中,按照10%的点开概率,他将至少盈利20-50元。
这个导航小程序中目前已有20个小游戏在展示,该小程序还绑定有20+个公众号。
这么大的盈利空间,肯定不敢独享,这样的小程序不只这一个。好友还给我分享了另一个同样具有这等神奇功能的小程序。它没有名字,头像是头脑王者,进入小程序有一个明显的button引导用户点击。一旦你点击了,你将进入同样的无限循环……
这个也更野蛮。点击后会进行更多次跳转,以至于你都不知道你访问了哪些小程序!并且,无限循环是嵌套的,这个button出现在每一个你进入的小程序里面。
2.没有规则约束
在小程序关联规则方面,通过使用“侨联”的方式,可实现大量小程序之间的跳转。
通过本文曝光的小程序跳转的方式,理论上只要你愿意,你可以在所有的小程序中随意跳转。
官方运营文档中,仅做了“不得”说明,但并未从实现方面给予约束。讲道理,申请获取userInfo的时候必须弹窗,为什么跳转小程序就可以直接越过用户许可呢?
3.审核能力不足
用户体验如此之差的小程序能通过审核,一方面是开发者的诡计多端,另一方面也显示了小程序目前的审核团队能力的欠缺。
据我所了解的,有很多小程序使用“只给审核团队展示基本功能,上线后再调用完整功能”的方式绕过审核。讲道理,这种过审方式有些擦边球,但它确实有效!首先,如此大量的审核工作去雇佣具有代码审核能力的员工,成本是不可估量的;另一方面,对代码逐行审核甚至仅是功能代码审核也是不现实的。所以导致在小程序审核时,审核人员能查看一下基本功能是否完备、有没有红包之类的违规功能也就算敬业了。
于是,这种“核心功能”被隐藏的计算器,就可以轻松过审了。
4.要不让开发语言背锅?
诚然,官方肯定没有足够精力与广大的程序员们斗智斗勇,但是对你们自创语言的控制力最起码要展示出来吧?这种强行跳转的垃圾如果也管不了的话,和二十年前病毒、木马满天飞windows98有什么区别?难道要在微信小程序“系统”里开发个360帮你们“杀毒”么?
话说回来了,让安卓陷入无限循环的bug,在iPhone端竟然啥事也没有,要不然小程序改用swift开发得了。