首先声明,本人反对一切利用技术的违法行为

本文的实现代码已经销毁,本文以介绍流程为主

1.这里所说的模拟点击不是在自己的APP里点击,点自己APP上的控件没什么好说的

不仅是支付宝转账,其他的获取别人百度云里的某个文件信息,或者获取别人邮箱APP里的邮件等都是可以实现的。

这里我们要实现的是,通过一定的触发条件,开启我们事先嵌入到应用代码里的脚本命令(其实就是Shell语句的代码实现),这个触发条件根据自己的想法随意指定,前提是屏幕必须亮着,才能实现任意位置的模拟点击。下面有几行代码是用来检查屏幕是否点亮并自动解锁点亮屏幕的代码。

接下来就介绍如何模拟点击。当然,我们的应用需要获得root权限。

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

private void checkScreen(Context context){
PowerManager pm = (PowerManager) context.getSystemService(Context.POWER_SERVICE);
if (!pm.isScreenOn()){
wakeUpAndUnlock(context);
}
}
private void wakeUpAndUnlock(Context context){
KeyguardManager km = (KeyguardManager) context.getSystemService(Context.KEYGUARD_SERVICE);
KeyguardManager.KeyguardLock kl = km.newKeyguardLock("unLock");
// 解锁
kl.disableKeyguard();
// 获取电源管理器对象
PowerManager pm = (PowerManager) context.getSystemService(Context.POWER_SERVICE);
// 获取PowerManager.WakeLock对象,后面的参数|表示同时传入两个值,最后的是LogCat里用的Tag
PowerManager.WakeLock wl = pm.newWakeLock(PowerManager.ACQUIRE_CAUSES_WAKEUP | PowerManager.SCREEN_DIM_WAKE_LOCK, "bright");
// 点亮屏幕
wl.acquire();
// 释放
wl.release();
}

2.模拟点击的实现最后需要注意的是:

2.1 模拟点击的位置选取

本例中的模拟点击是基于坐标的模拟点击,所以针对不同的手机分辨率以及不同的应用(此例中为支付宝),要写入代码的坐标也是不一样的。这个需要你们自己去获取。具体可以打开手机的开发者模式,进入开发者选项,打开获取指针位置,便可以拿到要点位置的坐标。

2.2 嵌入代码的脚本命令

首先需要通过代码打开支付宝应用,可以通过以下代码根据支付宝包名打开。

Intent intent = this.getPackageManager().getLaunchIntentForPackage(appPackageName);
startActivity(intent);

继而通过你自己的写的触发条件,当然是写入Service里的,进入我们的脚本逻辑。

使用Java执行Runtime.getRuntime().exec("su").getOutputStream(),获取了一个具有Root权限的Process的输出流对象,向其中写入字符串即可以Root权限被Shell执行。在获取输出流时最好还是判断是否为空,若不为空就没必要每一句shell命令都获取输出流了,这样会很卡。

下面介绍几种常见的模拟点击方式。

3.模拟点击的不同方式

3.1 模拟点击

//点击坐标点x=50  y=250的位置
adb shell input tap 50 250

3.2 模拟长按(这个比较复杂,后面会写文介绍)

3.3 模拟滑动

//划屏操作,前四个数为坐标点,后面是滑动的时间(单位毫秒)
adb shell input swipe 50 250 250 250 500

3.4 模拟输入字符串(有无双引号均可)这个功能可以在被控手机上填入我们的支付宝帐号

//输入字符abc
adb shell input text abc

3.5 模拟点击手机自带的功能键,Home,Menu,Back等

<span style="font-family: "Microsoft YaHei";">//实现点击功能键, KeyCode为功能键   本文最后会列举出所有的keyCode对应的功能
input keyevent keyCode</span>


4.功能实现

通过2.2中拿到的输出流即可把上述Shell语句写入代码,我们几乎完成了针对支付宝转账的所有过程,包括唤醒屏幕,进入应用,点击转账,输入帐号,点击确定都是可以完成的。同理可以拿到别人邮箱APP里的邮件了。这里可能要问了,如何获取对方的支付宝密码呢。因为支付宝密码肯定是被保存在服务器端的,我们无法获取。所以我们可以通过监听用户的支付行为,记录下可能的支付密码,再根据密码选取点击的位置即可。

如何获取用户支付密码,可以查看Android开发——后台获取用户点击位置坐标(可获取用户支付宝密码)

5.最后记录以下KeyCode对应的功能列表

KEYCODE_UNKNOWN=0;   

KEYCODE_SOFT_LEFT=1;   

KEYCODE_SOFT_RIGHT=2;   

KEYCODE_HOME=3;   

KEYCODE_BACK=4;   

KEYCODE_CALL=5;   

KEYCODE_ENDCALL=6;   

KEYCODE_0=7;   

KEYCODE_1=8;   

KEYCODE_2=9;   

KEYCODE_3=10;   

KEYCODE_4=11;   

KEYCODE_5=12;   

KEYCODE_6=13;   

KEYCODE_7=14;   

KEYCODE_8=15;   

KEYCODE_9=16;   

KEYCODE_STAR=17;   

KEYCODE_POUND=18;   

KEYCODE_DPAD_UP=19;   

KEYCODE_DPAD_DOWN=20;   

KEYCODE_DPAD_LEFT=21;   

KEYCODE_DPAD_RIGHT=22;   

KEYCODE_DPAD_CENTER=23;   

KEYCODE_VOLUME_UP=24;   

KEYCODE_VOLUME_DOWN=25;   

KEYCODE_POWER=26;   

KEYCODE_CAMERA=27;   

KEYCODE_CLEAR=28;   

KEYCODE_A=29;   

KEYCODE_B=30;   

KEYCODE_C=31;   

KEYCODE_D=32;   

KEYCODE_E=33;   

KEYCODE_F=34;   

KEYCODE_G=35;   

KEYCODE_H=36;   

KEYCODE_I=37;   

KEYCODE_J=38;   

KEYCODE_K=39;   

KEYCODE_L=40;   

KEYCODE_M=41;   

KEYCODE_N=42;   

KEYCODE_O=43;   

KEYCODE_P=44;   

KEYCODE_Q=45;   

KEYCODE_R=46;   

KEYCODE_S=47;   

KEYCODE_T=48;   

KEYCODE_U=49;   

KEYCODE_V=50;   

KEYCODE_W=51;   

KEYCODE_X=52;   

KEYCODE_Y=53;   

KEYCODE_Z=54;   

KEYCODE_COMMA=55;   

KEYCODE_PERIOD=56;   

KEYCODE_ALT_LEFT=57;   

KEYCODE_ALT_RIGHT=58;   

KEYCODE_SHIFT_LEFT=59;   

KEYCODE_SHIFT_RIGHT=60;   

KEYCODE_TAB=61;   

KEYCODE_SPACE=62;   

KEYCODE_SYM=63;   

KEYCODE_EXPLORER=64;   

KEYCODE_ENVELOPE=65;   

KEYCODE_ENTER=66;   

KEYCODE_DEL=67;   

KEYCODE_GRAVE=68;   

KEYCODE_MINUS=69;   

KEYCODE_EQUALS=70;   

KEYCODE_LEFT_BRACKET=71;   

KEYCODE_RIGHT_BRACKET=72;   

KEYCODE_BACKSLASH=73;   

KEYCODE_SEMICOLON=74;   

KEYCODE_APOSTROPHE=75;   

KEYCODE_SLASH=76;   

KEYCODE_AT=77;   

KEYCODE_NUM=78;   

KEYCODE_HEADSETHOOK=79;   

KEYCODE_FOCUS=80;//*Camera*focus   

KEYCODE_PLUS=81;   

KEYCODE_MENU=82;   

KEYCODE_NOTIFICATION=83;   

KEYCODE_SEARCH=84;   

KEYCODE_MEDIA_PLAY_PAUSE=85;   

KEYCODE_MEDIA_STOP=86;   

KEYCODE_MEDIA_NEXT=87;   

KEYCODE_MEDIA_PREVIOUS=88;   

KEYCODE_MEDIA_REWIND=89;   

KEYCODE_MEDIA_FAST_FORWARD=90;   

KEYCODE_MUTE=91; 

Android开发——使用ADB Shell命令实现模拟点击(支付宝自动转账实现)的更多相关文章

  1. 我的Android进阶之旅------>Android中通过adb shell input来模拟滑动、按键、点击事件

    今天在维护公司的一个小项目的时候,发现按公司手机的某个物理按键,激活相应的Service后,会在屏幕上模拟的点击了屏幕的某个坐标点.好家伙,原来是之前该项目的版本是按这个物理按键后,会弹出一个对话框, ...

  2. 【安卓手机通用】android adb shell 命令大全

    浏览:3116 | 更新:2013-10-17 17:05 | 标签:安卓 android 一.[什么是shell] Linux系统的shell作为操作系统的外壳,为用户提供使用操作系统的接口.它是命 ...

  3. Android开发中adb命令的常用方法

    Android的SDK中提供了很多有用的工具,在开发过程中如果能熟练使用这些工具,会让我们的开发事半功倍.adb是SDK提供的一个常用的命令行工具,全称为Android Debug Bridge,用于 ...

  4. Android:adb shell 命令详解

    安卓系统是基于Linux系统开发,也就支持常见的Linux的命令,这些命令都保存在手机“/system/bin”的目录下,通过adb shell 便可以调用这些命令. 进入“/system/bin”该 ...

  5. ubuntu 使用adb shell命令识别android设备

    ubuntu 使用adb shell命令配置 在ubuntu下使用adb 命令识别Android设备需配置adb_usb.ini 文件 文件路径:  ~/.android/ ,若不存在创建该文件. a ...

  6. 【原创】Android开发之ADB及ADB SHELl命令的应用

    adb的全称为Android Debug Bridge,就是起到调试桥的作用.通过adb我们可以在Eclipse中方面通过DDMS来调试Android程序,说白了就是debug工具.adb的工作方式比 ...

  7. adb shell 命令详解,android

    http://www.miui.com/article-275-1.html http://noobjava.iteye.com/blog/1914348 adb shell 命令详解,android ...

  8. Android 执行 adb shell 命令

    Android 执行Adb shell 命令大多需要root权限,Android自带的Runtime. getRuntime().exec()容易出错,在网上找到了一个执行adb shell命令的类 ...

  9. win7 cmd终端连接android手机运行adb shell脚本命令

    win7 cmd终端连接android手机运行adb shell脚本命令 (2013-03-22 20:13:57) 转载▼ 标签: android it shell 连接 linux 分类: 嵌入式 ...

随机推荐

  1. 如何在VS2010的VC++ 基于对话框的MFC程序中添加菜单

    方法1:亲测 成功  转载自https://social.msdn.microsoft.com/Forums/vstudio/zh-CN/48338f6b-e5d9-4c0c-8b17-05ca3ef ...

  2. UvaLive6439(string使用、回文串)

    样例手写一写很容易发现规律(前后一样的串,则ans+=2),实现起来却忘了string的便捷性,其实根本用不到哈希. ; int n, ans; string s, t1, t2; int main( ...

  3. Myisamchk使用

    Myisam损坏的情况: . 服务器突然断电导致数据文件损坏;强制关机,没有先关闭mysql 服务;mysqld 进程在写表时被杀掉.因为此时mysql可能正在刷新索引. . 磁盘损坏. . 服务器死 ...

  4. mongoDB内置文档定义

    在最近的设计数据库时,犯了一个低级的错误,就是设置内置文档是定义了错误了,导致数据取不出,去找了很多资料都无法解决.最后看了一了一下自己设置的model文件.配置错误,所以导致数据取不出了. 数据库时 ...

  5. html5表单新增的元素与属性

    1.表单内元素的form属性 在html4中,表单内的从属元素必须书写在表单内部, 而在html5中,可以把他们书写在页面上任何地方, 然后为该元素指定一个form属性,属性值为该表单的id,这样就可 ...

  6. Chrome插件制作

    由于网上很难找到关于Chrome插件制作的中文教程,为了总结和方便更多的开发者,本文以最常见的显示效果为browser_action的二维码插件为例,进行相关阐述.前端童鞋开发的话应该很简单的,鄙人是 ...

  7. Android开发实现高德地图定位

    1.获取Key 参考官方文档:http://lbs.amap.com/api/android-location-sdk/guide/create-project/get-key 对于签名文件的获取建议 ...

  8. help命令

    help——获得Shell内置命令的帮助信息 命令所在路径:Shell内置命令 示例1: # help cd 使用which或者whereis查找不到路径的命令一般是Shell内置命令,cd就是一个S ...

  9. Android(java)学习笔记171:服务(service)之绑定服务调用服务里面的方法

    1.绑定服务调用服务里面的方法,图解: 步骤: (1)在Activity代码里面绑定 bindService(),以bind的方式开启服务 :                     bindServ ...

  10. 简洁的KVO -- 使用Block响应事件

    涉及内容: KVO,Runtime,Category,Block 首先创建NSObject的Category 举个例子是这样的: 随后定义你需要响应的Block结构 我简单一点就这样咯 typedef ...