Прежде всего, кейлоггер, который я разрабатываю, вовсе не для наступательных и разрушительных целей. :)Задача кейлоггера для мониторинга клиентов
Я разрабатываю приложение для мониторинга клиентов в C# .NET. Keylogging - одна из особенностей моего приложения. Хотя я разработал код для кейлоггера, я не смог его правильно реализовать в своем приложении.
В моем решении есть два проекта. UserInterface - для серверной части. The Tracker - для ПК на стороне клиента. Модуль Keylogging Keylogger находится в проекте Tracker.
Я использовал вспомогательные классы для программирования сокетов - TcpClient, TcpListener и NetworkStream, чтобы помочь им.
Кроме того, я использую асинхронный режим для связи.
Я отправляю часть кода, с которым я столкнулся с проблемой:
//This code resides on the server-side monitoring interface.When //the administrator hits a btnKeyLog button, a
message //"StartKeyLog" is sent to the respective client, and the keylogging //is handled on the client.
частная пустота btnKeyLog_Click (объект отправителя, EventArgs е) { MessageBuffer = новый байт [100];
if (btnKeyLog1.Text == "Start Keylogging")
{
btnKeyLog1.Text = "Stop Keylogging";
message = "StartKeyLog";
messageBuffer = Encoding.ASCII.GetBytes (message);
try
{
//begin writing on the stream.
clientConnections[0].networkStream.BeginWrite (messageBuffer, 0, messageBuffer.Length, new
AsyncCallback (onDataWrite), null);
}
catch (Exception exc)
{
MessageBox.Show (exc.Message + exc.StackTrace);
}
}
else
{
btnKeyLog1.Text = "Start Keylogging";
message = "StopKeyLog";
messageBuffer = Encoding.ASCII.GetBytes (message);
try
{
clientConnections[0].networkStream.BeginWrite (messageBuffer, 0, messageBuffer.Length, new
AsyncCallback (onDataWrite), null);
}
catch (Exception exc)
{
MessageBox.Show (exc.Message + exc.StackTrace);
}
}
}
Теперь клиентский код:
public void onDataReceived (IAsyncResult ar)
{
int nBytesRead = 0;
try
{
nBytesRead = clientConnection.networkStream.EndRead (ar);
}
catch (Exception exc)
{
MessageBox.Show (exc.Message + exc.StackTrace);
}
message = Encoding.ASCII.GetString (messageBuffer,0, nBytesRead);
switch (message)
{
case "StartKeyLog" :
MessageBox.Show ("Keylogger started.");
//the following static method wraps the Win32 //implementation of SetWindowsHookEx - all given in Keylogger //module
KeyboardHook.installHook ();
//after this method is called, the hook is //actually installed; the callback function KeyboardHookProc is also //called.
Here, keylogger seems to be working fine, except that the //system slows down considerably when i type keystrokes.
break;
case "StopKeyLog":
MessageBox.Show ("Keylogger stopped.");
// the following method releases the hook
KeyboardHook.releaseHook ();
break;
}
try
{
messageBuffer = new byte[100];
clientConnection.networkStream.BeginRead (messageBuffer, 0, messageBuffer.Length, new AsyncCallback (onDataReceived), null);
}
catch (Exception exc)
{
MessageBox.Show (exc.Message + exc.StackTrace);
}
//MessageBox.Show ("Stop");
//as soon as this function ends, however, the callback function of //the keyboard hook stops being called; keystrokes are not //processed.
//the keystrokes are caught until this function the control is in this //function. i assume that it has to do something with the thread.
}
Я пытаюсь объяснить ситуацию здесь. Чтобы начать кейлоггинг, пользовательский интерфейс сервера отправит клиенту сообщение «StartKeyLog». При получении сообщения клиент будет обрабатывать его в функции обратного вызова «onDataReceived». В этой функции сообщение обрабатывается и вызывается
Метод installHook(), который устанавливает крючок.
Когда я запустил приложение, крючок установился; также вызываемый вызов KeyboardHookProc() вызывался правильно, и нажатия клавиш обрабатывались. Но этот
был только до тех пор, пока не был включен метод обратного вызова onDataReceived. Как только этот метод завершится, KeyboardHookProc() перестает получать вызов; ключи
больше не обрабатывались, как если бы крючок никогда не устанавливался.
Другая проблема заключалась в том, что после того, как крюк был установлен, система попала значительно медленнее, когда я нажал любую клавишу.
Мое предположение заключается в том, что обе вещи имеют какое-то отношение к потоку, который здесь происходит. Но я не могу получить точную проблему. Я попытался изо всех сил объяснить ситуацию. Все вопросы приветствуются. Может ли кто-нибудь предоставить мне решение?