Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

BadUSB: Mouse control #4004

Merged
merged 22 commits into from
Feb 19, 2025
Merged

Conversation

jetrp1
Copy link
Contributor

@jetrp1 jetrp1 commented Nov 15, 2024

BadUSB: Mouse Control

I often found myself automating various functionality and wanting to be able to trigger a mouse click. This PR will add basic mouse functionality to the BadUSB App. Additionally this makes mouse movement more accessible for research on how this type of movement can be used in a security sensitive enviroment.

What's new

Several new mouse commands:

  • LEFTCLICK
  • RIGHTCLICK
  • MOUSEMOVE
  • MOUSESCROLL

Documentation also updated to reflect the changes

Additionally I implemented functionality for the Middle click (often the mouse wheel button) but in my testing it seemed to only work some of the time.

Verification

I found the easiest way to visualize the mouse movements was to use minecraft as that will show the movements very easily. My script here includes the MIDDLECLICK function, but as you see that does not work yet. If I get some more time int he future I'll look into why that does not work as expected and create an PR for that.

I used the following BadUSB script:

REM Testing Mouse Functions

DEFAULT_DELAY 1000

STRING t
STRING LEFTCLICK
ENTER
DELAY 1500
LEFTCLICK

STRING t
STRING RIGHTCLICK
ENTER
DELAY 1500
RIGHTCLICK

STRING t
STRING MIDDLECLICK - has been mapped to select slot 5 on game hotbar
ENTER
DELAY 1500
MIDDLECLICK

STRING t
STRING MOUSESCROLL
ENTER
MOUSESCROLL 1
REPEAT 4
MOUSESCROLL -1
REPEAT 4

STRING t
STRING MOUSE_SCROLL
ENTER
MOUSE_SCROLL 2
MOUSE_SCROLL -2

STRING t
STRING MOUSEMOVE
ENTER 
MOUSEMOVE 50 0
REPEAT 8
MOUSEMOVE 0 50
REPEAT 8
MOUSEMOVE -50 -50
REPEAT 8

STRING t
STRING MOUSE_MOVE
ENTER 
MOUSE_MOVE 50 0
REPEAT 8
MOUSE_MOVE 0 50
REPEAT 8
MOUSE_MOVE -50 -50
REPEAT 8


STRING t
STRING HOLD LEFT_CLICK
ENTER
HOLD LEFT_CLICK
DELAY 5000
RELEASE LEFT_CLICK

MOUSEMOVE 500 -100

STRING t
STRING REPEAT
ENTER
STRING 2
RIGHT_CLICK
REPEAT 3

STRING t
STRING TESTING DONE
ENTER

A Short video of running this script:

https://youtu.be/hi02vP7v6do

Checklist (For Reviewer)

  • PR has description of feature/bug or link to Confluence/Jira task
  • Description contains actions to verify feature/bugfix
  • I've built this code, uploaded it to the device and verified feature/bugfix

@Willy-JL
Copy link
Contributor

i wanted to implement something like this for a while and had it on my todo list, happy to see its becoming a reality! great work! 💯

@jetrp1
Copy link
Contributor Author

jetrp1 commented Nov 24, 2024

Thank you!

@skotopes skotopes marked this pull request as draft December 23, 2024 04:07
@skotopes
Copy link
Member

Un-draft when ready and let me know if you need any help.

@jetrp1
Copy link
Contributor Author

jetrp1 commented Jan 19, 2025

I should be able to work on this soon.

added to help with better readability
@jetrp1
Copy link
Contributor Author

jetrp1 commented Feb 3, 2025

The hold and release functions have both been reworked to remove the bug preventing keyboard hold functionality. They should both be much more readable now also. I tried to keep it clear when working on Keyboard vs mouse keys.

Updated Demo Video
In the video we do not see the scroll down register since the webpage dosn't have space to scroll. you can also see that the middle click is working.

Demo Script Used ``` ID 1234:abcd Generic:USB Keyboard REM Declare ourselves as a generic usb keyboard REM You can override this to use something else REM Check the `lsusb` command to know your own devices IDs

DEFAULT_DELAY 200
DEFAULT_STRING_DELAY 100

STRING qwertyuiop
STRING asdfghjkl
STRING zxcvbnm
STRING 1234567890

DELAY 1000

REM Test all mouse functions
LEFTCLICK
RIGHTCLICK
MIDDLECLICK

DELAY 1000

MOUSEMOVE -10 0
REPEAT 20
MOUSEMOVE 0 10
REPEAT 20
MOUSEMOVE 10 0
REPEAT 20
MOUSEMOVE 0 -10
REPEAT 20

DELAY 1000

MOUSESCROLL -50
MOUSESCROLL 50

DELAY 1000

REM Verify Mouse hold working
HOLD LEFTCLICK
DELAY 2000
RELEASE LEFTCLICK

DELAY 1000

REM Verify KB hold working
HOLD M
DELAY 2000
RELEASE M

ENTER

Testing Website

@jetrp1 jetrp1 marked this pull request as ready for review February 3, 2025 01:21
@jetrp1 jetrp1 requested a review from skotopes February 3, 2025 01:26
@skotopes skotopes merged commit 1541c36 into flipperdevices:dev Feb 19, 2025
11 checks passed
RogueMaster pushed a commit to RogueMaster/flipperzero-firmware-wPlugins that referenced this pull request Feb 20, 2025
* add usb hid mouse functions, add mouse functions to BadUsbHidApi
* add ble mouse functionality
* add hid_usb_mouse_release_all
* ducky mouse command skeleton
* implement mouse click functions
* corrected missing semicolon
* added mouse functionality
* corrected mouse scroll functionality
* mouse key functionality, removed mouse commands, supporting get_mouse_keycode function, added mouse buttons as Keys for HOLD function
* add mouse commands
* removed mouse middle click
* Format sources and fix bunch of mistakes in nfc and subghz
* added HID_MOUSE_NONE: added to help with better readability
* added script for mouse movement test
* Fix: hold and release, imrpove readability
* simplified the mouse demo/test
* Format sources

Co-authored-by: あく <alleteam@gmail.com>
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

Successfully merging this pull request may close these issues.

3 participants