景 悟,康海燕,黄渝轩
(北京信息科技大学 信息管理学院,北京 100192)
在科技高度发展的今天,人类的社交模式逐渐转向更加依赖于信息载体的模式,作为这一趋势的衍生物,微信为丰富人类生活娱乐和加强人与人之间的社交联系起到了必不可少的作用。科技不仅服务于人类,也同时肩负着取悦人类的作用,但是在网络环境中,一些不法分子会发布敏感信息,需要实时监测。本文主要以微信红包为例,对敏感信息的监测进行研究,通过提供更方便的自动抢红包功能,使得抢红包这一娱乐方式为大家带来更多的乐趣,并在设计自动抢红包软件过程中,实现对关键信息的监测。
抢红包应用的实现主要有如下几种方式:监听AccessibityEvent.TYPE_VIEW_SCR0LLED事件,获取到事件后,根据之前的信息总数和当前获取的信息总数得出收到信息数目,再判断新增的信息是否红包,如果是红包则模拟点击事件打开红包[1]。接收发红包用户录入的待发红包金额和红包个数并缓存所述待发红包金额至数据库,推送通知消息至抢红包用户,接收抢红包用户的抢红包请求并通过分析判断进行响应[2]。或者,利用Open CV计算机视觉把红包的橙黄色区域作为运动检测的目标,用背景差分法检测是否有新的运动目标。当有新的运动目标出现时,对其进行轮廓处理,计算其轮廓面积、质心,如在设定的范围内时则确认为新红包,通过python脚本发送指令给控制器控制机械臂完成自动抢红包[3]。
我国国内市场对于抢红包应用或插件的研究和开发日趋成熟,但与其他软件一样,这些应用或多或少存在着一些缺陷,典型的有:
1)贝贝抢红包(V1.2.2安卓版):无法实现在锁屏状态下或聊天界面状态下的自动抢红包,使用一段时间后需要付费使用,用户体验不佳。
2)快抢抢红包神器(V1.0安卓版):只完成了简单的红包领取,未实现绕过检测机制,容易被检测出装有外挂并封停账号。
3)手动抢红包避雷器(V2.4安卓版):无法在锁屏状态下或聊天界面状态下自动抢红包。
本文将针对这些问题进行改善,分析当前所要设计抢红包神器的功能,为当前的网络世界提供高效且符合规则的人性化设计。
抢红包神器的功能结构如图1所示。
1)实时监听。
对微信产生的全部事件和屏幕状态变化产生的全部事件进行监听。根据微信及屏幕状态将接收的消息分为3种:一为移动设备处于亮屏状态、微信处于后台运行时的通知栏消息;二为移动设备处于亮屏状态、微信处于前台运行时的聊天列表消息;三为移动设备处于息屏状态、微信处于后台运行时的锁屏通知栏消息。分别监听这3种消息。
2)遍历节点。
查找View节点有2种方式,一是通过View节点的文本内容来查找,二是通过View节点的ID名称来查找,因此需要遍历View节点来获得它们的文本内容或是ID。通过DDMS(Dalvik debug monitor service,Dalvik虚拟机调试监控服务)中的Dump View Hierarchy For UI Automator工具对微信UI结构进行分析,得到View的详细布局结构以及每个View节点的属性。
3)模拟点击。
本神器设计是通过辅助类AccessibilityService来实现模拟点击的[4-5]。AccessibilityService实现模拟点击的原理是遍历查找带有关键字的View节点,获取到相应属性的View节点后,执行AccessibilityService特有的ACTION_CLICK方法对指定内容或位置进行点击。
抢红包神器的运行流程如图2所示。
1)配置和声明权限。在AndroidManifest中对AccessibilityService服务进行注册和配置,在配置中声明需要获取的权限和规则。
2)指定监听事件。根据不同的微信及屏幕状态指定不同的所需要监听的事件,须同时满足监听通知栏、聊天界面中的微信产生的所有事件,以及移动设备界面的变化所产生的事件。
3)查找View节点。根据监听所得到的所有关于微信的事件,遍历所有的View节点并找到我们需要的含有指定ID或文本属性的View节点。
4)模拟点击。查找到相关节点后,对关键字所在的View节点进行Accessibility辅助功能的模拟点击。
1.3.1 AccessibilityService
AccessibilityService是继承Service类的,它的设计初衷在于帮助残障用户使用Android设备和应用,在后台运行,可以监听用户界面的一些状态转换,例如页面切换、焦点改变、通知、Toast等,并在触发AccessibilityEvents时由系统接收回调。
当前通过AccessibilityService辅助类实现的功能主要有:通过它来监控Android手机的UI事件并代表用户进行操作,不会被杀毒软件检测到[6]。通过它来实现设备中的模拟点击,当终端监听到关键事件后,由AccessibilityService根据所触发信息获取到的控件视图,调用第一指定函数遍历所有视图,第二指定函数实现在目标视图上的模拟点击[4-5]。通过它来实现应用程序的监控功能,注册使用AccessibilityService,并绑定需要监听的事件,开启服务后即可实现应用程序的监控功能[7-8]。
自定义一个服务类AccessibilitySample Service,继承AccessibilityService类并重写方法onAccessibilityEvent和onInterrupt。编写好服务类之后,在系统配置文件中注册服务。具体的功能实现需要在方法onAccessibilityEvent中完成,根据onAccessibilityEvent回调方法传递过来的AccessibilityEvent对象可以对事件进行过滤,结合AccessibilitySampleService本身提供的查找节点与模拟点击相关的接口即可实现节点的查找与点击。
AccessibilityService辅助类的配置过程如下:
1)新建类继承AccessibilityService。
添加子类RobMoney继承Accessibility Service,同时为这个子类添加相应的权限。在子类RobMoney中重写几个方法:
onAccessibilityEvent()。该方法在系统检测到与Accessibility服务指定的事件过滤参数匹配的AccessibilityEvent时调用。onAccessibilityEvent是必须实现的方法,通常需要在该方法中根据AccessibilityEvent作出判断并执行一些处理。
onInterrupt()。该方法在系统试图中断AccessibilityService返回的响应时被调用,在整个程序的生命周期内会被多次调用。
根据本神器设计需要用到的功能,除上述两个必选项之外再另外选取方法onUnbind(),该方法在系统关闭AccessibilityService类时被调用,可以起到释放资源的作用。
2)在AndroidManifest中注册服务。
在标签
android:enabled="true"
android:exported="true"
android:label="@string/app_name"
android:permission="android.permission.BIND_ACCESSIBILITY_SERVICE"
需要注意添加系统权限android:permission= "android.permission.BIND_ACCESSIBILITY_SERVICE"和在
3)配置服务。
android:resource="@xml/accessibility"
其中android:name 表示配置的服务器名称,是固定写法,android:resource表示引用的具体配置文件。
1.3.2 View节点查找与监听
在Android中,View是界面层控件的一种抽象,它代表了一个控件。除了View还有ViewGroup,即一组View。ViewGroup继承了View,因此View可以是单个控件,也可以是由多个控件组成的一组控件。
View被点击时相关方法回调和框架模型如下:
1)接口定义为事件监听器,内部连接系统的回调方法,参数为即将发生回调的按钮。
2)定义按钮的Button类,声明该类接口需要监听的对象。
3)定义测试类,将监听器的目标以匿名内部类形式传入Button类,并模拟回调测试。
在针对一个应用程序,设计可以起到辅助优化作用的插件之前,需要对该程序架构和应用结构进行分析。Android的View体系为树形结构,因此每一个View代表了一个节点,需要通过对节点的遍历,查找到指定的节点,通过这一View节点对程序的回调完成后续操作。
首先对微信产生的全部事件和屏幕状态变化产生的全部事件进行监听,需要着重对消息的收取或屏幕状态的改变进行实时监听。
根据监听消息得到所有关于微信的事件后,使用Dump View Hierarchy For UI Automator工具对微信UI结构进行分析,遍历得到每个View节点的属性。遍历所有的节点后,找到需要的含有指定ID或文本属性的View节点。
通过重写onAccessibilityEvent()方法,在onAccessibilityEvent()方法中获取Accessibility Event的类型,通过AccessibilityEvent事件类型的不同来识别当前屏幕状态,决定如何进行下一步。通过类型TYPE_NOTIFICATION_STATE_CHANGED监听通知栏消息;通过类型TYPE_WINDOW_STATE_CHANGED监听是否进入微信红包界面。
其次在RobMoney类中添加方法recycle(),查找当前聊天窗口中的红包信息。通过分析微信UI结构得到的View详细布局结构以及每个View节点的属性,指定文本内容属性为text或者指定id属性为ID。对查找方式进行规定,可以通过寻找文本内容和id来找到相应的View节点,进行模拟点击。
1.3.3 模拟点击
监听通知栏事件、消息列表事件、聊天界面,当接收任意一条微信消息时,查看消息中是否有文本内容为“[微信红包]”的节点,若含有这一内容则对该节点进行模拟点击。
当查找到红包的节点后,查找“開”关键字节点,找到后进行模拟点击,完成红包领取。
在功能测试阶段,将抢红包神器分别安装在华为P30设备以及PC端的模拟器中。抢红包神器对3种不同运行情况的消息进行监测,即:移动设备处于亮屏状态、微信处于后台运行时的通知栏消息;移动设备处于亮屏状态、微信处于前台运行时的聊天列表消息;移动设备处于息屏状态、微信处于后台运行时的锁屏通知栏消息。
当红包消息在各种状态下的通知栏或消息列表中被获取后,能够自动解锁并打开微信界面,对红包进行模拟点击操作将其领取。
如图3所示,在辅助功能内打开微信红包监控开关,即可完成抢红包神器的执行。
图4为移动设备处于亮屏状态、微信处于前台运行时监测到红包消息。
图5为移动设备处于亮屏状态、微信处于后台运行时监测到红包消息。
图6为移动设备处于息屏状态、微信处于后台运行时监测到红包消息。
图7为红包领取记录。
从图4~7可以看出,该神器可以完成在后台运行状态下对微信的全部事件监听,并在微信获取到红包消息后第一时间对该红包进行领取。该操作不受微信前台和后台的限制,可以实现在亮屏和锁屏状态下的自动领取。
抢红包神器在华为P30设备以及PC端的模拟器中均可以正常使用,并且该神器可以按照设计时的运行流程完成对红包的监听及领取,满足设计时所需要完成的功能:实时监听、遍历节点和模拟点击。
分别在华为P30和模拟器上对神器的红包领取时间进行测试。得到如表1所示的结果。
表1 抢红包神器领取红包时间
表中列举了不同运行环境下抢红包神器抢红包的用时,可以看出该软件的抢红包速度较快,本次实验对于“抢”的设计目的达到。
将抢红包神器与网络上的快抢抢红包神器进行比较。抢红包的速度方面,两个神器基本持平,均为较快速度的抢红包神器;应用界面方面,如图3所示,本文抢红包神器界面较为简洁,只需点击功能开关便可实现抢红包功能,而快抢抢红包神器的界面较为复杂,需要多次点击进入其他页面后才可实现功能;账号保护方面,抢红包神器中加入了延迟领取机制,在抢红包神器运行之前,设置0.1~1秒不等的延迟,可以防止被屏蔽机制直接判定为使用插件代抢,对于账号的保护更为全面,而快抢抢红包神器只是完成普通的抢红包功能,并未实现对账号的保护,易造成账号的封停。
根据比较可以看出,抢红包神器对网络上其他抢红包神器的不足之处进行了改善,完成了快速抢红包、通过延迟领取保护账号安全等功能,并且应用界面简洁,是一款功能完善、使用简单的微信抢红包神器。
本文以微信红包为例,对敏感信息监测方法进行研究,设计了一款抢红包神器。抢红包神器改变对微信消息的监听方式,从只能根据通知消息栏推送获取红包消息转化为可以在聊天界面内领取的方式。抢红包神器可以在设备处在各种状态时领取红包,如设备锁屏时领取红包、微信聊天界面领取红包。抢红包神器增加了领取红包的延迟时间来应对检测机制,实现对账号的保护。抢红包神器的监测方法可以扩展到对用户在某一程序中的操作、用户之间的社交行为、用户之间聊天内容、用户对信息的浏览进行实时监听,通过分析这些用户行为,对产生违规操作或恶意言论的用户进行提示或屏蔽等。