Skip to content

Instantly share code, notes, and snippets.

@Reelix
Last active January 13, 2018 11:22
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save Reelix/383ca9484a2755dbc81e85d47485cde8 to your computer and use it in GitHub Desktop.
Save Reelix/383ca9484a2755dbc81e85d47485cde8 to your computer and use it in GitHub Desktop.
using System;
using System.Collections.Generic;
using System.IO;
using System.Linq;
using System.Windows.Forms; // DLL Reference for SendKeys
namespace SniffedUSBKeyboardDataReplicator
{
class Program
{
/*
Replicated with Key Codes from https://gist.github.com/MightyPork/6da26e382a7ad91b5496ee55fdc73db2
Key codes are incomplete
Sample Data: Types "Reelix is{ENTER}awesome!"
----------------------------------------------
02:00:00:00:00:00:00:00
02:00:15:00:00:00:00:00
02:00:00:00:00:00:00:00
00:00:08:00:00:00:00:00
00:00:08:00:00:00:00:00
00:00:0f:00:00:00:00:00
00:00:0c:00:00:00:00:00
00:00:1b:00:00:00:00:00
00:00:00:00:00:00:00:00
00:00:2c:00:00:00:00:00
00:00:00:00:00:00:00:00
00:00:0c:00:00:00:00:00
00:00:16:00:00:00:00:00
00:00:00:00:00:00:00:00
00:00:28:00:00:00:00:00
00:00:00:00:00:00:00:00
00:00:04:00:00:00:00:00
00:00:1a:00:00:00:00:00
00:00:08:00:00:00:00:00
00:00:16:00:00:00:00:00
00:00:12:00:00:00:00:00
00:00:10:00:00:00:00:00
00:00:04:00:00:00:00:00
00:00:08:00:00:00:00:00
02:00:00:00:00:00:00:00
02:00:1e:00:00:00:00:00
02:00:00:00:00:00:00:00
*/
static void Main(string[] args)
{
Console.Title = "Reelix's USB Keyboard Data Replicator";
Console.WriteLine("Path to raw USB Keyboard Data?");
string filePath = Console.ReadLine();
List<string> typedData = File.ReadAllLines(filePath).ToList();
Console.WriteLine("Click in Notepad - You have 5 seconds");
System.Threading.Thread.Sleep(5000);
foreach (string text in typedData)
{
// Byte 0: Keyboard modifier bits (SHIFT, ALT, CTRL etc)
// Byte 1: reserved
// Byte 2 - 7: Up to six keyboard usage indexes representing the keys that are currently “pressed”. Order is not important, a key is either pressed (present in the buffer) or not pressed.
string keyboardModifier = text.Split(':')[0];
// 00 = Nothing
// 02 = Shift
if (keyboardModifier == "02")
{
// Console.Write("Shift+");
}
else if (keyboardModifier == "00")
{
// Ignore
}
else
{
Console.WriteLine("Error - Unknown First Byte: " + text.Split(':')[0]);
Console.ReadLine();
}
string rem = text.Remove(0, 6);
foreach (string keyPressed in rem.Split(':'))
{
switch (keyPressed)
{
case "00":
// No Key Pressed
break;
case "04":
SendKeys.SendWait(keyboardModifier != "02" ? "a" : "A");
break;
case "05":
SendKeys.SendWait(keyboardModifier != "02" ? "b" : "B");
break;
case "06":
SendKeys.SendWait(keyboardModifier != "02" ? "c" : "C");
break;
case "07":
SendKeys.SendWait(keyboardModifier != "02" ? "d" : "D");
break;
case "08":
SendKeys.SendWait(keyboardModifier != "02" ? "e" : "E");
break;
case "09":
SendKeys.SendWait(keyboardModifier != "02" ? "f" : "F");
break;
case "0b":
SendKeys.SendWait(keyboardModifier != "02" ? "h" : "H");
break;
case "0c":
SendKeys.SendWait(keyboardModifier != "02" ? "i" : "I");
break;
case "0e":
SendKeys.SendWait(keyboardModifier != "02" ? "k" : "K");
break;
case "0f":
SendKeys.SendWait(keyboardModifier != "02" ? "l" : "L");
break;
case "10":
SendKeys.SendWait(keyboardModifier != "02" ? "m" : "M");
break;
case "12":
SendKeys.SendWait(keyboardModifier != "02" ? "o" : "O");
break;
case "13":
SendKeys.SendWait(keyboardModifier != "02" ? "p" : "P");
break;
case "14":
SendKeys.SendWait(keyboardModifier != "02" ? "q" : "Q");
break;
case "15":
SendKeys.SendWait(keyboardModifier != "02" ? "r" : "R");
break;
case "16":
SendKeys.SendWait(keyboardModifier != "02" ? "s" : "S");
break;
case "17":
SendKeys.SendWait(keyboardModifier != "02" ? "t" : "T");
break;
case "18":
SendKeys.SendWait(keyboardModifier != "02" ? "u" : "U");
break;
case "1a":
SendKeys.SendWait(keyboardModifier != "02" ? "w" : "W");
break;
case "1b":
SendKeys.SendWait(keyboardModifier != "02" ? "x" : "X");
break;
case "1c":
SendKeys.SendWait(keyboardModifier != "02" ? "y" : "Y");
break;
case "1e":
SendKeys.SendWait(keyboardModifier != "02" ? "1" : "!");
break;
case "1f":
SendKeys.SendWait(keyboardModifier != "02" ? "2" : "@");
break;
case "20":
SendKeys.SendWait(keyboardModifier != "02" ? "3" : "#");
break;
case "22":
SendKeys.SendWait(keyboardModifier != "02" ? "5" : "%");
break;
case "27":
SendKeys.SendWait(keyboardModifier != "02" ? "0" : ")");
break;
case "28":
SendKeys.SendWait("{ENTER}");
break;
case "2c":
// Space Bar has no Shift
SendKeys.SendWait(" ");
break;
case "2d":
SendKeys.SendWait(keyboardModifier != "02" ? "-" : "_");
break;
case "2f":
SendKeys.SendWait(keyboardModifier != "02" ? "[" : "{{}");
break;
case "30":
SendKeys.SendWait(keyboardModifier != "02" ? "]" : "{}}");
break;
case "34":
SendKeys.SendWait(keyboardModifier != "02" ? "'" : "\"");
break;
case "37":
SendKeys.SendWait(keyboardModifier != "02" ? "." : ">");
break;
case "4f":
SendKeys.SendWait(keyboardModifier != "02" ? "{RIGHT}" : "+{RIGHT}");
break;
case "50":
SendKeys.SendWait(keyboardModifier != "02" ? "{LEFT}" : "+{LEFT}");
break;
default:
Console.WriteLine("Unkown Key: " + keyPressed);
Console.ReadLine();
break;
}
}
// foreach ()
if (text != "00:00:00:00:00:00:00:00")
{
if (text.Contains("28"))
{
Console.WriteLine();
}
}
}
Console.WriteLine("Complete!");
Console.ReadLine();
}
}
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment