Клиентский мониторинг кейлоггер проблема - PullRequest
2 голосов
/ 11 мая 2009

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

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

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

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

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

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

Ответы [ 2 ]

0 голосов
/ 18 июня 2009

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

0 голосов
/ 17 июня 2009

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

...