The other day I was at Jaycar and saw that they are now selling small USB sticks that are arduino compatible.
It is called the LeoStick and is made by Freetronics down in Melbourne.
Seeing that it could pretend to be a USB HID device (ie keyboard/mouse) I wondered if I could do the sort of thing that the USB Rubber Ducky from Hak5 can do
As it turns out the answer is YES 🙂
Since it was possible I spent an hour or two writing a quick shell script which can convert ducky script payloads into a sketch suitable for uploading to the LeoStick (or any arduino that has USB-HID capability)Â Â The end result is a small bash script which can be downloaded from compile_payload.sh
Usage is fairly simple – you run the script with two options – the first being the payload file, and the second being the arduino script output.
ie: compile_payload lock_prank.txt lock_prank.ino
Various payloads can be found linked from the USB-Rubber-Ducky wiki
As a bit of fun I changed the lock_prank payload to work on Gnome/Linux and it also plays the mission impossible theme once done 😉
Grab it from lock_prank.ino
Also note that to get this working you need to edit the arduino libraries so that the sendReport function is marked as public.
To to this edit the USBAPI.h file which can be found in ${ARDUINO_DIR}/hardware/arduino/cores/arduino directory.
This may be /usr/share/arduino/hardware/arduino/cores/arduino/USBAPI.h or similar
If you installed the LeoStick board stuff from their website then it will be under your sketches directory as hardware/LeoStick/cores/arduino/USBAPI.h
Open that file and find
private: KeyMap* _keyMap; void sendReport(KeyReport* keys); void setKeyMap(KeyMap* keyMap); public: Keyboard_(); virtual size_t write(uint8_t);
Then change that to
private: KeyMap* _keyMap; void setKeyMap(KeyMap* keyMap); public: void sendReport(KeyReport* keys); Keyboard_(); virtual size_t write(uint8_t);
Then everything should work fine.
that is some good stuff i am using the teensy still but am wanting to get one of those leosticks i have seen them around
hey a bit of a noob on this but how do you run the arduino script output?? or just get it to convert the code
The script outputs the code that can then be imported/loaded/pasted into a sketch in the Arduino IDE
hey i have a leostick v2 and your script works great!
Whenever I attempt to verify a compiled script i come up with
screen_rotate.ino: In function ‘void setup()’:
screen_rotate:174: error: ‘KEY_MODIFIER_LEFT_CTRL’ was not declared in this scope
What do?
I forgot to mention, I am using an Arduino Leonardo
Hi! I tried the lock prank, but i got this error message when trying to compile it:
lock_prank.cpp: In function ‘void sendKey(byte, byte, byte)’:
lock_prank.cpp:155:3: error: ‘KeyReport’ was not declared in this scope
lock_prank.cpp:155:13: error: expected ‘;’ before ‘report’
lock_prank.cpp:158:3: error: ‘report’ was not declared in this scope
lock_prank.cpp:162:3: error: ‘Keyboard’ was not declared in this scope
lock_prank.cpp: In function ‘void setup()’:
lock_prank.cpp:298:26: error: ‘KEY_MODIFIER_LEFT_ALT’ was not declared in this scope
lock_prank.cpp:300:3: error: ‘Keyboard’ was not declared in this scope
i am using an arduino UNO and ubuntu 12.04
Hey,
Just wondering how you’d be able to update/modify the code on the leo after the initial payload has been installed without running the (old) payload on the machine?
Thx u so much.your article is very usefull..its very good article.
teensy is a very good stuff..this tools helps me alot
Such as a good idea. I should try , thanks alot .. :)))
Good idea for this, thanks will try to do it :))
nice info, thanks
good info. very useful thanks
good info, thankz you
😀
thank you….
thank you….
good info….
good info….
thank you very much….
thank you very much….
very nice….
tahnks you
thanks
thank you for you infomation ^^
thank you nice post information
Works great! Thanks you for posting!