就在最近,很多小伙伴都遇到了一件令人十分头大的事情 —— 一觉醒来微信就被封号。甚至有的小伙伴正着搭公交车,准备微信支付的时候封号提示就这样悄无声息地弹出来,只能默默下车望着公交车远去。这些被封的用户都感觉到莫名其妙,自己平时既没有发送各种不和谐的信息也没有卖假货号,就这么被封了。
那么微信为何要大面积封号?这次的事件对每个用户影响又是什么?
事件原因
从 6 月 15 日开始,深圳市腾讯计算机系统有限公司以「使用微信外挂、非官方客户端或模拟器」为由封禁了微信上的大批用户。综合各个「受害者」的描述可以得出此次封号针对的是:
- 平时微信会封禁的账户类型(诈骗,色情营销,吸粉账号等)。
- 手机上安装了 Xposed 框架并激活了修改微信相关模块的用户。
- 在手机上安装了 Magisk 框架并且激活了 Systemless Xposed 的用户。
- 只在手机上安装了 Xposed 或 Magisk 框架但没有激活的用户。
- 一部分只 ROOT 手机的用户(存疑)和使用越狱后 iOS 的用户。
- 使用手机自带/第三方的微信分身功能同时使用多个微信账户。
- 少部分什么都没装无辜躺枪的 Play 商店版微信用户(一脸懵逼)。
微信每个季度都会定期封禁一批账号,之前这些账号都是「干坏事」的,还包括大批公众号。普通用户很难接触得到,所以不会有什么感觉。而这次封号波及到的普通用户很多,封号之后我们看到很多论坛、群和微博都瞬间爆炸:
微信官方没有给出的明确的理由,很多用户推测是为了在世界杯期间打击利用上面框架/功能来非法球的行为,而其中的重点就是封禁利用恶意 Xposed 模块非法获利的账户。
Xposed 是什么?
先给不知道什么是 Xposed 的派友介绍一下什么是 Xposed。我的文章「关于 Android 7.1 的 Xposed,你想知道的都在这」有全面的介绍,给「太长不看」的派友截取一下关键内容:
Xposed 是一个 Android 平台上的动态劫持框架,通过替换手机上的孵化器 zygote 进程为 Xposed 自带的 zygote,使其在启动过程中加载 XposedBridge.jar,模块开发者可以通过 jar 提供的 API 来实现对所有的 Function 的劫持,在原 Function 执行的前后加上自定义代码。
说成人话就是 Android 上所有正在运行的应用程序都是通过一个万物之主 —— Zygote 创造出来的,但是这个万物之主不听我们的话呀,Xposed 就是把这个万物之主换成自个家的,然后用一本天书(就是前面的 XposedBridge.jar)和他沟通,就可以实现对于系统上任意程序任意数据和行为运行前后的修改,至于我们不会写天书或者读懂天书也没关系,只要我们下载已经写好的天书(模块)就可以完成特定的需求。
这么强力的一个框架,自然要考虑它的安全性。Xposed 框架和安装器本身完全开源,而模块开发者们也倾向于把自己开发的模块完全开源,使用 Xposed 本身和管理器里面的开源模块完全不用担心安全问题。
有了这些优点,Xposed 框架自然吸引了不少开发者(包括我在内)开发多种多样的 Xposed 模块。微信自然也逃不过去,我的文章「用两款插件让微信更符合 Material Design 设计:Mdwechat、WechatUI」就介绍了两款专门让微信变得更好看的模块,让用户可以自定义微信的主题,还可以避免晚上使用微信的使用被明晃晃的白色「亮瞎」。
上面两款插件都只是通过 Xposed 修改了微信关于外观的部分,至少 WechatUI 保证不会侵犯用户的隐私和数据安全。而 Xposed 的强大也是一把「双刃剑」—— 另一面是利用它真正修改了微信功能的模块。微信上充斥的微商,群控,自动陌生人打招呼和群等乱七八糟的东西十有八九都有相关的 Xposed 模块。比如:
- 某模块通过 Hook(钩住)微信摇骰子函数实现自定义骰子数,想扔多少点都可以;剪刀石头布更是要啥有啥,这些都是各群的最爱。
- 某模块通过 Hook 相关函数后,可以实现消息自动回复和针对关键词回复,通过个人号进行色情营销肯定少不了这个。
- 某模块 Hook 朋友圈和转发相关函数后轻松实现成千上万条信息和朋友圈的转发,之前淘宝或者论坛上很多所谓的「营销微商」神器就是一台装了 Xposed 框架和模块的手机,几百块的垃圾手机加上免费的 Xposed 卖上万块都有一大堆微商排着队抢。
更别说抢红包和伪集赞等「基本功能」,我自己也拒绝过几次灰产黑产主动找上门的「生意」。任何 App 上的任意一行代码都可以通过 Xposed 篡改,这就导致了很多恶意模块的诞生 —— 只要一个会 Android 开发的程序员加上一笔钱,你就无所不能。
本次封号的争议
作为拥有支付功能的,超过 10 亿月活跃用户的应用,微信官方自然不能任由这些恶意模块为所欲为,加上世界杯期间这些使用恶意模块的用户和群可能越来越猖獗,于是便有了本次封号。
而封号的法律依据,则是根据我们第一次使用微信时看都不会看的 腾讯微信软件许可及服务协议 第八条来执行的,虽然用户可能只是想要个微信夜间模式,但是只要修改了微信客户端的功能就违反了 用户协议 8.2.1.4 条,按照协议腾讯有权利对用户进行最高永久封号的处罚。
这原本是大快人心的一件事情,可是这次封号却引来了一片骂声,甚至工信部的微博都被投诉评论刷屏。
原因是不是所有用户 ROOT 手机和安装 Xposed 框架都是为了修改微信的,很多用户 ROOT/装框架只是为了用几个模块提升方便自己使用手机,比如全屏手势和卸载系统应用。而微信的做法是只要手机上安装有 Xposed 微信账号就有很大的被封号风险,甚至连 ROOT 都不可以,这显然是「管过头」了。
Android 系统是开源的,用户自己的手机喜欢装什么软件、ROOT 手机、安装 Xposed 框架和模块都是他/她自己的权利,甚至用户在手机里装病毒软件也是他/她的权利,杀毒软件只能提示某应用有毒让用户手动删除而不能自己偷偷地就把应用卸载掉。
像是使用 Xposed 模块或是抢红包这种损害他人利益的行为微信官方根据用户协议主动封号是一点问题也没有,可是当一个用户在安装了 Xposed/Root 而没有修改微信任何功能(比如魔趣等第三方 ROM 自带 Xposed,默认是不激活的),甚至只使用很多系统自带的应用分身功能的情况下也被封号,就算拿出用户协议来也说不太过去了。
如何规避风险?
既然微信这次的封号行动做得不是很恰当,那么用户不一定就非得迁就与腾讯放弃 Xposed 和 ROOT。由于利益相关所以我不能直接给出各种反检测的应用和模块,不过还是可以在这里给大家支几招。
确认封号风险:Xposed Checker
所谓「八仙过海,各显神通」,通过不同方法反检测之后想要继续使用 Xposed 和 ROOT 的派友可以通过 Xposed Checker 检查自己是否还有被封号的风险。
Xposed Checker 从日常检测 Xposed/ROOT 的应用中提取出检测代码片段,通过这些片段检测你的反检测手段是否可靠,应用本身也写到了各种检测方法的原理,只需要全绿就证明一般检测手段都无效,可以放心使用。
使用 Play 商店版微信
Play 商店拥有更加严格的审核标准,像是扫描用户应用列表和调用栈检测的代码会通不过商店的审核,使用 Play 商店版微信会更有安全保证(希望几个被封的 Play 版微信用户只是真的倒霉吧)。
附:检测各种用户行为的技术
随着几大公司的带头,越来越多的银行、社交应用、游戏都开始检测 Xposed 和 ROOT,所用的检测方法也越来越复杂,甚至不惜侵犯用户隐私。
以某聊天 APP 为例,通过本地和服务器端来检测用户是否有违规行为。
- 我们安装这个 App 的时候给了它扫描应用列表的权限,然后它只要扫描到 Xposed 的包名知道我们安装了框架,但是并不能知道我们有没有激活模块。
- 检查/system/bin/ 与/system/xbin/ 两个目录是否存在su 文件,存在则表明系统已经被 ROOT。
- 利用抛出异常的方式查看函数调用栈,简单来说就是通过每次运行一个函数后检查这个函数调用过程中相关的进程,一旦发现调用栈中有第三方包名(比如 Xposed),就可以认为函数已经被 Hook 了,这种方法检测较为准确。
- 只要我们授权给应用电话权限,这个应用就能拿到设备的 IMEI 识别码,每台设备的识别码都是不同的。如果服务器检测到两个账号同时通过一个 IMEI 设备登录并且这个应用不允许单设备多账号登录,那么很明显 —— 用户用了应用分身。同样方法也可以检测出模拟器用户。
来源:酷安@Mrack
后记
ROOT 和 Xposed 框架能给手机系统带来无限的可能性,开发者们也利用它们为我们带来很多很棒的独特功能。微信和其他一些应用不应该为了恶意使用者「因噎废食」,彻底剥夺用户自由选择的权利,封号事件已经过去了快半个月,大部分用户已经成功申诉回自己的微信账号(侧面证明微信的确误封了很多用户),而绝大部分用户都没有因为这件事放弃使用 Xposed 和 ROOT,支付宝这种需要很高级别甚至给用户账户安全险的应用也不会因为 Xposed/ROOT 就不让用户使用,希望以后其他应用能多考虑这一点。