logo
登录 / 注册

技术干货 | 群控软件技术研究

头像
网易智慧企业技术+
22-08-11 · 智慧企业技术+


导读:群控系统一般由多个部分组成,例如在手机端运行的服务、在手机端用于模拟输入的输入法、在 PC 端用来对所有设备操作与监控的中控台、在服务器中运行的连接所有设备的服务端等。本文主要介绍对群控软件技术的相关研究与实践。



文|李伊洋

网易易盾 Android 安全工程师



群控功能


区别于模拟点击工具,群控系统一般由多个部分组成,例如在手机端运行的服务、在手机端用于模拟输入的输入法、在 PC 端用来对所有设备操作与监控的中控台、在服务器中运行的连接所有设备的服务端等。


 群控系统的组成 


作为一个系统,群控系统由 PC 中控模块、手机通信模块、功能实现模块三部分组成,但是不一定每个模块都是独立或是独一的,用某智控产品举例,只有 PC 中控软件与一个 APK 安装包两个软件,而某助手软件包含 PC 中控软件、输入法 APK、通信 APK、UIAutomator 功能 APK 四个软件。


一、PC 中控模块


PC 中控软件是整个系统的核心。核心功能可以分为对设备的监控与控制、对脚本的编写与控制两个部分。


对设备的监控是指会有大量的设备屏幕在这里被展示,通过颜色或是一些小标志,可以看到对应设备的手机通信模块是否正常运转。当指令下发时,没有正确执行指令的设备,由于屏幕不一致就会显现出来。黑灰产厂商能够快速排查问题,保证设备墙正常运转。这部分功能依赖于 adb 或是网络通信,做法可以根据手机内的通信模块而改变。



脚本的编写主要是依赖于对手机 Activity 树状结构的解析,使得 View 信息能被脚本开发人员获取,通过 View 的 id 或是 text 属性,从而定位 View 的坐标,完成脚本开发。



同时部分中控软件也支持脚本市场的功能,可以直接编写脚本开发人员已经编写好的脚本。



脚本由 PC 中控软件控制下发,做到批量执行、定期执行、延期执行、批量停止等操作。



二、手机通信模块

主要用于对 PC 中控软件的指令进行解析,以及将屏幕图像传递给 PC 中控软件。以某老牌群控软件为例。
接受指令:


也用于弹出部分提示信息,例如查找指定设备,则会发出声音,并提示关闭提示倒计时:



三、功能实现模块


每个群控系统都有他们特有的做法用来实现具体的功能。在整个群控系统中,这个模块是最接近被保护应用的,目前的检测思路主要也是围绕功能模块进行。下文会对这里提到的各个功能进行更具体的分析。


  • 获取 Activity 结构

    脚本开发和使用中,都需要获取到 View 的信息。为了获取这个信息,需要手机内的功能模块辅助完成。



  • 模拟点击

    模拟正常用户的点击,触发应用按钮、屏幕滑动等内容。模拟点击一般不会是单独的一个 apk,常见集成在输入法内。


  • 其他
    截屏、开关 WIFI、重启设备等小功能就不再展开。



 功能划分 


从群控实现了的功能出发,可以将其分为以下的功能:


对系统的操作

  • WIFI 开启或关闭

  • 流量开启或关闭

  • 应用的安装与卸载

  • 应用 Activity 的启动

  • 通讯录管理

  • 文件的互传

  • 剪贴板的互转

  • 获取 Activity 的树状结构

  • 其他


对系统的监听

  • 短信及其内容的监听

  • 屏幕变化的监听

  • 其他


对输入的模拟

  • 文本输入的模拟

  • 坐标点击的模拟

  • 多选框选择的模拟

  • 其他


对自身的逻辑

  • 录制操作的保存

  • 已录制操作的重放

  • 已编写脚本的解析

  • 延迟脚本的处理

  • 各个部分间的通信

  • 多个脚本的控制

  • 其他



技术细节


 具体做法 


群控往往是跨端实现功能,现在基本可分为本地群控和云控,区别在于是否开放外网操纵设备。


云控的好处在于设备本身可以是分散的,例如黑灰厂商向一个正常设备租下一段时间,通过云端发送指令操作,完成黑灰操作后再结算费用给散户。这样从设备的聚集性上就很难看出异常,不论是 ip 还是 gps 都没有任何的聚集性。


同时云控也有另外的做法,同样使用传统设备墙,设备墙链接一个中控服务器,服务器开放外网,这样就能随时随地操作设备墙,主要用于大型团队的操作。而本地群控就是最传统的做法,如果设备较少就可以直接通过集线器连接电脑,电脑直接通过群控系统跨端操作设备墙。如果设备过多,可以加入一个中转的中控服务器,但是不连接外网,而是通过路由器等在内网直接接受指令。



(图源:侠客助手官网)


 功能模块原理 


模拟点击

模拟点击的具体内容可以查看之前发过的 Android 模拟点击研究相关文章。


控件查找

控件查找对于任何一个群控系统与自动点击工具来说都是必备功能。除开通过 opencv 库做到的找图和 OCR 找字之外,对于控件查找更重要的能力在于对其属性的获取。例如一个界面中若是有两个都是长得一模一样的按钮,那么不论是找图还是 OCR 都只会返回第一个值,后一个按钮就失效了。


于是出于脚本稳定性考虑,群控系统和自动点击工具都会想方设法得去获得控件的属性,例如唯一标识的 id。


以现有的样本为例,群控系统获得控件属性的办法有两种,分别是类 Auto.js 做法与类 UIAutomator 做法。


  • 类 Auto.js

    该做法强依赖于无障碍服务,所以需要注册无障碍服务,但并非所有软件都需要注册该服务。


*/com.stardust.autojs.core.accessibility.AccessibilityService


优点:开发容易且稳定。

缺点:依赖无障碍服务,通过获取无障碍服务列表可以检测。


  • 类 UiAutoMator

    这种做法来源于测试工具,appium 也是同样的做法。


    大致思想是将 UIAutomator 调试桥植入设备,然后可以通过 adb shell uiautomator dump 命令,将当前的 activity 的树状结构 dump 成一个 xml 形式,然后解析该 xml,就可以得到 activity 中的所有控件属性。


    可以看到在没有使用无障碍服务的情况下,获得了所有的 View 信息。



优点:脱离了对无障碍服务的依赖,使得检测更困难

缺点:类似于早期的 monitor 工具,所有的 xml 都需要 dump 然后解析,时效性较差且效率较低



有效的检测方案


 网络通信 


目前发现群控基本都依赖于 socket 通信,对于一些处理不是很好或是开发时间较久的群控系统,可以通过复占端口的方式检测。



 模拟点击 


模拟点击方式通过 adb 权限,MotionEcent.obtain 模拟,injectInputEvnet 注入,易盾 Android 反外挂能力已经拥有了对这种模拟行为的检测能力。



 安装包 


在上文中提到过的相关模块,都可以作为检测的依据。



 活动推荐 



技术干货 | 群控软件技术研究脉脉
阅读 5
声明:本文内容由脉脉用户自发贡献,部分内容可能整编自互联网,版权归原作者所有,脉脉不拥有其著作权,亦不承担相应法律责任。如果您发现有涉嫌抄袭的内容,请发邮件至maimai@taou.com,一经查实,将立刻删除涉嫌侵权内容。
相关推荐
最新发布
大家都在看
热门人脉圈
    头像
    我来说几句...