本文系简介,抢红包的demo可以看文末的链接。
2015年底,正当微信和支付宝摩拳擦掌,准备开启一场红包大战之时,突然抢红包神器凭空出现抢了它们的风头。它能自动帮你自动抢红包,不必每个群去蹲守,对于个人来说解放了生产力,但是破坏了抢红包的乐趣,甚至会引发矛盾。
所谓的抢红包神器其实在15年早期就已经出现,但真正引起了大众的关注是在年底。
红包插件与红包提醒助手:有些人可能把这两个名词混为一谈,但它们是不同的。红包插件就是能自动抢红包的工具。小米、魅族等厂商都推出了自己的红包助手,它们的功能一般包括:在红包来临时进行提醒,点击提醒直达红包页面。但是还是需要手动抢红包,这显然称不上是神器,也在红包平台的容忍范围内。
随着红包插件的传播,关于它的传言也越来越离谱,比如抢了还能再抢,关机还能抢,抢了还能发个谢谢。到底实际情况如何?让我们来探索一下这类红包插件的原理。
Android平台的开放给这类红包插件提供了许多机会。据笔者探索以及向一些开发者请教的结果,至少有三种理论上可行的技术:
1. Android Accessibility Service
Android Accessibility Service是Android系统为视力障碍人士提供的辅助功能,通过它可以获取页面的UI控件位置、内容等,并且模拟点击,通过编码实时监控UI变化,就可以实现针对某个控件自动点击。
用在红包上就是,先获取系统推送通知的内容并进行分析,如果是红包,则进入有红包的页面,然后分析页面的元素,找到红包,自动点开。
它的限制是需要保证屏幕常亮,在熄屏、解锁界面插件是不运行的。
2. 神器Xposed
Xposed是XDA社区开发的一个开源项目,它通过修改Android Dalvik运行时的Zygote进程,使用Xposed Bridge将第三方代码注入到Android应用的方法调用中,实现非侵入式的在运行期动态修改系统和应用行为的能力。
用在红包上就是,先通过逆向工程手段找到红包对应的类和方法,然后通过Xposed注入到该类中,改变红包原有的逻辑,甚至可以实现不点开红包就抢红包。
它的限制是需要Root,并且逆向工程的难度很高,还不一定能获得想要的信息。
3. 安卓PC模拟器
安卓PC模拟器是一种在PC上运行Android应用的工具,它们的始祖是BlueStacks,其原理是将Android系统API翻译成Windows API,从而实现模拟Android设备。不过抢红包还需要附加的工具,但PC上能做的事情太多了,就看每一款红火的网游几乎都有外挂,所以要实现在PC上抢红包想必有许多方法。
不过,正因为PC的能力太强大,某些应用会对模拟器运行加以限制,就拿微信来说,一旦发现使用PC模拟器登录,账号会被永久封停。在这个基础上再加上抢红包的工具,想要避开官方的检测,其难度不比上面两种方法小。
iOS平台比Android平台要规范很多,特别是未越狱的设备,想要达成目的看上去是不可能的。但阿里的安全工程师蒸米给我们提供了一种方法,就是利用企业证书和未越狱应用Hook技术。
企业证书是为了把红包插件安装到用户手机上,虽然开发者证书也能做到这一点,但有数量限制,并且过程稍麻烦。具体的原理(以微信为例)则是利用红包插件hook微信,逆向和分析手段获取接收微信消息的函数,然后判断消息中有没有红包,有的话就直接调用打开红包的函数即可。至于红包插件如何hook微信,在蒸米的文章有讲解。
在越狱设备上,iOS能做的就要多多了,主要利用的是CydiaSubstrate,它类似于Android平台的Xposed,可以对已安装的App进行hook。然后同样需要进行逆向工程,步骤和上面讲述的差不多。
在客户端上可能的红包插件就这么多了,还有人考虑说伪造微信消息,欺骗微信接口。但这只存在理论上的可能,微信使用的是自研加密协议,想要破解几乎是不可能的事情。
还有一些奇葩的比如抢红包机器人,不过也就是逗个乐,实际的抢红包效率还不如人的双手。
抢红包神器的风险来自于两方面,信息被盗和账号被封。
信息被盗是因为这些第三方的红包插件多半需要很高的权限,能做的事情太多了,轻的只是收集一些用户的隐私信息,严重的甚至用户的支付账号密码都可能被盗。
账号被封则是红包平台的反制措施,拿微信来说,一旦检测出抢红包的作弊行为,轻则禁止抢红包三天,重则永久封停账号,如今微信已经是人们非常依赖的社交工具,一旦微信被封停,损失甚至可能超过手机被盗。
对于这些不同实现的红包插件来说,实际上由于开发难度的不同,使用Accessibility的红包插件最为常见。而对于Accessibility的防御,饿了么移动技术部架构/框架组负责人王朝成介绍了他们的经验。虽然不是抢红包,但之前饿了么也遇到过利用Accessibility的恶意插件的困难,最后他们通过去掉对应的UI控件的辅助标识解决了这个问题。
在一篇讲解微信抢红包外挂的文章里,作者自己开发了抢红包插件,也分享了一些防御措施:
如何防止外挂
在了解整个核心后,获取事件不外乎就是通过文本与id判断,那么就可以将文本改为图标方式,将id改为动态id(每次显示都是随机生成),这样一来就可以提高外挂的门槛。
但是,去掉辅助标识,会对信息无障碍造成影响,违反了Android设置Accessibility的初衷,另外这也只能解决一个问题,另外使用注入、Xposed等插件的就无能为力了。
笔者请教了微信安卓开发组组长赵原,他介绍微信的防御措施,是在后台对用户的行为策略进行分析,一旦发现疑似作弊就可以给予警告甚至封停账号。这种防御一是需要在客户端采集用户行为数据,二是需要在后端利用机器学习等分析出作弊行为的特征。
抢红包插件,是移动设备上第三方应用侵入其它应用能力的一个标志,通过本文,你可以了解到恶意软件能对你的手机做些什么。同时,了解了抢红包插件的原理,所谓的抢红包神器也就不再神秘,希望能让你避免因为好奇心去下载它们,虽然开始可能多抢了几块钱的红包,但最后吃亏的还是你自己。
读者朋友们对于这类所谓神器有何看法,对抢红包开挂的行为有何见地,不妨在评论区回复我们!
http://drops.wooyun.org/papers/12803
阿里的安全工程师蒸米的博文,介绍了iOS非越狱应用Hook技术。
https://www.zhihu.com/question/28152693
这个问题下面的回答解释了一些抢红包插件的原理。
http://www.swiftyper.com/ios-tweak-install-guide
作者写了一个iOS越狱的抢红包插件,这是他写的插件的安装教程,还是挺复杂的。
https://github.com/geeeeeeeeek/WeChatLuckyMoney
一个开源的抢红包插件,利用的原理是Accessibility。
http://www.happycodeboy.com/index.php/archives/10/
作者在2015年春节期间写了一个抢红包插件,这是他介绍其原理,用的也是Accessibility。
【via@infoq】