Last active
January 13, 2018 11:22
-
-
Save Reelix/383ca9484a2755dbc81e85d47485cde8 to your computer and use it in GitHub Desktop.
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
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