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. C++类成员函数与成员变量的内存布局

    一.成员函数 成员函数可以被看作是类作用域的全局函数,不在对象分配的空间里,只有虚函数才会在类对象里有一个指针,存放虚函数的地址等相关信息.

  2. 494 Target Sum 目标和

    给定一个非负整数数组,a1, a2, ..., an, 和一个目标数,S.现在你有两个符号 + 和 -.对于数组中的任意一个整数,你都可以从 + 或 -中选择一个符号添加在前面.返回可以使最终数组和为 ...

  3. canvas基础绘制-绚丽倒计时

    效果图: html: <!DOCTYPE html> <html lang="en"> <head> <meta charset=&quo ...

  4. canvas基础绘制-倒计时(下)

    digit_1.js: digit = [ [ [0,0,1,1,1,0,0], [0,1,1,0,1,1,0], [1,1,0,0,0,1,1], [1,1,0,0,0,1,1], [1,1,0,0 ...

  5. BaseAtapter

    本文用于实现一个通用的BaseAdapter类,统一产品的Adapter类,作为一个工具类,减少重复性工作,增加开发效率. 序 我们在开发项目的过程中,经常会用到ListView.GridView这一 ...

  6. ubuntu下安装memcache及memcached

    memcache 和 memcached 有什么区别呢? memcache最早是在2004年2月开发的,而memcached最早是在2009年1月开发的.所以memcache的历史比memcached ...

  7. laravel的scout包安装及laravel-es包安装

    安装laravel/scout 作用:搜索驱动,可随时更换驱动,上层业务逻辑可不用改变 官网文档:https://laravel-china.org/docs/laravel/5.4/scout/12 ...

  8. IDEA一些设置

    1. 设置字体为Consolas,Size:16, Line spacing: 1.1 2. 设置智能提示大小写不敏感 在设置中搜索sense, 找到配置节点 Editor->General-& ...

  9. VTK教程系列:VTK基础及应用开发教程

    由于OpenCV不能使用,只能使用VTK库的图像处理库,暂时还没有找到其他可以全面替代的库: CSDN东灵工作室:http://blog.csdn.net/www_doling_net/article ...

  10. 解决selenium.common.exception.WebDriverException:Message:'chromedriver' executable needs to be in Path

    'chromedriver' executable needs to be in Path 声明:本人萌新,刚学python不久记录一下自己的坑,发出来若能帮助到一些人尽早解决问题那便是极好的,( ̄▽ ...