首先声明,本人反对一切利用技术的违法行为
本文的实现代码已经销毁,本文以介绍流程为主
1.这里所说的模拟点击不是在自己的APP里点击,点自己APP上的控件没什么好说的
不仅是支付宝转账,其他的获取别人百度云里的某个文件信息,或者获取别人邮箱APP里的邮件等都是可以实现的。
这里我们要实现的是,通过一定的触发条件,开启我们事先嵌入到应用代码里的脚本命令(其实就是Shell语句的代码实现),这个触发条件根据自己的想法随意指定,前提是屏幕必须亮着,才能实现任意位置的模拟点击。下面有几行代码是用来检查屏幕是否点亮并自动解锁点亮屏幕的代码。
接下来就介绍如何模拟点击。当然,我们的应用需要获得root权限。
本文原创,转载请注明出处:Android开发——使用ADB Shell命令实现模拟点击(支付宝自动转账实现)_SEU_Calvin的博客-CSDN博客_adb shell 模拟点击
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等
//实现点击功能键, KeyCode为功能键 本文最后会列举出所有的keyCode对应的功能
input keyevent keyCode
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;