Android Accessibility实践 程序检查微信被删好友
原理
通过Android 无障碍辅助功能实现模拟点击控件来实现
检查被删好友有两种方法:
向好友发送一条消息,如果对方已经把你删除,则消息发送失败。
建群法:新建一个不大于40人的群,如果其中有好友已经把你删除,微信会有条消息提示
-
整体执行步骤:启动微信->点击+号->发起群聊->选择35个联系人->点击确定->点击群里详情->删除并退出,依次轮询执行,知道所有好友轮询结束
本文采用建群的方式进行检查。
本人微信有300好友,全部检测一遍只需3分钟即可,亲测已经成功,
但是建群没有超过40人 会有个别好友会受到打扰消息,可能是微信哪里的bug,具体原因未知。
说明和app预览
此软件通过无障碍辅助进行模拟点击,无任何外挂木马,无封号风险
使用方法
Android 手机一部,登录微信账号
安装辅助软件apk下载地址请点击这里(https://raw.githubusercontent.com/wlj32011/InspectWechatFriend/master/app-release.apk)
打开辅助软件-点击打开辅助功能按钮,跳转到无障碍辅助设置把辅助开关打开。
点击开始检查按钮,开始一系列的模拟点击,检查完成后会跳转到一个列表会把被删好友列表展示出来。
2
实现步骤
新建Android Studio 工程,新建一个Services类集成AccessibilityService,实现对应方法,详细介绍见代码注释
在manifests.xml文件中注册此服务:
新建res/xml/inspect_wechat_friend.xml文件
实现对某个控件的点击
通过getRootInActiveWindow方法获取当前窗口信息,通过findAccessibilityNodeInfosByText方法找到当前对应控件进行模拟点击
在当前页面查找文字内容并点击
检查viewId进行点击
在当前页面查找对话框文字内容并点击
监听窗口事件
获取当前窗口的classname 通过classname进行判断当前手机处于某个界面
下面代码逻辑:
如果当前为微信主页面,则点击+号然后点击发起群聊
如果当前页面为创建群聊选择联系人界面,则开启一个while循环模拟滚动时间以及点击选择框,当选择用户到39人时,则模拟点击确定按钮发起群聊。
发起群聊后,微信会返回哪些用户不是你的好友,这个时候,取到当前控件的字符串并截取用户列表保存到本地。
获取到不是好友的用户后,点击右上角进入群聊详情,点击删除并退出
退出后又回到微信主页面,依次执行1 2 3 4步骤,直到滚动到联系人最底部为止。
当所有用户执行完成后,则启动检查结果界面,列出所有被删好友。
下面为对应逻辑代码:
监听手机当前窗口状态改变 比如 Activity 跳转,内容变化,按钮点击等事件
模拟创建群组步骤
退出群组步骤
模拟获取被删好友列表步骤
ui automator viewer的使用
uiautomatorviewer可以检查当前手机的布局结构,如果想更精确的找到控件位置,uiautomatorviewer必不可少!
使用方法:
搭建Android开发环境,并设置环境变量,这里就不说了。
在Android Studio 中打开 terminal 窗口,或者在终端直接执行命令
$uiautomatorviewer
整体效果图:
项目源码github地址:
https://github.com/wlj32011/InspectWechatFriend