All Projects → qlyoung → Armory Keyboard

qlyoung / Armory Keyboard

utility for emulating a USB HID keyboard with the USBArmory

Labels

Projects that are alternatives of or similar to Armory Keyboard

React Native Keyboard Input
Use your own custom input component instead of the system keyboard
Stars: ✭ 717 (+2460.71%)
Mutual labels:  keyboard
Florisboard
An open-source keyboard for Android which respects your privacy. Currently in early-beta.
Stars: ✭ 882 (+3050%)
Mutual labels:  keyboard
Exkeyboard
3rd-party keyboard anywhere.
Stars: ✭ 10 (-64.29%)
Mutual labels:  keyboard
Repeat
Cross-platform mouse/keyboard record/replay and automation hotkeys/macros creation, and more advanced automation features.
Stars: ✭ 763 (+2625%)
Mutual labels:  keyboard
Jquery Rslitegrid
Input tabular data with your keyboard
Stars: ✭ 5 (-82.14%)
Mutual labels:  keyboard
Slowquitapps
Add a global delay to Command-Q to stop accidental app quits.
Stars: ✭ 916 (+3171.43%)
Mutual labels:  keyboard
Input Overlay
Show keyboard, gamepad and mouse input on stream
Stars: ✭ 684 (+2342.86%)
Mutual labels:  keyboard
Sodieremojikeyboardplus
支持自定义emoji表情,icon font , FontAwesome,斜体,超链接,粗体,下划线,字体,颜色,镂空字体等富文本
Stars: ✭ 14 (-50%)
Mutual labels:  keyboard
Numericaltextentry
An iOS library for beautiful number entry fields. iPad friendly. Written in Swift.
Stars: ✭ 16 (-42.86%)
Mutual labels:  keyboard
Vue Custom Keyboard
A Vue.js component for custom keyboard. (vue自定义键盘组件/车牌号键盘组件)
Stars: ✭ 26 (-7.14%)
Mutual labels:  keyboard
Redox Keyboard
Ergonomic split mechanical keyboard
Stars: ✭ 760 (+2614.29%)
Mutual labels:  keyboard
Acejump
🅰️ single character search, select, and jump
Stars: ✭ 786 (+2707.14%)
Mutual labels:  keyboard
Rubber Ducky Library For Arduino
An Arduino library that allows you to use a cheap Arduino (Leonardo) as a Rubber Ducky
Stars: ✭ 25 (-10.71%)
Mutual labels:  keyboard
Saka Key
A keyboard interface to the web
Stars: ✭ 748 (+2571.43%)
Mutual labels:  keyboard
All Around Keyboard
a web component for piano keyboards
Stars: ✭ 11 (-60.71%)
Mutual labels:  keyboard
Uncap
Map Caps Lock to Escape or any key to any key
Stars: ✭ 705 (+2417.86%)
Mutual labels:  keyboard
Nepali Romanized Pro
Nepali Romanized Keyboard Layout with installer for macOS
Stars: ✭ 18 (-35.71%)
Mutual labels:  keyboard
Keystroke dynamics
a keystroke dynamics algorithm in python (recognizes a person by the way s/he types)
Stars: ✭ 21 (-25%)
Mutual labels:  keyboard
Myoddweb.piger
Piger is a Keystroke Launcher allowing you to run your own commands from your keyboard. Highlight a word hold the caps lock key and simply type 'Google' to search for it in your browser. You can create your own commands, in C#, Powershell, (+3), Python, LUA, C++ and more.
Stars: ✭ 13 (-53.57%)
Mutual labels:  keyboard
Google Music Hotkeys
Browser extension that adds keyboard control to Google / YouTube Music
Stars: ✭ 25 (-10.71%)
Mutual labels:  keyboard

armory-keyboard

Utility for emulating a USB HID keyboard with the USBArmory. Kind of compatible with DuckyScript.

asciicast

Building

$ git clone https://github.com/qlyoung/armory-keyboard.git
$ cd armory-keyboard
$ make

The resultant binary is located in build/. You must build on the USBArmory or cross-compile.

Usage

First, setup your USBArmory to emulate a USB HID keyboard, either manually through ConfigFS or by executing the provided shell script hid-ecm.sh (written by Collin Mulliner). The script expects to be running on the Debian Jessie base image provided by Inverse Path, but should be easily adaptable to other images.

Setting up HID Keyboard + CDC Ethernet:

# ./hid-ecm.sh

Using the utility:

# ./type -s <script file> -l <layout file> [-o <output file>]

The interpreter will interpret the script and send the generated HID reports to the specified file. In the typical use case, this will be a HID character device such as /dev/hidg0. If no device is specified, the default is /dev/hidg0.

Scripts

Originally, the interpreter was going to be compatible with DuckyScript. However, DuckyScript has weird and unnecessary limitations that don't really correspond to the capabilities of HID, so instead I opted with a syntax based mostly on DuckyScript with a few modifications to enhance capability and ease-of-use. It should be fairly straightforward to convert DuckyScripts to...uh...ArmoryDuckyScripts? We'll go with that.

Syntax is identical to DuckyScript, with the following exceptions:

  • CTRL-ALT+key, CTRL-SHIFT+key, ALT+key, SHIFT+key, CTRL+key, and GUI+key combinations have all been replaced by a single keyword, SIMUL. Start a line with SIMUL and follow it with up to 6 space-delimited tokens or plaintext characters and all 6 will be sent in one HID report, as if they were pressed at the same time. Take CTRL+ALT+DEL as an example:

    DuckyScript: CTRL-ALT DELETE

    ArmoryDuckyScript: SIMUL CTRL ALT DELETE

    This seems more verbose at first, but it's actually better, because you can do things with it that you can't really do in DuckyScript, such as:

    SIMUL CTRL ALT ENTER SPACE MENU a

    I have no idea why you would want to do this, but HID supports sending up to 6 keys per report, so I pass that option along to the user. Obviously it is up to you to send sane combinations, and up to the operating system to interpret them. Note: all escape tokens (SHIFT, CONTROL, SPACE, etc) must occur before any plaintext characters.

  • I haven't finished implementing all the syntax yet. Currently unimplemented are:

    • REPEAT, to repeat commands

    • COMMAND for OSX

  • Lines may be at most 500 characters. Excess characters will be ignored.

  • DEFAULT_DELAY may occur at any point in the script, and overrides the previous default delay.

Examples are located in the examples/ directory.

See the DuckyScript wiki for further documentation on syntax.

Layouts

Support for Unicode and arbitrary keyboard layouts was added in c0e032c. Layout files may be specified with the -l option. The format of a layout file is as follows:

-*- layout: <layout name> -*-

<unicode char> 0x<keycode> 0x<modifier bitfield>
<unicode char> 0x<keycode> 0x<modifier bitfield>
<unicode char> 0x<keycode> 0x<modifier bitfield>
...

The first line must contain the string -*- layout: followed by a name for the layout. The terminating -*- is not strictly necessary. Subsequent lines must contain the following, in order:

  1. A UTF-8 character
  2. Unicode/ASCII space (0x20)
  3. The string 0x followed by the hexadecimal keycode for the key that should be pressed to produce (1)
  4. Unicode/ASCII space (0x20)
  5. The string 0x followed by the hexadecimal bitfield specifying which modifier keys must be pressed in tandem with (3) to produce (1)

Here is a brief excerpt of the English/US layout:

-*- layout: English 103P (USA) -*-

a 0x04 0x00
b 0x05 0x00
c 0x06 0x00
d 0x07 0x00
e 0x08 0x00
f 0x09 0x00

And of the Albanian 452 layout:

-*- layout: Albanian 452 -*-

` 0x35 0x00
¬ 0x35 0x02
| 0x35 0x40
1 0x1E 0x00
! 0x1E 0x02
2 0x1F 0x00

For your convenience, I compiled a map of keycodes for a standard keyboard. Characters for the English/US layout have been left in for readability, but regardless of what character is on a given key the keycode is the same. With this map and a little patience it is easy to add support for whatever keyboard layout you wish.

keycode mappings for standard keyboard

Contributing

Fork & PR! Open to improvements and bugfixes (there are almost certainly bugs).

Wishlist / Planned Features:

  • HID support for libusbgx
  • International layout support

License

Copyright 2016  Quentin Young

This program is free software: you can redistribute it and/or modify it under
the terms of the GNU General Public License as published by the Free Software
Foundation, either version 3 of the License, or (at your option) any later
version.

This program is distributed in the hope that it will be useful, but WITHOUT ANY
WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A
PARTICULAR PURPOSE.  See the GNU General Public License for more details.

You should have received a copy of the GNU General Public License along with
this program.  If not, see http://www.gnu.org/licenses/.
Note that the project description data, including the texts, logos, images, and/or trademarks, for each open source project belongs to its rightful owner. If you wish to add or remove any projects, please contact us at [email protected].