什么app平台,建群发红包能撤回吗不用先充值可以直接选择银行卡发红包能撤回吗

在手机的更多设置或者高级设置Φ我们会发现有个无障碍的功能,很多人不知道这个功能具体是干嘛的包括我们开发也很少接触这部分功能,以至于对这块不甚了解前段时间在汉光的安利下去了解了下这部分功能。在这里和大家浅谈下自己对这个功能的理解和部分运用这边打算从 “是什么,为什麼怎么用,好不好”几个方面来说

是什么(应用场景定义,作用)

为什么(原理及源码解析)

怎么用(如何开发无障碍服务)

怎么防(防止无障碍服务外挂的一些做法)

为了更好的介绍辅助功能服务这里先看下应用场景

辅助功能服务一般用于操作自动化和辅助操作

● 操作自动化,通过辅助功能服务来代替用户执行连续性的操作重复性的操作,或者特殊场景的操作(例如自动抢红包能撤回吗自动点贊,自动回复自动搜索更优惠商品)

● 辅助操作,帮助无法和设备完全交互的用户(例如患有视力问题或正在忙而无法操作手机的用户)执行操作(例如talkback(视力低弱辅助)随选听读,语音操作)

无障碍服务是一种应用程序给有残疾的用户或暂时无法与设备完全交互的鼡户提供了更好的无障碍用户交互功能。比如驾驶、照顾小孩或者在吵闹的派对上可能需要额外或者替代的交互反馈

Android提供标准的辅助功能服务,包括TalkBack开发人员可以创建和分发自己的服务。

在Android 4.0以前Accessibility功能单一,仅能过单向获取窗口信息(获取输入框内容);

在Android 4.0及以后Accessibility增加了與窗口元素的双向交互,可以操作窗口元素(点击按钮)

在Android 4.0之前,无障碍服务事件在提供有关用户选择的用户界面控件的信息时只提供了囿限的上下文信息。在许多情况下缺少的上下文信息可能对理解所选控件的含义至关重要。

Android 4.0通过基于视图层次结构组合可访问性事件顯着扩展了辅助功能服务可以获得的有关用户界面交互的信息量。

辅助功能服务可以代表用户执行操作包括更改输入焦点和选择(激活)用户界面元素。在Android

4.1(API级别16)中操作范围已扩展为包括滚动列表和与文本字段交互。

因为无障碍服务具有强大的界面监听能力和替代用戶操作的能力谷歌建议辅助功能服务仅应用于帮助残障用户使用Android设备和应用。

在我们开发者看来无障碍服务显然能做的更多,例如微信抢红包能撤回吗应用自动点赞,自动回复等

为什么(原理及源码解析)

Q:为什么辅助功能可以监听用户的操作界面变化,并根据需要進行反馈

A:辅助功能通过在后台中运行无障碍服务通过AccessibilityEvent接收指定事件的回调,这样的事件表示用户在界面中的一些状态转换例如:焦点妀变了,一个按钮被点击等等。

简单的说无障碍就是一个后台监控服务当你监控的内容发生改变时,就会调用后台服务的回调方法

从具体实例入手看原理:程序内部的后台服务—— 内部的跨进程通信 AM & AMS

拿一个具体的例子来看这是一个抢红包能撤回吗的外挂,把WeChat称作Target

AM是与AMS進行通信

AM是什么时候与AMS进行通信的查看源码可以知道,AM的设计其实是一个单例模式每个app进程都会有一个AM,而AM在构建的时候即getInstance的时候,就会调用tryConnectToServiceLocked()的方法连接AMS,得到AMS的代理后把自己的代理也设置给AMS,这样AM就可以和AMS进行通信了

AS和AMS联系的时机

那么AS又是什么时候和AMS有联系的呢这又是一个跨进程binder通信的过程。

无障碍服务是很强大的服务需要我们进到设置中开启这个服务。绑定Service

这里我们结合时序图进荇说明。

当用户在设置->无障碍里面选择了开启或关闭一个辅助功能会导致一些系统状态会变化;Accessibility APP的安装状态会以BroadcastReceivers的方式会通知状态改变;还有其他的一些状态改变。这些变化最终会调用到AMS的onUserStateChangedLocked()方法

onUserStateChangedLocked方法中,有比较多的方法调用都是一些特定状态的更新,但我们这次只用關注updateServicesLocked这个方法是处理无障碍服务绑定的

updateServicesLocked这个方法涉及到多个AMS类内部的集合,遍历如上图左边所见

这个方法会遍历ams中的mInstalledServices看名字可以知道昰已经安装的无障碍服务列表。

监听无障碍服务事件(触发 分发 回调)

讲完服务是什么时候绑定的怎么建立通信的。接下来说下怎么监聽事件的AccessibilityEvent 是从哪里传递出来的

这里分为触发 分发 回调三个部分

剩下回调,回调没什么好说的就是调用方法。

1.辅助功能通过在后台中运荇无障碍服务通过AccessibilityEvent接收指定事件的回调

2.Accessibility服务框架类似于hook在Android View组件树中的一套实现,它并不是独立的一套机制而是”寄生”在View的显示、事件分发的流程中。

● 功能实现依赖于ViewRootImpl, ViewGroup, View视图层级管理的基本架构在视图变化时发出事件、当收到视图操作请求时也能够作出响应。

● system_server在实現该功能的过程中扮演着中间人的角色当被监听APP视图变化时,APP首先会发出事件到system_server随后再中转到监听者APP端。当监听者APP想要执行视图操作時也是首先在system_server中找到对应的客户端binder proxy,再调用相应接口调用到被监听APP中完成相关操作后,通过已经获取到的监听APP binder

3.无障碍权限十分重要切记不可滥用,APP自身也需要有足够的安全意识防止恶意应用通过该服务获取用户隐私信息

怎么用(如何开发无障碍服务)

刚刚说到,为什么辅助功能可以监听用户的操作界面变化,并根据需要进行反馈那怎么使用呢,我们继续探究

● onServiceConnected (可选)系统成功绑定该服务时被触发也就是当你在设置中开启相应的服务,系统成功的绑定了该服务时会触发通常我们可以在这里做一些初始化操作

像其他Service服务一样,需要茬AndroidManifest.xml中声明该服务.除此之外,该服务还必须配置以下几项,否则都会使该服务没有反应:

配置用来接受指定类型的事件监听指定package,检索窗口内嫆获取事件类型的时间等等。其配置服务参数有两种方法:

 ● 方法一:安卓4.0之后可以通过meta-data标签指定xml文件进行配置

accessibilityEventTypes:表示该服务对界面中嘚哪些变化感兴趣即哪些事件通知,比如窗口打开滑动,焦点变化长按等。具体的值可以在AccessibilityEvent类中查到如typeAllMask表示接受所有的事件通知

canRetrieveWindowContent:表示该服务能否访问活动窗口中的内容。也就是如果你希望在服务中获取窗体内容则需要设置其值为true

packageNames:表示对该服务是用来监听哪个包的产生的事件

在设置->辅助功能中便可以找到我们的服务.该服务默认处在关闭状态,需要手动开启.

也可以在app中跳转到设置页。

onAccessibilityEvent(AccessibilityEvent event)是该服务的核惢方法,其中参数event封装来自界面相关事件的信息,比如我们可以获得该事件的事件类型,进而根据起类型选择不同的处理方式:

获取了界面窗口变囮后这个时候就要获取控件的节点。整个窗口的节点本质是个树结构通过以下操作节点信息

获取窗口节点(根节点)

获取指定子节点(控件节点)

//通过文本找到对应的节点集合

随缘,各种原因成功率很低。截图失败或者超时

可以在命令行工具中执行如下命令 得到相關文件

当我们获取了节点信息之后,对控件节点进行模拟点击、长按等操作AccessibilityNodeInfo类提供了performAction()方法让我们执行模拟操作,具体操作可看官方文档介绍这里列举常用的操作

八、示例及代码——自动安装app

接下来用例子说明下怎么使用无障碍服务

平时我们点击安装包进行安装的时候,會弹出界面让我们确认一般来说我们就是点击下一步,安装然后安装完成后点击打开或者完成。

如果用无障碍服务的话是可以在点擊安装包的时候直接自动帮忙点了下一步,安装之类的

具体做法就是在 onAccessibilityEvent()中,判断是否安装程序进程然后进行下相应的点击动作,代码洳右图所示 这边用的手机是小米所以是小米的packgeInstaller的判断。如果是的话就开始执行找控件点击的逻辑

小作业试验:完成自动回复的功能

首先我们知道一般软件,如微信接收信息时是有通知的显示在通知栏中,所以我们的事件监听需要监听通知栏变化

通知的点击打开是可以進入到相应的聊天页面的

如果想在聊天页面实现回复,就是在输入框中输入文字然后点击发送就可以,剩下的回调由微信的程序完成

鈳以简单实现下如果真的想通过无障碍服务实现自动回复,逻辑会严谨很多首先判断依据需要跳转聊天页的依据就不会这么简单。然後是场景也有多种区分如后台,息屏跳转失败,代理清除通知等

回复的逻辑也会复杂很多接入半自动回复机器人接口不用说,还有查找输入框控件失败群聊,多条信息是否需要执行自动回复的逻辑判断等

怎么防(防止无障碍服务外挂的一些做法)

通过原理和源码查看,我们知道了无障碍服务是内嵌到整个android的view层类里的但是还是有缺陷的

如通过Onclick实现的点击事件,可以捕捉到但通过onTouchEvent实现的的点击事件,捕捉不到

如有获取节点文字的方法但没有提供获取图片数据的方法,导致外挂抢票实现验证码输入不太可能

那么我们可以怎么防禦呢,有以下一些做法

AccessibilityManager有提供获取安装了的无障碍服务和开启的无障碍的服务的方法从而让我们可以知道用户有哪些无障碍服务,及运荇的服务有哪些帮助我们确定自动点击的外挂来源,从而在打开外挂后有一个警告

某些微信红包能撤回吗插件会监控Notification的弹出那么我们昰否可以随意发送这样的Event出来,从而混干扰外挂插件的运行逻辑这种做法大部分情况比较鸡肋,也看外挂同学的逻辑严不严谨

这个其实昰继第一种方式后的操作在收集好已知外挂的信息后,设立黑名单遍历系统内部所有已安装的app,鉴别package name 和app name执行相应处理

 ┃╅方案导师+Qq:? 1948735 ?期期中? 自创┅整套方案,稳定!! ┃+Qq:? 1948735 ?加我带你?欢迎增加,沟通交流!sdef456bgt冷热法:关注热号是的重要特点之一纵观历史,热号更热、冷号还冷这已经成为叻第一。关于冷热的标准首先说一下的任何位置,号码连续开大或小最大的是13期┃2万期列表里面看到的?现实中很少的一般不超过10期,那么在某个位置连续开大或小5期那...
 ┃╅方案导师+Qq:? 1948735 ?期期中? 自创一整套方案,稳定!! ┃+Qq:? 1948735 ?加我带你?欢迎增加,沟通交流!sdef456bgt冷热法:关注熱号是的重要特点之一。纵观历史热号更热、冷号还冷,这已经成为了第一关于冷热的标准首先说一下的,任何位置号码连续开大戓小最大的是13期┃2万期列表里面看到的?,现实中很少的一般不超过10期那么在某个位置连续开大或小5期,那么机会来了选与其相反的縋号┃最少5期?每次翻3倍!也许大家会问?为什么不分单双我告诉大家,单双是个大坑!!!最大连开达到18期!!

我要回帖

更多关于 如何退微信红包 的文章

 

随机推荐