Проблема с кейлоггером Client Monitoring

Во-первых, кейлоггер, который я разрабатываю, предназначен вовсе не для наступательных и деструктивных целей. :)

Я разрабатываю приложение для мониторинга клиентов на С#.NET. Кейлоггинг — одна из функций моего приложения. Хотя я разработал код кейлоггера, я не смог правильно реализовать его в своем приложении.

В моем решении есть два проекта. Пользовательский интерфейс - для серверной части. Трекер - для клиентских ПК. Модуль кейлоггера 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.

private void btnKeyLog_Click (отправитель объекта, EventArgs e) { 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() перестал вызываться; ключи

больше не обрабатывались, как будто крючок никогда не устанавливался.

Еще одна проблема заключалась в том, что после того, как хук был установлен, система значительно замедлялась, когда я нажимал любую клавишу.

Я предполагаю, что обе вещи имеют какое-то отношение к потоку, который здесь происходит. Но я не могу получить точную проблему. Я старался изо всех сил объяснить ситуацию. Тем не менее, любые вопросы приветствуются. Может ли кто-нибудь предоставить мне решение ??


person Bhoot    schedule 11.05.2009    source источник


Ответы (2)


Вы должны добавить код вашего KeyboardHook.

person batzen    schedule 17.06.2009

хорошо, мне удалось решить мою проблему. Проблема заключалась в том, что я устанавливал хук в потоке, который был вызван основным потоком моего приложения. На самом деле, я начал эту тему только для того, чтобы установить крючок. Я просто реструктурировал свой код, чтобы хук был установлен в основном потоке. Это решило всю проблему. :)

person Bhoot    schedule 18.06.2009