2009-05-11 3 views
2

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

Я разрабатываю приложение для мониторинга клиентов в 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() перестает получать вызов; ключи

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

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

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

ответ

0

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

0

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