简介
按键触摸类模拟点击软件最早开始于PC时代,指的是可以通过设置、脚本控制等方式去实现模拟点击,解放双手,达到自动化操作的目的。在Android中,模拟点击对应的就是触发屏幕点击事件,多用于游戏中完成自动化操作、应用中抢红包等操作,随着现在的技术更新,一些模拟点击实现的方式也开始使用了一些特殊的技巧。
从触屏到执行
首先看一个完整点击操作背后的流程(图1来自 络):
直到进入用户态,开始访问设备驱动文件,进行事件的监听和分发操作,一步步走到UI层显示给用户。由整个流程可以看出用户态会走很多下发流程,如果在这些过程中能够构造点击事件传入,依然能够在UI层显示给用户。
实现模拟点击的方式
1、 Android单元测试Instrumentation框架,局限性比较严重,实现上有很多限制;
2、 AccessibilityService辅助功能类,可以监听手机的焦点、窗口、按钮点击等,只需要给予辅助功能相应的权限即可,无需root权限。缺点就是只适合一些定制化的功能,而且如游戏类的没有太多的控件,无法去很好的捕捉监控,当然该方式无需root权限的特点让其应用的场景也很多,如抢红包软件、应用市场自动化安装,都是通过它实现的;
3、 通过sendevent命令实现,向该命令传入参数设备路径名(/dev/input/event*)、事件类型、事件代码、事件值即可,通过getevent命令可以查看对应哪个设备是触摸屏驱动,但需注意的是,这些设备文件设置的权限是普通应用权限是无法访问的(见图3),因此需要root权限去实现;
翻阅了他们的脚本开发文档,功能非常强大,包含了延时、点击、区域查色、文字识别等等功能,足够完成游戏内的许多功能。
逆向分析模拟点击的具体实现
原理和流程都清楚了,接下来具体看实例代码是如何实现的。
按键精灵:
采用比较简单的策略,也是市面上普遍的应用,直接向设备文件写入数据,具体分析功能代码及截图:
① 更改设备文件权限
触动精灵:
分析老版本的触动精灵发现其实也是通过向设备直接写入的形式实现,不过在最新的版本中实现的方式比较特殊,是在触摸事件中间传递过程的一个节点上进行了模拟构造触摸事件,然后传入,下面分析他的具体过程。
① 获取root权限执行命令启动子进程
③ 关键点1:反射获取injectInputEvent方法,该方法正是触摸事件中间流程会经过的一个点,正是它找到的切入点
⑤ 关键点3:构造motionevent对象,反射调用injectinputevent方法执行

图11 构造motionevent执行injectinputevent
到此,实现的具体过程大概如此,方式比较简单也较新颖,也增加了对识别这种模拟点击软件的难度,一些更细节的地方没有列举出来(如injectinputevent执行流程),可以参考相关资料或者源码查看。
参考
http://bbs.pediy.com/thread-215896.htm
http://www.jianshu.com/p/a72b55569dd5
声明:本站部分文章及图片源自用户投稿,如本站任何资料有侵权请您尽早请联系jinwei@zod.com.cn进行处理,非常感谢!