A PoC to remotely control Windows machines over Websockets.
- Other than most HVNC implementations,
reinschauer
converts raw bitmaps to JPEG before sending data across the network to reduce frame size. - FPS can be set via the GUI.
- Basic mouse and keyboard controls are possible.
- You can use the script in the
server
folder to generate TLS server files or bring your own. - The server window can be resized freely, while click events should™ be translated to the correct pixel on the target machine.
Protocol
+----------------------------------------------------------------------------------------+
| |
| |
| +----------------------------------------------------+ |
| |#1: Type (Binary or Text) | |
| | Binary: JPG Frame | |
| | | |
| |#2: Text | |
| | FPS <FPS Count> | |
| | LCL X Y (Left Click + Coordinates) | |
| | RCL X Y | |
| | KEY <Char> | xxxxxx |
| xxxxx <--+----------------------------------------------------+--> xxxx xx |
| x xx Websockets via TLS xx x |
| x xxxxxx xxxxxxxxx |
| xxx x xx xx x |
| xxxxxxxx xxxxx xxxxxx |
| x xxxxx |
| xx xx |
| x xx xxx |
| xx xx x xx |
| x xx xx xxx |
| x xx x xx |
| x x xx x |
+----------------------------------------------------------------------------------------+
FAQ
How to build?
$ cd client && GOOS=windows GOARCH=amd64 go build $ cd server && GOOS=linux GOARCH=amd64 go build
You may have to
go get
stuff before. Use-ldflags -H=windowsgui
to disable to console window.
Who's the client/server?
The
client
is executed on the target (Windows) machine. Theserver
component is executed on the tester's (Linux) machine.
Is this a HVNC / Hidden Desktop?
No. It uses the same Desktop as the user.
Some keys and key combinations do not work, pls fix
I know. I have better things to do :P
The Client uses too much CPU Time
Using a lower FPS value may work.
I don't have a direct connection between client
and server
Use a
socat
redirector.