From 5d8af2ed1b0bd40063d790c2f8fa3e65b337d58d Mon Sep 17 00:00:00 2001 From: none Date: Wed, 21 Feb 2024 10:15:36 +0300 Subject: [PATCH] =?UTF-8?q?=D0=A0=D0=B5=D0=B0=D0=BB=D0=B8=D0=B7=D0=BE?= =?UTF-8?q?=D0=B2=D0=B0=D0=BD=20=D0=BF=D0=BE=D1=87=D1=82=D0=B8=20=D0=B2?= =?UTF-8?q?=D0=B5=D1=81=D1=8C=20=D1=84=D1=83=D0=BD=D0=BA=D1=86=D0=B8=D0=BE?= =?UTF-8?q?=D0=BD=D0=B0=D0=BB,=20=D0=BA=D0=BB=D1=8E=D1=87=20=D1=83=D0=B1?= =?UTF-8?q?=D1=80=D0=B0=D0=BD=20=D0=B8=D0=B7=20=D0=BF=D0=B0=D0=BF=D0=BA?= =?UTF-8?q?=D0=B8=20=D1=81=D0=B0=D0=B9=D1=82=D0=B0,=20=D0=BF=D1=80=D0=BE?= =?UTF-8?q?=D0=B2=D0=B5=D1=80=D0=BA=D0=B0=20=D0=BF=D0=BE=D0=B4=D0=BC=D0=B5?= =?UTF-8?q?=D0=BD=D1=8B.?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- main.py | 7 ++++++- network.py | 54 +++++++++++++++++++++++++++++++++++++++++++------ site_creator.py | 1 - 3 files changed, 54 insertions(+), 8 deletions(-) diff --git a/main.py b/main.py index 35d7108..255b1bd 100644 --- a/main.py +++ b/main.py @@ -42,10 +42,15 @@ mode = 1 if mode == 0: serv_http = Thread(target = server_http) serv_http.start() + + sleep(1) os.chdir("../") # возвращаемся в корень + serv = Thread(target = server, args=(http_port,)) serv.start() elif mode == 1: pport = int(input()) - client(pport) + port_dest = client(pport, "is_just.jet") + if port_dest != "not exist": + client(port_dest, "get_just.jet") diff --git a/network.py b/network.py index 48a0d5b..4a778d7 100644 --- a/network.py +++ b/network.py @@ -2,13 +2,16 @@ import socket from requests import get import os from random import randint +from shutil import unpack_archive + +from verify import * # Здесь идёт обработка всех запросов через сеть # TODO: # 1. [+] Пинг # 2. [+] Проверка существования сайта -# 3. Передача сайта +# 3. [+] Передача сайта # 4. Приём рассылки сайтов def port_gen(): @@ -52,17 +55,13 @@ def server(http_port): if os.path.exists(f'cached/{check}'): conn.send(str(http_port).encode()) else: - conn.send("not exist".encode()) + conn.send("not_exist".encode()) conn.close() # op = operation def client(port, op = "ping"): host = 'jetwork.404.mn' - #if op == "ping": - # r = get(f"http://{host}:{str(port)}/jetwork") - # print(r.headers['Content-Length']) - if op == "ping" or op[:3] == "is_": s = socket.socket() try: @@ -82,3 +81,46 @@ def client(port, op = "ping"): s.close() return data + elif op[:4] == "get_": + site = op[4:] + # Скачиваем файлы + g_site = get(f"http://{host}:{str(port)}/{site}.zip") + print('SIZE: ', g_site.headers['Content-Length']) # Размер + + with open(f"verify/{site}.zip", "wb") as f: + f.write(g_site.content) + f.close() + + g_sig = get(f"http://{host}:{str(port)}/{site}.sig") + with open(f"verify/{site}.sig", "wb") as f: + f.write(g_sig.content) + f.close() + + g_key = get(f"http://{host}:{str(port)}/{site}.pem") + with open(f"verify/{site}.pem", "wb") as f: + f.write(g_key.content) + f.close() + + # Проверяем подпись + # Если сайт уже есть в кэше: + if os.path.exists(f'cached/{site}'): + okay = verify(f"verify/{site}.zip", f"cached/{site}.pem", f"verify/{site}.sig") + else: + okay = verify(f"verify/{site}.zip", f"verify/{site}.pem", f"verify/{site}.sig") + + if okay: + # Перемещаем файлы, т.к. всё хорошо + os.replace(f"verify/{site}.zip", f"cached/{site}.zip") + os.replace(f"verify/{site}.sig", f"cached/{site}.sig") + os.replace(f"verify/{site}.pem", f"cached/{site}.pem") + # Распаковываем архив с сайтом + unpack_archive(f"cached/{site}.zip", f"cached/{site}") + else: + print("[!] Обнаружена подмена сайта.") + # Сохраняем ключ злоумышленника + os.replace(f"verify/{site}.pem", f"verify/{site}.pem.FAKE") + print(f"[!] Порт злоумышленника: {port}") + print(f"[!] Ключ злоумышленника сохранён в verify/{site}.pem.FAKE\n") + # Удаляем фальшивые файлы + os.remove(f"verify/{site}.zip") + os.remove(f"verify/{site}.sig") diff --git a/site_creator.py b/site_creator.py index 349800b..2ddf918 100644 --- a/site_creator.py +++ b/site_creator.py @@ -23,7 +23,6 @@ if op == "1": # Создаём папку и ключи для подписи system(f"mkdir mysites/{domain}") key_gen(f"mysites/{domain}") - copyfile(f"mysites/{domain}.pem", f"mysites/{domain}/{domain}.pem") if type == "1": conf = {"type": "static", "ver": 1}