android高分段进阶攻略(4)android模拟点击

来源:互联网 发布:管家婆软件下载地址 编辑:程序博客网 时间:2024/05/05 10:57

注明该demo已经被我销毁,不建议大家使用,大家想学,可以自己研究下mokey等方法。不要再发私信要了,我都找不到demo去哪里了


说起这个功能就不由得想起前不久的悲伤往事,有一个无良奸商,发私信叫我做个模拟点击的demo,说好价格1000,给了一半定金,一开始指手画脚我也不说啥了,后面我给他验收后,还说验收后付尾款,结果从那以后QQ永不在线有木有,还说是我的钱始终是我的有木有,人在做天在看有木有,所以我转手就把这个demo以1000的价格卖给了一个和他们公司竞争的公司,所以私活有风险,接活需谨慎。

不扯那些没用的犊子了,进入今天的讲解,我不知道为啥android提供这样的操作,可以通过linux可以模拟用户点击,模拟用户操作,这明显摆明了给你可乘之机,我利用闲暇时间,写了个app,捕获用户操作,比如手势解锁,输入支付宝密码等,记录用户信息,并且模仿用户操作,让app直接替用户操作,瞬间就可以盗取用户密码信息等,不要不相信,我用后面的代码说话,所以说太开源,风险也太大。

首先什么模拟用户点击,这不用我说明了嘛,就是app在应用层执行代码,调取底层接口,模仿用户操作,说直白点就是用户无操作(比如点击,比如输入,比如滑动),app直接替代了。

为了促进和谐社会共同发展,我下面要讲的demo,当然不可能是我自己写的那个盗用信息的app,授之以鱼不如授之以渔,我把最核心的技术告诉大家,剩下的就是大家自己的发挥了,以后进去了别供我出来就行,呵呵,开玩笑了。先上图:

demo看起来很简单,却蕴含了整个挂机外挂的核心功能,首先界面activity是继承ontouch事件的,随便点击屏幕都会弹出相关坐标,因为我要获取坐标,然后点击BUTTON模拟点击1,它会模仿用户点击BUTTON点击1成功,点击BUTTON模拟点击2,它会弹出个对话框,要求用户输入点击的位置,就是RAWX和RAWY的值,然后它会模拟用户点击home键,跳到桌面点击用户之前输入的那个位置,比如桌面电话功能位置为(rawx=28,rawy=770),你点击模拟点击2它就会跳到桌面点击电话功能,打开电话功能,点击模拟输入,它就会模仿用户进行输入操作。还有模拟滑动事件,这涉及到版权问题,我就不多说了。

功能就是如此神奇,我们下面详细说下如何实现,首先要确定你的机子获得了ROOT权限,因为必须ROOT了才能调用底层这不用我多说了吧,如果模拟器,这里有个大神贴(http://blog.csdn.net/tabactivity/article/details/7884471)。

然后我们就要知道这个功能是如何实现,android底层是linux,当用户输入或者点击的时候是通过执行linux命令执行的相关操作,而且demo这里的所有操作就是由android提供的sendevent命令模拟操作,其格式为 sendevent [device] [type] [code] [value],例如sendevent /dev/input/event0 1 229 1。

我们来具体分析下这个语句sendevet是命令头,/dev/input/event0是device,怎么获取你自己的device了,其实很简单,在adb shell getevent就可以获取到,如下图:


type是什么,type类型决定了模仿用户执行了什么操作,由于资料有限,我现在只知道,1是按键点击,3是坐标点击,还待大神们知道提供更多关于type的资料。

code是根据type而决定的,比如type是1code就是按键值,type是3code就是坐标值。

value也一样,type是1的时候value就是的值标示keydown,keyup。

好的,说到这里核心部分已经说完了,现在来具体操作下,打开机子,连接adb shell,进入shell页面,输入

sendevent /dev/input/event0 1 229 1
sendevent /dev/input/event0 1 229 0

你是不是会发现机子的Menu被点击了,但是这里需要解释下,这两条命令必须一起运行,为什么呢,之前也说过了,一个事件的发生是经历keydown和keyup的,229是Menu的值,第一句标示按下Menu键,第二句标示松开Menu键,然后整个事件结束,输入字符a同理:

sendevent /dev/input/event0 1 30 1
sendevent /dev/input/event0 1
30 0

那如果是坐标位置了,SDK上面写的很详细:

如在屏幕的x坐标为200,y坐标为250的点上touch一下,命令如下

  sendevent /dev/input/event0 3 0 200 //X坐标
  sendevent /dev/input/event0 3 1 250 //y坐标值  
   sendevent /dev/input/event0 1 330 1
   sendevent /dev/input/event0 0 0 0      
   sendevent /dev/input/event0 1 330 0
   sendevent /dev/input/event0 0 0 0

  这六句话也必须一起执行,这是为什么,因为一二句描述了点击的位置,三四句标示点击down,五六句标示点击up,所以必须一起执行才有效果。这是你是不是发现你要想要的指定位置被点击了。

功能其实很简单,不过你要去研究,我看了一早上的sdk才明白了这个功能,基本功能已经介绍完毕,后续的就是待大家发挥了,什么挂机外挂,什么模仿用户操作完全不成问题。

这里有个问题,求大家知道下,我写的ontouch事件获取坐标,为什么有时候(0,0)坐标在左上方,有时候在右下方,还有时候在中间,这是怎么回事???

int eventaction = event.getAction();rawX = (int) event.getRawX();rawY = (int) event.getRawY();
关于相关demo,请看下方评论。

8 0
原创粉丝点击