我们经常调试Android
设备的时候, 会有类似打开Android
开发选项中这种需要点击多次去点击才能触发后门的操作, 如果我们去做一些测试, 每次都要手动去做, 很麻烦, 我们可以考虑使用脚本完成.
我们一般去模拟去触摸屏幕上的某个点, 通常是利用getevent -l tp事件
来拿到那个触摸的坐标值, 然后使用命令adb shell input tap x y
来实现点击操作, 这种操作单次可以, 但是如果需要快速多次点击的话, 即使你死循环这个命令, 你还是会发现速度跟不上. 这是因为adb
是java
环境的, 发送到手机后, 系统需要去写文件, 然后响应事件, 所以会很慢.
这里假设tp
的的事件是dev/input/event6
, 通过命令cat dev/input/event6 > sdcard/event6
, 点击一次, 将产生的数据重定向到sdcard/event6
这个文件里, 按ctrl+c
结束, 去cat
这个文件会发现是乱码.
接下来就可以通过脚本实现快速点击了
adb shell "while : ; do dd if=/sdcard/event6 of=/dev/input/event6 ;sleep 0.1; done" //可加0.1s的延时, 防止机器反应不过来
执行后你会发现点击速度很快.那么又有一个问题, 如果我们只需要快速点击20次就行, 不要一直快速点击该如何实现呢?
第一种方式:
adb shell "for i in `seq 1 20`; do dd if=/sdcard/event6 of=/dev/input/event6;sleep 0.1; done"
这种命令使用powershell
执行是可以的, 但是bat
就不行, 具体原因目前我还不清楚. 至于bash
是否可以, 还没尝试. 理论上可行.
第二种方式:
我们将记录的单次数据改为记录多次就可, 还是利用命令cat dev/input/event6 > sdcard/event6
, 快速点击直到触发隐藏界面, 按ctrl+c
结束. 利用命令:
adb shell "dd if=/sdcard/event6 of=/dev/input/event6"
这个命令在bat
与powershell
下都是可以成功执行的. 稍微难以控制的点就是你在快速点击的时候, 点击次数可能会过多, 这个需要稍微注意一下.