1. getevent命令

我们首先是根据adb shell getevent命令获取到被点击位置的信息。

这里要说明的是,不同的手机手机获得的点击输出是不一样的。以我的真机为例,输出如下

本文原创,转载请注明出处:http://blog.csdn.net/seu_calvin/article/details/51916845

/dev/input/event0 3 39 3e1
/dev/input/event0 1 14a 1
/dev/input/event0 1 145 1
/dev/input/event0 3 35 406 //x坐标
/dev/input/event0 3 54 1083 //y坐标
/dev/input/event0 0 0 0
/dev/input/event0 3 39 ffffffff
/dev/input/event0 1 14a 0
/dev/input/event0 1 145 0
/dev/input/event0 0 0

我看到网上很多人的输出很简单,这样分析起来还比较简单。因厂家而异吧,我的输出就有些复杂,通过我的大量点击测试分析,在本机上,上面除了xy坐标,其他指令是固定的,当然我也获得很多其他指令(每一行的倒数第二个数),因为不是必须的,所以没列出来。经过查阅资料,其他信号的对应信息如下。

#define ABS_MT_TOUCH_MAJOR 0x30 /* Major axis of touching ellipse */
#define ABS_MT_TOUCH_MINOR 0x31 /* Minor axis (omit if circular) */
#define ABS_MT_WIDTH_MAJOR 0x32 /* Major axis of approaching ellipse */
#define ABS_MT_WIDTH_MINOR 0x33 /* Minor axis (omit if circular) */
#define ABS_MT_ORIENTATION 0x34 /* Ellipse orientation */
#define ABS_MT_POSITION_X 0x35 /* Center X ellipse position */
#define ABS_MT_POSITION_Y 0x36 /* Center Y ellipse position */
#define ABS_MT_TOOL_TYPE 0x37 /* Type of touching device */
#define ABS_MT_BLOB_ID 0x38 /* Group a set of packets as a blob */
#define ABS_MT_TRACKING_ID 0x39 /* Unique ID of initiated contact */
#define ABS_MT_PRESSURE 0x3a /* Pressure on contact area */

2. sendevent实现模拟长按

我很好奇如果把输出的这些指令原封不动地给系统返还回去会有什么结果,我以为会是简单的重复点击,可是把1中获得的信号全部通过shell命令输入,获得的竟然是长按的效果。很意外,具体是因为什么我也不清楚。可能在其他手机上就不是这个效果了。

这里需要注意的是,我们获得的是16进制,输入必须是10进制,需要自行转换一下。

根据不同的分辨率,获得的16进制如何转换为真实的坐标值,这篇博文已经讲述的很详细了。

其他的比如模拟点击,滑动,输入等操作已经在前面使用ADB进行模拟点击的文章里介绍过了。


3. 密码获取

通过2中的链接文,已经介绍过了如何通过代码形式执行Shell命令。

这里当然是将“getevent”作为命令写入脚本啦。注意要开启子线程,否则会引起ANR。

然后就开启了用户点击,我们只要拿到Runtime.getRuntime().exec("su").getInputStream()流并分析“35”以及“36”后的16进制数,即可得到用户的点击位置。这个流是错误流和正确流分开的,注意处理不当会阻塞。可按照以下几种方法避免阻塞。

(1)可以通过将redirectErrorStream 属性设置为true合并错误流和正确流。

(2)显然可以想到两种流,开启两个线程去接收。

(3)在已知输出顺序的情况下,调整处理流的代码顺序。(不通用)

具体的如何从用户大量的点击事件中获取密码。便是根据算法来决定的了,算法越精密,获取到用户密码的可能性越大。

这里可以提供一个思路:

1. 通过Accessibility机制只监听支付宝。具体如何配置已经在Accessibility机制实现模拟点击中介绍过了。

2. 在获取到点击坐标之后,可以通过判断连续6个点均处于屏幕的下方来认为这是一组密码(当然是不准确的),具体的筛选密码的条件可以通过你的聪明才智去实现。

拿到密码之后,便可以通过模拟点击去实现自动转账了。这个前面已经使用ADB Shell命令实现模拟点击中介绍过了。

Android开发——后台获取用户点击位置坐标(可获取用户支付宝密码)的更多相关文章

  1. JavaScript 获取鼠标点击位置坐标

    在一些DOM操作中我们经常会跟元素的位置打交道,鼠标交互式一个经常用到的方面,令人失望的是不同的浏览器下会有不同的结果甚至是有的浏览器下没结果,这篇文章就上鼠标点击位置坐标获取做一些简单的总结,没特殊 ...

  2. Android开发系列(一)Activity与Fragment获取屏幕获取屏幕像素的不同方式

    Activity中常用的获取屏幕像素代码: //获取屏幕像素相关信息 DisplayMetrics dm = new DisplayMetrics(); getWindowManager().getD ...

  3. Android开发中EditText的点击Enter键焦点改变处理(获取焦点和失去焦点交互变化)

    最近因为项目需要,需要将EditText的焦点转移到LineraLayout上: 即为EditText输入完毕后,点击回车键或者按压其他嵌入式android设备的OK键,获取LineraLayout的 ...

  4. Android开发——使用ADB Shell命令实现模拟点击(支付宝自动转账实现)

    首先声明,本人反对一切利用技术的违法行为 本文的实现代码已经销毁,本文以介绍流程为主 1.这里所说的模拟点击不是在自己的APP里点击,点自己APP上的控件没什么好说的 不仅是支付宝转账,其他的获取别人 ...

  5. Android开发——Accessibility机制实现模拟点击(微信自动抢红包实现)

    1. 何为Accessibility机制 许多Android使用者因为各种情况导致他们要以不同的方式与手机交互.对于那些由于视力.听力或其它身体原因导致不能方便使用Android智能手机的用户,And ...

  6. android开发学习笔记系列(1)-android起航

    前言 在学习安卓的过程中,我觉得非常有必要将自己所学的东西进行整理,因为每每当我知道我应该是如何去实现功能的时候,有许多细节问题我总是会遗漏,因此我也萌生了写一系列博客来描述自己学习的路线,让我的an ...

  7. Mac os 进行Android开发笔记(1)

    1> MAC OS Android环境搭建: 2>MAC OS  配置 Andoid ADB: 3>MAC OS 上进行Android真机调试: Android 开发环境搭建: 点击 ...

  8. 【转】Android开发笔记(序)写在前面的目录

    原文:http://blog.csdn.net/aqi00/article/details/50012511 知识点分类 一方面写写自己走过的弯路掉进去的坑,避免以后再犯:另一方面希望通过分享自己的经 ...

  9. 2019-7-4-win10-uwp-处理用户点击关闭按钮

    title author date CreateTime categories win10 uwp 处理用户点击关闭按钮 lindexi 2019-07-04 09:28:57 +0800 2019- ...

随机推荐

  1. flask跨域问题

    在Flask开发RESTful后端时,前端请求会遇到跨域的问题.下面是解决方法: 使用 flask-cors库可以很容易的解决   1 pip install flask-cors 两种方法,一个是全 ...

  2. 洛谷 P3935 Calculating

    虽然对这道题没有什么帮助,但是还是记一下:约数个数也是可以线性筛的 http://www.cnblogs.com/xzz_233/p/8365414.html 测正确性题目:https://www.l ...

  3. 构造 Bubble Cup 8 - Finals D. Tablecity

    题目传送门 题意:在1000*2的格子里,在每个小时能派出两个警察在两个地点搜查小偷,求在2015小时内能抓住小偷的方案. 分析:首先每次扫过一列即i1 i2从左往右扫,这样会漏掉小偷正好从间隙穿过的 ...

  4. 利用lsof去查看Unix/Linux进程打开了哪些文件

    利用lsof去查看Unix/Linux进程打开了哪些文件 今天用了一下lsof,发现这个linux的小工具,功能非常强大而且好用. 我们可以方便的用它查看应用程序进程打开了哪些文件或者对于特定的一个文 ...

  5. scau 17967 大师姐唱K的固有结界 分类暴力 + RMQ

    由于能放两次,那么分类, 1.连续使用,(这个直接O(n^2)暴力) 2.分开使用. 分开使用的话,首先暴力枚举,用T时间,能从第1个位置,唱到第几首歌,然后剩下的就是从pos + 1, n这个位置, ...

  6. session共享方法

    session数据保存在memcached,redis这种内存数据库内 memcache比较简单,使用的场景比较多.redis支持的数据类型多.而且数据具有期限,和session和期限可以配合使用 通 ...

  7. C++ thread operator= 右值引用 vector foreach

    这是 thread 的construct定义: default (1) thread() noexcept; initialization (2) template <class Fn, cla ...

  8. JS防止页面被其他网站iframe使用方法

    if(window.top !== window.self){ window.top.location = window.location;} 这句话的意识是说:如果当前窗体不是顶级窗体,就把自己变成 ...

  9. HttpMessageNotWritableException异常解决办法

    昨天做多对多的时遇到这个错误,网上找了一大堆,都没有解决掉,这个异常是说要解析的对象解析不了,就有可能该对象为null了,为了测试,我把数据库的数据都填上去    结果还是报错 看来是时候debug下 ...

  10. jdk1.8新日期时间类(DateTime、LocalDateTime)demo代码

    //获取当前时间 LocalDateTime d0 = LocalDateTime.now(); System.out.println(DataConvertUtil.localDateTimeToS ...