简介

按键触摸类模拟点击软件最早开始于PC时代,指的是可以通过设置、脚本控制等方式去实现模拟点击,解放双手,达到自动化操作的目的。在Android中,模拟点击对应的就是触发屏幕点击事件,多用于游戏中完成自动化操作、应用中抢红包等操作,随着现在的技术更新,一些模拟点击实现的方式也开始使用了一些特殊的技巧。

从触屏到执行

首先看一个完整点击操作背后的流程(图1来自网络):

图1 屏幕点击完整流程

从用户点击屏幕开始,触发中断,在内核态执行以下流程,见图2:

图2 从内核态过渡到用户态

直到进入用户态,开始访问设备驱动文件,进行事件的监听和分发操作,一步步走到UI层显示给用户。由整个流程可以看出用户态会走很多下发流程,如果在这些过程中能够构造点击事件传入,依然能够在UI层显示给用户。

实现模拟点击的方式

1、 Android单元测试Instrumentation框架,局限性比较严重,实现上有很多限制;
2、 AccessibilityService辅助功能类,可以监听手机的焦点、窗口、按钮点击等,只需要给予辅助功能相应的权限即可,无需root权限。缺点就是只适合一些定制化的功能,而且如游戏类的没有太多的控件,无法去很好的捕捉监控,当然该方式无需root权限的特点让其应用的场景也很多,如抢红包软件、应用市场自动化安装,都是通过它实现的;
3、 通过sendevent命令实现,向该命令传入参数设备路径名(/dev/input/event*)、事件类型、事件代码、事件值即可,通过getevent命令可以查看对应哪个设备是触摸屏驱动,但需注意的是,这些设备文件设置的权限是普通应用权限是无法访问的(见图3),因此需要root权限去实现;

图3 输入设备文件属性

4、 原理和3一样,只是利用代码实现,通过ioctl向设备文件中直接写入数据,如上,需要使用root权限去执行,目前市面上触摸精灵类的应用就是通过该方式实现的;
5、 找到从设备驱动文件开始到UI显示的过程中的某一个节点,构造点击事件传入。如果是应用中实现的话这种方式不难,但由于触摸类应用都是第三方的,因此实现的方式需要一些考究,在分析的过程中发现有一些厂商通过这种方式实现的,如触动精灵。
(注:只列举一些和本文涉及分析有关的模拟点击方法)

控制模拟点击的逻辑

模拟点击的方式实现了,但还缺少对点击时机的控制,多久点击?哪里点击?点击方式?这些是保证模拟点击有效性的根本。
1、应用类的模拟点击逻辑控制
通过辅助功能AccessibilityService实现的应用模拟点击中,可以通过推送消息判断是否需要进入到相应应用中,还可以获取到控件的信息,如文字,来判断是否为需要点击的控件,由于是系统自带的功能,已经有很好的接口去实现了。

2、游戏类的模拟点击逻辑控制
而如触摸精灵类应用,针对游戏的模拟点击没有这样的接口,因此他们的实现主要通过脚本去构造点击的逻辑,让脚本的解释器去解析参数传递给相应功能接口实现点击过程,这里以触动精灵为例,逻辑实现的流程大概如下:
①用户编写lua脚本或者通过屏幕录制lua脚本;
②程序启动后加载lua脚本,通过程序中的lua解释器去执行脚本内容,获取相应参数;
③将相应参数构造为规范的结构信息交由模拟点击功能代码去解析,并触发点击事件。

图4 触动精灵模拟点击逻辑执行流程

翻阅了他们的脚本开发文档,功能非常强大,包含了延时、点击、区域查色、文字识别等等功能,足够完成游戏内的许多功能。

逆向分析模拟点击的具体实现

原理和流程都清楚了,接下来具体看实例代码是如何实现的。

按键精灵:
采用比较简单的策略,也是市面上普遍的应用,直接向设备文件写入数据,具体分析功能代码及截图:
① 更改设备文件权限

图5 更改设备文件权限

② 打开设备、写入数据(C实现代码)

图6 向设备文件写入点击事件的示例代码

触动精灵:
分析老版本的触动精灵发现其实也是通过向设备直接写入的形式实现,不过在最新的版本中实现的方式比较特殊,是在触摸事件中间传递过程的一个节点上进行了模拟构造触摸事件,然后传入,下面分析他的具体过程。

① 获取root权限执行命令启动子进程

图7 ROOT权限启动进程

② 在文件中找到执行的命令,发现其实是通过app_process命令执行了一个jar包,那么关键实现就在jar包中了

图8 执行jar命令

③ 关键点1:反射获取injectInputEvent方法,该方法正是触摸事件中间流程会经过的一个点,正是它找到的切入点

图9 反射获取injectInputEvent方法

④ 关键点2:既然反射调用就能执行点击,为何还需要root权限执行呢?查看源码,发现在执行的过程中经过native层时,在事件分发的代码中对权限做了判断,需要Uid为0或是否有injectevent的权限


图10 判断Uid是否有权限执行

⑤ 关键点3:构造motionevent对象,反射调用injectinputevent方法执行

图11 构造motionevent执行injectinputevent

到此,实现的具体过程大概如此,方式比较简单也较新颖,也增加了对识别这种模拟点击软件的难度,一些更细节的地方没有列举出来(如injectinputevent执行流程),可以参考相关资料或者源码查看。

参考
http://bbs.pediy.com/thread-215896.htm
http://www.jianshu.com/p/a72b55569dd5

Android中模拟点击软件的实现原理探究相关推荐

  1. Android中模拟点击的两种方式

    目前这两种方式,后面有的再继续添加. 1.当我们知道View的时候可以采用 view. performClick()方法 是使用代码主动去调用控件的点击事件(模拟人手去触摸控件) 2.点击也就是相当于 ...

  2. Android 关于模拟点击和Hook框架的杂谈

    1. 背景 就跟我们以前玩页游挂机一样,Android端也有游戏,而且样式繁多,如果重复的操作每次都要自己重复一遍操作,那不得烦死,所以就有了这篇文章,本文仅探讨方案,大家可以尝试.而且现在的模拟器( ...

  3. android 辅助功能 模拟点击,Android模拟点击的四种方式

    导论 在Android中模拟一个点击事件有三种方式是通过模拟MotionEvent来实现:一种是通过ADB来实现:一种是通过Instrumentation测试框架来实现 第一种:模拟MotionEve ...

  4. seo模拟点击软件_网站排名优化第一课:如何看待快排?SEO排名工具到底香不香!...

    2020年4月13日,一位长沙浏阳市的客户打电话给我,问我怎么能把网站的关键词做到首页,他说现在找的公司用快排系统给他们做排名,但是已经过去三个月了,网站的排名还是没有一点起色,很是捉急.下面我就针对 ...

  5. Android中RecyclerView点击item展开列表详细内容(超简单实现)

    请注明出处: http://blog.csdn.net/qq_23179075/article/details/79230457 Android中RecyclerView点击item展开列表详细内容( ...

  6. seo模拟点击软件_网站用软件刷排名好不好?

    最近,有些同事和朋友问我一些关于百度刷排名的问题,主要是利用一些刷网站排名的软件来欺骗百度,这也让我想起了曾经看到过的一则消息,两个SEO人员利用软件刷百度排名,影响百度搜索结果的方式,为自己创收,结 ...

  7. android+usb模拟点击,Android后台模拟点击探索(附源码)

    工作中我们需要自制一套工具,其中遇到需要模拟点击事件的需求,类似按键精灵的功能,支持后台持续运行,满足触发条件时完成点击. 经过一番探索,一共整理出两种不同的方案:AccessibilityServi ...

  8. android 模拟点击某点,Android后台模拟点击探索(附源码)

    工作中我们需要自制一套工具,其中遇到需要模拟点击事件的需求,类似按键精灵的功能,支持后台持续运行,满足触发条件时完成点击. 经过一番探索,一共整理出两种不同的方案:AccessibilityServi ...

  9. 静态路由_在Android中模拟静态方法:让我们总结一下

    静态路由 在Android中编写本地单元测试时,面临的局限性之一是测试是针对没有任何代码的android.jar版本运行的. 如文档所述,必须模拟对Android代码的任何依赖关系. 一个简单的单元测 ...

最新文章

  1. 你哪来这么多事(五):职工信息插入
  2. 电脑桌面壁纸app_「Dynamic Wallpaper」Mac动态桌面壁纸软件,200+精美视频素材
  3. Lync 2010迁移Lync 2013 PART6:迁移CMS
  4. BAT批处理文件无法运行提示“/E /I /Y ‘XCOPY‘ 不是内部或外部命令,也不是可运行的程序或批处理文件”解决方法
  5. linux如何取文件列名,Linux_根据表名和索引获取需要的列名的存储过程,复制代码 代码如下: create proc p - phpStudy...
  6. sqlserver没有维护计划_设定数据库备份计划,安全放心不怕事!
  7. Debug pycharm: Error running *.py, cannot run program, No such file or pragram
  8. bzoj4773 负环
  9. Java 11:运行单文件程序和“ shebang”脚本
  10. gdb 调试命令的使用及总结
  11. 动手学深度学习(PyTorch实现)(四)--梯度消失与梯度爆炸
  12. python flask_Python Flask框架详解
  13. RubyOnRails 文件下载
  14. C++ primer(第五版)简单读书笔记
  15. 什么是虚拟主机?虚拟主机是什么意思
  16. 阿里3年被裁,赔偿n+3,到手30多万!感谢阿里让我人生开挂!
  17. TZ环境变量,时区,夏令时
  18. kernal tch 下载 天正_kernal tch 下载 天正_tch kernal.arx
  19. 如何分析一个Python虚拟机壳并拿走 10000 ETH
  20. Linux系统—第13章—网络管理实践1

热门文章

  1. 分享10大自动化测试框架,你用过几个?
  2. html转换成canvas一片空白,html2canvas截图空白问题怎么解决 html2canvas截图空白问题解决方法...
  3. 史上最严数据保护条例欧盟GDPR今日生效,你可能需要这版中文全文(上)
  4. 在PHP中全面阻止SQL注入式攻击之三
  5. 计算机中的科学计数法
  6. illustrator插件-画板功能开发-插入页码-js脚本开发-ai插件
  7. Roblox剑九之剑二
  8. Windows.h 常用API函数【转】
  9. 数控车床铣床仿真加工操机视频教程
  10. Vue:el-dialog可拖拽