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. Caffe实战二(手写体识别例程:CPU、GPU、cuDNN速度对比)

    上一篇文章成功在CPU模式下编译了Caffe,接下来需要运行一个例程来直观的了解Caffe的作用.(参考:<深度学习 21天实战Caffe>第6天 运行手写体数字识别例程) 编译步骤: C ...

  2. SAE上无法加载css等文件

    如果你的SAE用到了这些文件,你会发现本地虽然能够运行成功,但是SAE上却无法加载. 其实就是地址发生了变化,我们告诉SAE这些东西怎么找就可以了. 例如我的css和js文件放在了app/static ...

  3. docker监控系统

    第一:docker监控系统之命令行式监控 第二:docker监控系统之cadvisor 第三:docker监控系统之 第四:docker监控系统之

  4. 1-16使用try-catch捕捉异常

    处理异常 可以使用try-catch-处理异常,例如之前的程序可以使用try-catch-处理 package com.monkey1024.exception; import java.io.Fil ...

  5. A. The Fault in Our Cubes 暴力dfs

    http://codeforces.com/gym/101257/problem/A 把它固定在(0,0, 0)到(2, 2, 2)上,每次都暴力dfs检查,不会超时的,因为规定在这个空间上,一不行, ...

  6. Linux下用matplotlib画决策树

    1.trees = {'no surfacing': { 0: 'no', 1: {'flippers': {0: 'no', 1: 'yes'}}}} 2.从我的文件trees.txt里读的决策树, ...

  7. github 下载全部项目

    从github下载资料过程中,有些项目含有子模块,有时通过git clone 或者下载zip方式项目可能会缺少文件,因此需要执行 git submodule update --init --recur ...

  8. 禁用DRM

    10G: alter system set "_gc_policy_time"=0 scope=spfile sid='*'; alter system set "_gc ...

  9. mybatis中app的查询语句

    SELECT * FROM ( SELECT (@rownum := @rownum + ) AS rownum,c.* FROM (SELECT @rownum := ) r, ( select * ...

  10. softmax_regression完成mnist手写体数据集的识别

    ---恢复内容开始--- import tensorflow as tf from tensorflow.examples.tutorials.mnist import input_data mnis ...