拦截外挂插件的方法及装置转让专利

申请号 : CN202010586816.2

文献号 : CN111797387A

文献日 :

基本信息:

PDF:

法律信息:

相似专利:

发明人 : 张毅然于磊

申请人 : 北京三快在线科技有限公司

摘要 :

本说明书公开了一种拦截外挂插件的方法及装置,针对界面中显示的控件,先确定该控件的父控件的类,之后再从控件库中确定该控件需要继承的父控件,在对控件进行编译时通过预设的构建工具,使该控件继承对应类的父控件包含的拦截代码,当该控件接收到通过无障碍访问功能发送的操作请求时,通过该拦截代码对操作请求返回真值,使系统确定该操作请求的操作已经被执行,从而切断外挂通过无障碍访问功能对控件进行操控的可能性。本说明书提供的方法无需关心接口或者系统环境的变化,而只需要使控件继承父控件对无障碍访问功能的操作,便可实现切断事件流的效果,避免了现有反外挂方式的漏洞。

权利要求 :

1.一种拦截外挂插件的方法,其特征在于,包括:

检测目标应用以获取在目标应用的显示界面中显示的控件,确定所述控件的父控件的类;

在对所述控件的代码进行编译时,通过预设的构建工具,从控件库中获取预先编写的所述父控件的类对应的包含拦截代码的父控件;

根据所述父控件与该控件的继承关系,使所述控件继承所述父控件包含的拦截代码;

当确定通过无障碍访问功能发送的针对所述控件的操作请求时,执行继承了所述拦截代码的所述控件,并通过所述拦截代码对无障碍访问功能的操作请求返回真值,使通过无障碍访问功能不能对所述控件执行操作。

2.如权利要求1所述的方法,其特征在于,采用下述方法编写所述控件库中各父控件的类对应的拦截代码,其中:针对每种类的基础控件,在开发环境中启动该基础控件;

在该基础控件初始化时,获取该基础控件需要传入无障碍访问事件的字段;

将获取的字段中包含的事件类型对应的字段值以及事件动作对应的字段值重写为第一指定值;

将包含所述第一指定值的基础控件作为包含拦截代码的父控件。

3.如权利要求2所述的方法,其特征在于,当确定通过无障碍访问功能发送的针对该控件的操作请求时,执行继承了拦截代码的该控件,具体包括:当确定通过无障碍访问功能发送的针对该控件的操作请求时,通过所述拦截代码,确定所述第一指定值;

将所述第一指定值作为事件类型以及事件动作返回所述无障碍访问功能,使所述无障碍访问功能根据所述第一指定值确定事件执行完毕的结果,结束事件流程。

4.如权利要求1所述的方法,其特征在于,所述方法还包括:当确定通过无障碍访问功能发送的针对所述控件的控件识别请求时,执行继承了所述拦截代码的该控件,并通过所述拦截代码对所述控件识别请求返回第二指定值,使通过无障碍访问功能不能获取控件信息。

5.如权利要求4所述的方法,其特征在于,采用下述方法编写所述控件库中各类对应的拦截代码的父控件,其中:针对每种类的基础控件,在开发环境中启动该基础控件;

在该基础控件初始化时,获取该基础控件初始化所需的数据结构;

对所述数据结构中的无障碍访问功能获取的控件标识重写为第二指定值;

将包含所述第二指定值的基础控件作为包含拦截代码的父控件。

6.如权利要求5所述的方法,其特征在于,对所述数据结构中的无障碍访问功能获取的控件标识设置为指定值,具体包括:通过反射方式从获取的数据结构中,确定无障碍访问功能的节点信息的字段;

将所述节点信息的字段中控件标识字段值重写为第二指定值。

7.如权利要求4所述的方法,其特征在于,当确定通过无障碍访问功能发送的针对该控件的控件识别请求时,执行继承了所述拦截代码的该控件,并通过所述拦截代码对所述控件识别请求返回第二指定值,具体包括:当到接收通过无障碍访问功能发送的访问请求时,通过所述拦截代码将重写的所述第二指定值作为所述控件的控件标识,将所述第二指定值通过所述无障碍访问功能返回。

8.一种拦截外挂插件的装置,其特征在于,包括:

确定模块,检测目标应用以获取在目标应用的显示界面中显示的控件,确定所述控件的父控件的类;

获取模块,在对所述控件的代码进行编译时,通过预设的构建工具,从控件库中获取预先编写的所述父控件的类对应的包含拦截代码的父控件;

继承模块,根据所述父控件与该控件的继承关系,使所述控件继承所述父控件包含的拦截代码;

执行模块,当确定通过无障碍访问功能发送的针对所述控件的操作请求时,执行继承了所述拦截代码的所述控件,并通过所述拦截代码对无障碍访问功能的操作请求返回真值,使通过无障碍访问功能不能对所述控件执行操作。

9.一种计算机可读存储介质,其特征在于,所述存储介质存储有计算机程序,所述计算机程序被处理器执行时实现上述权利要求1-7任一所述的方法。

10.一种电子设备,包括存储器、处理器及存储在存储器上并可在处理器上运行的计算机程序,其特征在于,所述处理器执行所述程序时实现上述权利要求1-7任一所述的方法。

说明书 :

拦截外挂插件的方法及装置

技术领域

[0001] 本申请涉及计算机技术领域,尤其涉及一种拦截外挂插件的方法以及装置。

背景技术

[0002] 目前,为了方便身体难以正常使用智能终端的用户能够更好的使用智能终端,安卓(Android)系统内建了无障碍访问(Accessibility)功能,以帮助用户使用智能终端。例如,对于无法操控触屏的用户,使用Accessibility功能可以通过键盘、鼠标、遥控器等设备使用智能终端。对于视力障碍的用户,使用Accessibility功能可通过声音确定界面中控件的内容。
[0003] 由于Accessibility功能是需要实现对界面中控件的操作,因此也被外挂插件作为自动操作应用的工具,通过Accessibility功能外挂插件可以实现抓取界面中显示的控件的标识、文本信息、对控件进行操作,实现如自动筛选订单、刷新订单、抢单等功能。
[0004] 现有技术为了拦截利用Accessibility功能的外挂插件,采用的方式是设置无障碍访问代理(AccessibilityDelegate),使得外挂插件对控件的操作需要先传输至代理,则代理便可对外挂插件的操作进行拦截,实现拦截外挂的效果。
[0005] 但是,目前控件的AccessibilityDelegate需要开发人员手动设置,导致设置不够灵活,当操作系统中的设置AccessibilityDelegate的应用程序接口(Application Programming Interface,API)被篡改,则设置代理的代码就无法生效,导致不能拦截外挂插件。

发明内容

[0006] 本说明书实施例提供的一种拦截外挂插件的方法及装置,用于部分解决现有技术中存在的问题。
[0007] 本说明书实施例采用下述技术方案:
[0008] 本说明书提供的拦截外挂插件的方法,包括:
[0009] 检测目标应用以获取在目标应用的显示界面中显示的控件,确定所述控件的父控件的类;
[0010] 在对所述控件的代码进行编译时,通过预设的构建工具,从控件库中获取预先编写的所述父控件的类对应的包含拦截代码的父控件;
[0011] 根据所述父控件与该控件的继承关系,使所述控件继承所述父控件包含的拦截代码;
[0012] 当确定通过无障碍访问功能发送的针对所述控件的操作请求时,执行继承了所述拦截代码的所述控件,并通过所述拦截代码对无障碍访问功能的操作请求返回真值,使通过无障碍访问功能不能对所述控件执行操作。
[0013] 可选地,采用下述方法编写所述控件库中各父控件的类对应的拦截代码:
[0014] 针对每种类的基础控件,在开发环境中启动该基础控件;
[0015] 在该基础控件初始化时,获取该基础控件需要传入无障碍访问事件的字段;
[0016] 将获取的字段中包含的事件类型对应的字段值以及事件动作对应的字段值重写为第一指定值;
[0017] 将包含所述第一指定值的基础控件作为包含拦截代码的父控件。
[0018] 可选地,当确定通过无障碍访问功能发送的针对该控件的操作请求时,执行继承了拦截代码的该控件,具体包括:
[0019] 当确定通过无障碍访问功能发送的针对该控件的操作请求时,通过所述拦截代码,确定所述第一指定值,将所述第一指定值作为事件类型以及事件动作返回所述无障碍访问功能,使所述无障碍访问功能根据所述第一指定值确定事件执行完毕的结果,结束事件流程。
[0020] 可选地,所述方法还包括:
[0021] 当接收到通过无障碍访问功能发送的针对该控件的控件识别请求时,执行继承了所述拦截代码的该控件,并通过所述拦截代码对所述控件识别请求返回第二指定值,使通过无障碍访问功能不能获取控件信息。
[0022] 可选地,采用下述方法编写所述控件库中各类对应的拦截代码的父控件:
[0023] 针对每种类的基础控件,在开发环境中启动该基础控件;
[0024] 在该基础控件初始化时,获取该基础控件初始化所需的数据结构;
[0025] 对所述数据结构中的无障碍访问功能获取的控件标识重写为第二指定值;
[0026] 将包含所述第二指定值的基础控件作为包含拦截代码的父控件。
[0027] 可选地,对所述数据结构中的无障碍访问功能获取的控件标识设置为指定值,具体包括:
[0028] 通过反射方式从获取的数据结构中,确定无障碍访问功能的节点信息的字段;
[0029] 将所述节点信息的字段中控件标识字段值重写为第二指定值。
[0030] 可选地,当接收到通过无障碍访问功能发送的针对该控件的控件识别请求时,执行继承了所述拦截代码的该控件,并通过所述拦截代码对所述控件识别请求返回第二指定值,具体包括:
[0031] 当到接收通过无障碍访问功能发送的访问请求时,通过所述拦截代码将重写的所述第二指定值作为所述控件的控件标识,将所述第二指定值通过所述无障碍访问功能返回。
[0032] 本说明书提供的拦截外挂插件的装置,包括:
[0033] 确定模块,检测目标应用以获取在目标应用的显示界面中显示的控件,确定所述控件的父控件的类;
[0034] 获取模块,在对所述控件的代码进行编译时,通过预设的构建工具,从控件库中获取预先编写的所述父控件的类对应的包含拦截代码的父控件;
[0035] 继承模块,根据所述父控件与该控件的继承关系,使所述控件继承所述父控件包含的拦截代码;
[0036] 执行模块,当确定通过无障碍访问功能发送的针对所述控件的操作请求时,执行继承了所述拦截代码的所述控件,并通过所述拦截代码对无障碍访问功能的操作请求返回真值,使通过无障碍访问功能不能对所述控件执行操作。
[0037] 本说明书提供的计算机可读存储介质,所述存储介质存储有计算机程序,所述计算机程序被处理器执行时实现上述任一所述的方法。
[0038] 本说明书提供的电子设备,包括存储器、处理器及存储在存储器上并可在处理器上运行的计算机程序,所述处理器执行所述程序时实现上述任一所述的方法。
[0039] 本说明书实施例采用的上述至少一个技术方案能够达到以下有益效果:
[0040] 针对目标应用的界面中显示的控件,可先确定该控件的父控件的类,之后再从控件库中确定该控件需要继承的父控件,该控件库的各父控件均包含预先编写的拦截代码,使得在对控件进行编译时,可通过预设的构建工具使该控件继承对应类的父控件包含的拦截代码,使得当该控件接收到通过无障碍访问功能发送的操作请求时,可以通过该拦截代码对操作请求返回真值,使无障碍访问功能确定该操作请求的操作已经被执行,从而切断外挂通过无障碍访问功能对控件进行操控的可能性。相较于现有技术利用代理进行事件拦截的方法,本说明书提供的方法无需关心接口或者系统环境的变化,而只需要使控件继承父控件对无障碍访问功能的操作,便可实现切断事件流的效果,避免了现有反外挂方式的漏洞。

附图说明

[0041] 此处所说明的附图用来提供对本申请的进一步理解,构成本申请的一部分,本申请的示意性实施例及其说明用于解释本申请,并不构成对本申请的不当限定。在附图中:
[0042] 图1为本说明书实施例提供的拦截外挂插件的流程示意图;
[0043] 图2为本说明书实施例提供的拦截外挂插件的装置的结构示意图;
[0044] 图3为本说明书实施例提供的拦截外挂插件的装置的结构示意图;
[0045] 图4为本说明书实施例提供的实现拦截外挂插件的方法的电子设备示意图。

具体实施方式

[0046] 为使本说明书的目的、技术方案和优点更加清楚,下面将结合本说明书具体实施例及相应的附图对本申请技术方案进行清楚、完整地描述。显然,所描述的实施例仅是本申请一部分实施例,而不是全部的实施例。基于本说明书中的实施例,本领域普通技术人员在没有做出创造性劳动前提下所获得的所有其他实施例,都属于本申请保护的范围。
[0047] 以下结合附图,详细说明本申请各实施例提供的技术方案。
[0048] 图1为本说明书实施例提供的拦截外挂插件的流程示意图,包括:
[0049] S100:检测目标应用以获取在目标应用的显示界面中显示的控件,确定所述控件的父控件的类。
[0050] 由于目前应用通常是使用高级编程语言(如面对对象的语言)编写的,因此应用在运行之前需要先由终端对应用的代码进行编译,以得到可以运行的机器语言。同理,在本说明书中,终端在运行应用时需要先对应用的代码进行编译,在通过汇编、链接等过程,生成终端可执行的文件。
[0051] 具体的,本说明书提供的拦截外挂插件的方法,可用于组件化开发的应用中,因此该终端运行该应用时,可分别针对每个组件进行编译。并且,终端至少需要对应用的界面中展示的组件进行编译。
[0052] 进一步地,由于无障碍访问Accessibility功能的目的是方便身体难以正常使用智能终端的用户能够更好的使用智能终端,因此只有应用的界面中显示的控件(即,具有用户界面的组件)才能通过Accessibility功能执行访问、获取信息等操作。而针对利用Accessibility功能对应用进行信息采集、自动操作的外挂插件来说,只能对应用的界面中展示的控件进行违法操作。也就是说,只要拦截了Accessibility功能对界面中展示的控件的操作或者访问,就可以实现对外挂插件的拦截。
[0053] 为了简化说明内容,本说明书中仅对如何拦截外挂插件对控件的操作进行说明,并且,该终端至少可在确定应用的界面中显示的控件时,在渲染控件之前,对每个控件执行本说明书中提供拦截外挂插件的过程,实现对外挂插件的拦截。
[0054] 更进一步地,由于控件之间可能存在继承关系,例如,父子控件之间具有继承关系,因此终端在对组件进行编译之前需要先判断该组件是否有需要继承的组件,当有父组件时编译过程需要先继承父组件的配置。于是,在本说明书中,为了避免现有技术中通过设置AccessibilityDelegate依赖系统提供的API导致的问题,利用控件之间的继承关系,使界面中显示的每个控件都可以继承可以拦截外挂插件通过Accessibility功能操作控件的能力。
[0055] 在本说明书中,该应用的控件库中可存储有预先编写的各种类的包含了拦截代码的父控件,并且该控件库中包含了拦截代码的父控件均为基础控件,也就是不同类的基础控件,例如,按键(Button)控件、显示(View)控件、布局(Layout)控件等。而针对界面中显示的每个控件,确定该控件需要继承的父控件的类,以便在后续步骤继承相应类的父控件。例如,界面中展示的“下单”按键,在编译过程中需要继承类为Button的父控件。
[0056] S102:在对所述控件的代码进行编译时,通过预设的构建工具,从控件库中获取预先编写的所述父控件的类对应的包含拦截代码的父控件。
[0057] 在本说明书中,终端在确定出该控件的父控件的类之后,在对该控件进行编译时,可通过预设的构建工具,从控件库中获取预先编写的该类对应的包含拦截代码的父控件,以便后续根据该父控件与该控件的继承关系,使该控件继承该父控件包含的拦截代码。其中,该构建工具是基于Java虚拟机(Java VirtualMachine,JVM)的Gradle插件,用于配置控件。当然,对于具体采用哪种Gradle插件可根据需要设置,本说明书不做限制,只需要通过该构建工具可以实现在编译阶段确定控件的父控件,以及继承该父控件即可。
[0058] 具体的,如在步骤S100中所述的,该终端针对该控件,在确定出该控件的父控件的类后,通过Gradle插件从控件库中获取该类的父控件,该父控件是携带有拦截代码的控件。其中,该控件库具体可以是该应用的公共库,也就是说该应用中的任一控件在编译阶段,终端都可通过从该控件库中确定该控件对应的父控件。
[0059] 进一步地,为了实现能够拦截外挂插件通过Accessibility功能向控件发送操作请求,实现自动对控件操作的功能,该控件库中的各父控件的拦截代码可以采用下述方法编写。
[0060] 首先,对于该应用中需要的每个类,编写该类的基础控件。当然,该基础控件也可直接使用现有的代码,或者重新编写,本说明书不做限定。
[0061] 由于在本说明书中编写携带拦截代码的基础控件的目的,是为了复写该基础控件的配置,使得继承该基础空间的任一控件都具有拦截Accessibility功能的能力,因此该基础控件的内容就是能够正常实现基础控件功能的内容,并不需要额外进行改进。并且,该基础控件可以在编写完拦截代码后,可以安装在不同应用的控件库中,因此该基础控件可以是通用的控件,对其如何编写以及具体内容,可参考现有Java语言支持的基础控件的内容以及常见的基础控件实例,本说明书对具体内容和编写过程不再赘述。
[0062] 之后,在开发环境中,运行该基础控件。其中,该基础控件可以是已经组装在一个应用中的,则在开发环境中运行该应用时,该需要对该基础控件进行初始化。
[0063] 再后,在对该基础控件进行初始化时,应用需要获取该基础控件进行初始化所需的数据结构,具体可通过反射方式获取该数据结构。该数据结构中可包括例如配置数据等数据,该数据结构用于该基础控件的编译过程,使得基础空间在后续经过汇编、链接后,成为可正常运行的可执行文件。而对于本说明书来说,由于需要的是拦截外挂插件通过Accessibility功能对控件的操作,因此可以从该基础控件初始化的数据结构中,获取该基础控件初始化无障碍访问事件(AccessibilityEvent)时,需要传入AccessibilityEvent的字段。
[0064] 然后,由于在正常使用Accessibility功能时,控件传入AccessibilityEvent的字段是用于系统的Accessibility功能确定Accessibility事件流的状态的,因此字段应该是根据事件流而变化的。而与设置AccessibilityDelegate阻断事件流相同,本说明书中需要阻断事件流,因此可将获取的字段中包含的事件类型(EventType)对应的字段值,以及事件动作(action)对应的字段值,重写为第一指定值。具体该第一指定值为0,因此该基础控件在接收到通过Accessibility功能发送操作请求后,可直接向系统Accessibility功能的接口返回真值,使系统的Accessibility功能确定事件执行完毕,从而阻断事件流。区别有现有的需要设置AccessibilityDelegate的方式,无需关心代理接口是什么样的,从控件本身实现对事件流的阻断。
[0065] 最后,将包含重写第一指定值的基础控件作为包含拦截代码的父控件。
[0066] 通过上述编写过程,可以在开发环境中,自动实现对不同类的基础控件的重写,使得基础控件配置为对Accessibility功能的操作请求直接返回事件完成的结果,从控件层面上实现对外挂插件行为的拦截。并且,基础控件可以复用现有的基础控件,后续过程均可以通过开发环境的设备运行代码来实现,使得也不需要人工对应用中的每个控件去进行重写。
[0067] S104:根据所述父控件与该控件的继承关系,使所述控件继承所述父控件包含的拦截代码。
[0068] 在本说明书中,在确定出该控件的父控件之后,根据该控件与该父控件的继承关系,在对该控件的编译阶段继续通过该Gradle插件将该父控件的拦截代码继承到该控件中,也就是使该控件继承上述步骤S102中所述的字段值。当然,由于对于控件继承是应用运行常见的过程,本说明书对此不做赘述,具体可以参考现有控件继承过程。
[0069] S106:当确定通过无障碍访问功能发送的针对所述控件的操作请求时,执行继承了所述拦截代码的所述控件,并通过所述拦截代码对无障碍访问功能的操作请求返回真值,使通过无障碍访问功能不能对所述控件执行操作。
[0070] 在本说明书中,当经过编译阶段后,终端还需要继续对该控件进行汇编以及链接得到可执行文件,以及对控件进行渲染等操作使该终端的界面中展示该控件。于是,终端可监测用户对界面中每个控件的操作,并执行。
[0071] 而对于继承了拦截代码的每个控件来说,假设当外挂插件通过Accessibility功能对界面中展示的该控件发送操作请求时,该终端可确定通过系统的Accessibility功能发送的针对该控件的操作请求,则终端可执行该控件的可执行文件,由于该可执行文件继承了父控件中对传入AccessibilityEvent的字段的EventType以及action的第一指定值(即,0)的字段值,因此终端在运行该可执行文件后会确定向该AccessibilityEvent字段中的EventType以及action传入字段值0,使得系统的Accessibility功能确定该AccessibilityEvent事件返回真值,也就是事件已经执行完毕,而实际上控件并没有根据操作请求执行任何操作,实现了对外挂插件操作控件的拦截。
[0072] 基于图1所示的外挂插件拦截的方法,针对界面中展示的控件,可先确定该控件的父控件的类,之后再从控件库中确定该控件需要继承的父控件,该控件库的各父控件均包含预先编写的拦截代码,使得在对控件进行编译时,可通过预设的构建工具使该控件继承对应类的父控件包含的拦截代码,使得当该控件接收到通过无障碍访问功能发送的操作请求时,可以通过该拦截代码对操作请求返回真值,使无障碍访问功能确定该操作请求的操作已经被执行,从而切断外挂通过无障碍访问功能对控件进行操控的可能性。相较于现有技术利用代理进行事件拦截的方法,本说明书提供的方法无需关心接口或者系统环境的变化,而只需要使控件继承父控件对无障碍访问功能的操作,便可实现切断事件流的效果,避免了现有反外挂方式的漏洞。
[0073] 另外,目前通过AccessibilityDelegate拦截的是对控件的操作,而无法阻止外挂插件抓取控件信息。因此,即使AccessibilityDelegate可以阻止外挂插件通过Accessibility功能对控件的操作,也不能避免控件中的文本信息、控件标识等信息的泄露。
[0074] 在本说明书中,为了避免控件信息的泄露,在编写所述控件库中各类对应的拦截代码的父控件时,还可以采用下述方式进行编写:
[0075] 首先,对于该应用中需要的每个类,编写该类的基础控件。当然,该基础控件也可直接使用现有的代码,或者重新编写,本说明书不做限定。确定基础控件的内容可参考步骤S102中的描述,不再赘述。
[0076] 之后,在开发环境中,运行该基础控件。同步骤S102中的描述,该各基础组件的重写过程也是在开发环境中进行的。其中,该基础控件可以是已经组装在一个应用中的,则在开发环境中运行该应用时,该需要对该基础控件进行初始化。
[0077] 再后,在对该基础控件进行初始化时,应用需要获取该基础控件进行初始化所需的数据结构,该数据结构中可包括例如配置数据等数据,该数据结构用于该基础控件的编译过程,使得基础空间在后续经过汇编、链接后,成为可正常运行的可执行文件。而对于本说明书来说,由于需要的是拦截外挂插件通过Accessibility功能获取控件信息的能力,因此可以从该基础控件初始化的数据结构中,获取该基础控件初始化Accessibility功能获取的空间标识的字段,并将该字段重写为第二指定值。
[0078] 具体的,可通过反射方式从获取的数据结构中,确定Accessibility功能的节点信息NodeInfo的字段,将字段中控件标识字段值重写为第二指定值。也就是在初始化AccessibilityNodeInfo时,重写字段中的控件标识的字段值。其中第二指定值可以是根据需要设置,可以是任一值,例如,-1。
[0079] 最后,将包含重写第二指定值的基础控件作为包含拦截代码的父控件。
[0080] 由于在正常使用Accessibility功能时,控件初始化时会提供控件标识作为AccessibilityNodeInfo中字段信息,使得通过Accessibility功能可以在界面的各控件中,确定需要执行操作的控件。而当重写控件标识后,由于不同控件返回的控件标识都是第二指定值,因此外挂插件一方面无法确定控件的信息,另一方面也无法区别界面中的不同控件,达到拦截外挂插件的效果。
[0081] 另外,在本说明书中,由于要拦截外挂插件通过Accessibility功能对控件的获取请求、操作请求等操作,因此可以认为只要是通过Accessibility功能发送的请求就有可能是外挂插件发送的,于是在重写控件信息时,也可将该控件的私有字段一并重写,使通过Accessibility功能不能获取正确的信息。
[0082] 通过上述编写过程,可以在开发环境中,自动实现对不同类的基础控件的重写,使得基础控件配置为对Accessibility功能的操作请求直接返回事件完成的结果,从控件层面上实现对外挂插件行为的拦截。并且,基础控件可以复用现有的基础控件,后续过程均可以通过开发环境的设备运行代码来实现,使得也不需要人工对应用中的每个控件去进行重写。
[0083] 更进一步地,当控件库中的父组件的拦截代码包含了上述对控件标识重写的内容时,终端当确定通过Accessibility功能发送的针对该控件的控件识别请求时,可通过执行继承了拦截代码的该控件,通过该拦截代码将重写的该第二指定值作为该控件的控件标识,将该第二指定值通过该Accessibility功能返回外挂插件。
[0084] 另外,在本说明书中提供了两种重写控件的方法,分别可以实现阻断Accessibility事件流的功能,以及不返回控件信息的功能。而这两种方法可以组合使用,也就是说在编写各类的基础组件时,分别进行两种编写过程,使得父控件的拦截代码分别能够实现两种功能,则无论外挂插件通过Accessibility功能发送的是操作请求还是访问请求,继承了父控件的控件都不回返回外挂插件实现外挂功能的信息或实现外挂的功能。
[0085] 需要说明的是,在本说明书中,由于直接阻断了在应用中各控件上的实现Accessibility功能,因此该应用不是用于身体难以正常使用智能终端的用户的应用。例如,外卖骑手派送订单的应用,显然对于身体难以正常使用智能终端的用户来说,并不会作为骑手使用这类应用,因此可以通过本说明书提供的方法,实现这类应用对外挂插件的拦截,而无需担心干扰真正需要使用Accessibility功能的用户对应用的使用。
[0086] 基于图1所示的拦截外挂插件的过程,本说明书实施例还对应提供拦截外挂插件的装置的结构示意图,如图2所示。
[0087] 图2为本说明书实施例提供的拦截外挂插件的装置的结构示意图,所述装置包括:
[0088] 确定模块200,检测目标应用以获取在目标应用的显示界面中显示的控件,确定所述控件的父控件的类;
[0089] 获取模块202,在对所述控件的代码进行编译时,通过预设的构建工具,从控件库中获取预先编写的所述父控件的类对应的包含拦截代码的父控件;
[0090] 继承模块204,根据所述父控件与该控件的继承关系,使所述控件继承所述父控件包含的拦截代码;
[0091] 执行模块206,当确定通过无障碍访问功能发送的针对所述控件的操作请求时,执行继承了所述拦截代码的所述控件,并通过所述拦截代码对无障碍访问功能的操作请求返回真值,使通过无障碍访问功能不能对所述控件执行操作。
[0092] 可选地,所述装置包括预处理模块208,如图3所示,所述预处理模块208用于采用下述方法编写所述控件库中各类对应的拦截代码:
[0093] 针对每种类的基础控件,在开发环境中启动该基础控件,在该基础控件初始化时,获取该基础控件需要传入无障碍访问事件的字段,将获取的字段中包含的事件类型对应的字段值以及事件动作对应的字段值,重写为第一指定值,将包含所述第一指定值的基础控件作为包含拦截代码的父控件。
[0094] 可选地,所述执行模块206,当确定通过无障碍访问功能发送的针对该控件的操作请求时,通过所述拦截代码,确定所述第一指定值,将所述第一指定值作为事件类型以及事件动作返回所述无障碍访问功能,使所述无障碍访问功能根据所述第一指定值确定事件执行完毕的结果,结束事件流程。
[0095] 可选地,所述执行模块206,当确定通过无障碍访问功能发送的针对所述控件的控件识别请求时,执行继承了所述拦截代码的该控件,并通过所述拦截代码对所述控件识别请求返回第二指定值,使通过无障碍访问功能不能获取控件信息。
[0096] 可选地,所述预处理模块208,采用下述方法编写所述控件库中各类对应的拦截代码的父控件:
[0097] 针对每种类的基础控件,在开发环境中启动该基础控件,在该基础控件初始化时,获取该基础控件初始化所需的数据结构,对所述数据结构中的无障碍访问功能获取的控件标识重写为第二指定值,将包含所述第二指定值的基础控件作为包含拦截代码的父控件。
[0098] 可选地,所述预处理模块208,通过反射方式从获取的数据结构中,确定无障碍访问功能的节点信息的字段,将所述节点信息的字段中控件标识字段值重写为第二指定值。
[0099] 可选地,所述执行模块206,当到接收通过无障碍访问功能发送的访问请求时,通过所述拦截代码将重写的所述第二指定值作为所述控件的控件标识,将所述第二指定值通过所述无障碍访问功能返回。
[0100] 本说明书实施例还提供了计算机可读存储介质,该存储介质存储有计算机程序,计算机程序可用于执行上述拦截外挂插件的方法中的任一个。
[0101] 基于图1提供的拦截外挂插件的过程,本说明书实施例还提出了图4所示的电子设备。如图4,在硬件层面,该电子设备包括处理器、内部总线、网络接口、内存以及非易失性存储器,处理器从非易失性存储器中读取对应的计算机程序到内存中然后运行,以实现上述拦截外挂插件的方法中的任一个。
[0102] 当然,除了软件实现方式之外,本说明书并不排除其他实现方式,比如逻辑器件抑或软硬件结合的方式等等,也就是说以下处理流程的执行主体并不限定于各个逻辑单元,也可以是硬件或逻辑器件。
[0103] 在20世纪90年代,对于一个技术的改进可以很明显地区分是硬件上的改进(例如,对二极管、晶体管、开关等电路结构的改进)还是软件上的改进(对于方法流程的改进)。然而,随着技术的发展,当今的很多方法流程的改进已经可以视为硬件电路结构的直接改进。设计人员几乎都通过将改进的方法流程编程到硬件电路中来得到相应的硬件电路结构。因此,不能说一个方法流程的改进就不能用硬件实体模块来实现。例如,可编程逻辑器件(Programmable Logic Device,PLD)(例如现场可编程门阵列(Field Programmable Gate Array,FPGA))就是这样一种集成电路,其逻辑功能由用户对器件编程来确定。由设计人员自行编程来把一个数字系统“集成”在一片PLD上,而不需要请芯片制造厂商来设计和制作专用的集成电路芯片。而且,如今,取代手工地制作集成电路芯片,这种编程也多半改用“逻辑编译器(logic compiler)”软件来实现,它与程序开发撰写时所用的软件编译器相类似,而要编译之前的原始代码也得用特定的编程语言来撰写,此称之为硬件描述语言(Hardware Description Language,HDL),而HDL也并非仅有一种,而是有许多种,如ABEL(Advanced Boolean Expression Language)、AHDL(Altera Hardware Description Language)、Confluence、CUPL(Cornell University Programming Language)、HDCal、JHDL(Java Hardware Description Language)、Lava、Lola、MyHDL、PALASM、RHDL(Ruby Hardware Description Language)等,目前最普遍使用的是VHDL(Very-High-Speed Integrated Circuit Hardware Description Language)与Verilog。本领域技术人员也应该清楚,只需要将方法流程用上述几种硬件描述语言稍作逻辑编程并编程到集成电路中,就可以很容易得到实现该逻辑方法流程的硬件电路。
[0104] 控制器可以按任何适当的方式实现,例如,控制器可以采取例如微处理器或处理器以及存储可由该(微)处理器执行的计算机可读程序代码(例如软件或固件)的计算机可读介质、逻辑门、开关、专用集成电路(Application Specific Integrated Circuit,ASIC)、可编程逻辑控制器和嵌入微控制器的形式,控制器的例子包括但不限于以下微控制器:ARC 625D、Atmel AT91SAM、Microchip PIC18F26K20以及Silicone Labs C8051F320,存储器控制器还可以被实现为存储器的控制逻辑的一部分。本领域技术人员也知道,除了以纯计算机可读程序代码方式实现控制器以外,完全可以通过将方法步骤进行逻辑编程来使得控制器以逻辑门、开关、专用集成电路、可编程逻辑控制器和嵌入微控制器等的形式来实现相同功能。因此这种控制器可以被认为是一种硬件部件,而对其内包括的用于实现各种功能的装置也可以视为硬件部件内的结构。或者甚至,可以将用于实现各种功能的装置视为既可以是实现方法的软件模块又可以是硬件部件内的结构。
[0105] 上述实施例阐明的系统、装置、模块或单元,具体可以由计算机芯片或实体实现,或者由具有某种功能的产品来实现。一种典型的实现设备为计算机。具体的,计算机例如可以为个人计算机、膝上型计算机、蜂窝电话、相机电话、智能电话、个人数字助理、媒体播放器、导航设备、电子邮件设备、游戏控制台、平板计算机、可穿戴设备或者这些设备中的任何设备的组合。
[0106] 为了描述的方便,描述以上装置时以功能分为各种单元分别描述。当然,在实施本说明书时可以把各单元的功能在同一个或多个软件和/或硬件中实现。
[0107] 本领域内的技术人员应明白,本发明的实施例可提供为方法、系统、或计算机程序产品。因此,本发明可采用完全硬件实施例、完全软件实施例、或结合软件和硬件方面的实施例的形式。而且,本发明可采用在一个或多个其中包含有计算机可用程序代码的计算机可用存储介质(包括但不限于磁盘存储器、CD-ROM、光学存储器等)上实施的计算机程序产品的形式。
[0108] 本发明是参照根据本发明实施例的方法、设备(系统)、和计算机程序产品的流程图和/或方框图来描述的。应理解可由计算机程序指令实现流程图和/或方框图中的每一流程和/或方框、以及流程图和/或方框图中的流程和/或方框的结合。可提供这些计算机程序指令到通用计算机、专用计算机、嵌入式处理机或其他可编程数据处理设备的处理器以产生一个机器,使得通过计算机或其他可编程数据处理设备的处理器执行的指令产生用于实现在流程图一个流程或多个流程和/或方框图一个方框或多个方框中指定的功能的装置。
[0109] 这些计算机程序指令也可存储在能引导计算机或其他可编程数据处理设备以特定方式工作的计算机可读存储器中,使得存储在该计算机可读存储器中的指令产生包括指令装置的制造品,该指令装置实现在流程图一个流程或多个流程和/或方框图一个方框或多个方框中指定的功能。
[0110] 这些计算机程序指令也可装载到计算机或其他可编程数据处理设备上,使得在计算机或其他可编程设备上执行一系列操作步骤以产生计算机实现的处理,从而在计算机或其他可编程设备上执行的指令提供用于实现在流程图一个流程或多个流程和/或方框图一个方框或多个方框中指定的功能的步骤。
[0111] 在一个典型的配置中,计算设备包括一个或多个处理器(CPU)、输入/输出接口、网络接口和内存。
[0112] 内存可能包括计算机可读介质中的非永久性存储器,随机存取存储器(RAM)和/或非易失性内存等形式,如只读存储器(ROM)或闪存(flash RAM)。内存是计算机可读介质的示例。
[0113] 计算机可读介质包括永久性和非永久性、可移动和非可移动媒体可以由任何方法或技术来实现信息存储。信息可以是计算机可读指令、数据结构、程序的模块或其他数据。计算机的存储介质的例子包括,但不限于相变内存(PRAM)、静态随机存取存储器(SRAM)、动态随机存取存储器(DRAM)、其他类型的随机存取存储器(RAM)、只读存储器(ROM)、电可擦除可编程只读存储器(EEPROM)、快闪记忆体或其他内存技术、只读光盘只读存储器(CD-ROM)、数字多功能光盘(DVD)或其他光学存储、磁盒式磁带,磁带磁磁盘存储或其他磁性存储设备或任何其他非传输介质,可用于存储可以被计算设备访问的信息。按照本文中的界定,计算机可读介质不包括暂存电脑可读媒体(transitory media),如调制的数据信号和载波。
[0114] 还需要说明的是,术语“包括”、“包含”或者其任何其他变体意在涵盖非排他性的包含,从而使得包括一系列要素的过程、方法、商品或者设备不仅包括那些要素,而且还包括没有明确列出的其他要素,或者是还包括为这种过程、方法、商品或者设备所固有的要素。在没有更多限制的情况下,由语句“包括一个……”限定的要素,并不排除在包括所述要素的过程、方法、商品或者设备中还存在另外的相同要素。
[0115] 本领域技术人员应明白,本说明书的实施例可提供为方法、系统或计算机程序产品。因此,本说明书可采用完全硬件实施例、完全软件实施例或结合软件和硬件方面的实施例的形式。而且,本说明书可采用在一个或多个其中包含有计算机可用程序代码的计算机可用存储介质(包括但不限于磁盘存储器、CD-ROM、光学存储器等)上实施的计算机程序产品的形式。
[0116] 本说明书可以在由计算机执行的计算机可执行指令的一般上下文中描述,例如程序模块。一般地,程序模块包括执行特定任务或实现特定抽象数据类型的例程、程序、对象、组件、数据结构等等。也可以在分布式计算环境中实践本说明书,在这些分布式计算环境中,由通过通信网络而被连接的远程处理设备来执行任务。在分布式计算环境中,程序模块可以位于包括存储设备在内的本地和远程计算机存储介质中。
[0117] 本说明书中的各个实施例均采用递进的方式描述,各个实施例之间相同相似的部分互相参见即可,每个实施例重点说明的都是与其他实施例的不同之处。尤其,对于系统实施例而言,由于其基本相似于方法实施例,所以描述的比较简单,相关之处参见方法实施例的部分说明即可。
[0118] 以上所述仅为本说明书的实施例而已,并不用于限制本说明书。对于本领域技术人员来说,本说明书可以有各种更改和变化。凡在本说明书的精神和原理之内所作的任何修改、等同替换、改进等,均应包含在本说明书的权利要求范围之内。