From 5016716227cedba3ec294f7d36ca7435f60a0a75 Mon Sep 17 00:00:00 2001 From: "s.terehin" Date: Wed, 22 Oct 2025 11:18:24 +0300 Subject: [PATCH] =?UTF-8?q?=D0=9E=D0=B1=D0=BD=D0=BE=D0=B2=D0=B8=D1=82?= =?UTF-8?q?=D1=8C=20myscript.py?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Добавлен поиск пароля в логе --- myscript.py | 134 ++++++++++++++++++++++++++++++++++++++++++++++++++-- 1 file changed, 131 insertions(+), 3 deletions(-) diff --git a/myscript.py b/myscript.py index 8bd91c2..884bf7b 100644 --- a/myscript.py +++ b/myscript.py @@ -7,6 +7,8 @@ import os import re import glob from datetime import datetime +import time +import serial class MainApp: def __init__(self, root): @@ -24,6 +26,8 @@ class MainApp: self.small_font = ('Arial', 16) self.create_widgets() + # Автоматически открываем Minicom при запуске + self.root.after(1000, self.open_minicom) # Задержка 1 секунда перед открытием Minicom def position_window_left(self): """Позиционирует окно по левому краю экрана""" @@ -82,13 +86,13 @@ class MainApp: # Кнопка Minicom self.minicom_btn = tk.Button( self.root, - text="Minicom", + text="Получить пароль", font=self.big_font, bg='#FF9800', fg='white', width=15, height=2, - command=self.open_minicom + command=self.get_password ) self.minicom_btn.pack(pady=10) @@ -153,7 +157,131 @@ class MainApp: # Добавляем начальное сообщение в лог self.add_to_log("✅ Приложение запущено и готово к работе") self.add_to_log("📐 Окно позиционировано по левому краю (900x900)") + + def get_password(self): + """Получает пароль от устройства""" + self.add_to_log("🔑 Запуск процесса получения пароля...") + self.status_var.set("Получение пароля...") + try: + # Прошивка STM32 с firmware для получения UID + self.add_to_log("🔍 Прошивка STM32 для получения UID...") + stm32_firmware = os.path.expanduser("~/fw/getuid/STM32_GET_UID.bin") + + + if os.path.exists(stm32_firmware): + # Стираем флеш-память STM32 + self.add_to_log("🧹 Стирание флеш-памяти STM32...") + erase_result = subprocess.run([ + 'st-flash', 'erase' + ], capture_output=True, text=True, timeout=30) + + if erase_result.returncode != 0: + self.add_to_log(f"❌ Ошибка стирания STM32: {erase_result.stderr}") + return False + + # Прошивка STM32 + + # Прошивка ESP32 + self.add_to_log("📥 Прошивка ESP32 для получения пароля...") + port = "/dev/ttyUSB0" + + # Файлы для ESP32 + bootloader_path = os.path.expanduser("~/fw/getuid/bootloader.bin") + firmware_path = os.path.expanduser("~/fw/getuid/ET_22KW_1.0b.bin") + partition_path = os.path.expanduser("~/fw/getuid/partition-table.bin") + www_path = os.path.expanduser("~/fw/getuid/www.bin") + + if not all([os.path.exists(p) for p in [bootloader_path, firmware_path, partition_path, www_path]]): + self.add_to_log("❌ Не все файлы прошивки GetUID найдены") + return False + + # Стираем флеш-память ESP32 + self.add_to_log("🧹 Стирание флеш-памяти ESP32...") + esp_erase_result = subprocess.run([ + 'esptool.py', '--chip', 'esp32', '--port', port, 'erase_flash' + ], capture_output=True, text=True, timeout=60) + + time.sleep(60) # Ждем после стирания + + # Прошиваем ESP32 + flash_command = [ + 'esptool.py', '--chip', 'esp32', '--port', port, '--baud', '460800', + 'write_flash', '--flash_mode', 'dio', '--flash_freq', '40m', '--flash_size', 'detect', + '0x1000', bootloader_path, + '0x10000', firmware_path, + '0x8000', partition_path, + '0x210000', www_path + ] + + self.add_to_log(f"🔧 Команда прошивки: {' '.join(flash_command)}") + flash_result = subprocess.run(flash_command, capture_output=True, text=True, timeout=180) + + if flash_result.returncode != 0: + self.add_to_log(f"❌ Ошибка прошивки ESP32: {flash_result.stderr}") + return False + + self.add_to_log("📥 Прошивка STM32 специальной прошивкой...") + flash_result = subprocess.run([ + 'st-flash', '--reset', 'write', + stm32_firmware, '0x08000000' + ], capture_output=True, text=True, timeout=30) + + if flash_result.returncode != 0: + self.add_to_log(f"❌ Ошибка прошивки STM32: {flash_result.stderr}") + return False + # Перезагрузка устройств + self.add_to_log("🔄 Перезагрузка устройств...") + + # Перезагрузка ESP32 + subprocess.run(['esptool.py', '--port', port, 'run'], + capture_output=True, text=True, timeout=20) + time.sleep(5) + + # Перезагрузка STM32 + subprocess.run(['st-flash', 'reset'], + capture_output=True, text=True, timeout=20) + time.sleep(5) + + # Повторяем перезагрузку для надежности + self.add_to_log("🔄 Повторная перезагрузка устройств...") + subprocess.run(['esptool.py', '--port', port, 'run'], + capture_output=True, text=True, timeout=20) + time.sleep(5) + subprocess.run(['st-flash', 'reset'], + capture_output=True, text=True, timeout=20) + + # Чтение данных с COM-порта + self.add_to_log("📋 Чтение данных с порта...") + try: + with serial.Serial(port, 115200, timeout=20) as ser: + time.sleep(2) + data = ser.read(10000) + received_data = data.decode(errors='ignore') + self.add_to_log(f"📟 Полученные данные: {received_data}") + + # Updated pattern to match "Hash:: XXXXXXXXXXXX" format + import re + password_match = re.search(r'Hash:: ([A-Za-z0-9]+)', received_data) + if password_match: + password = password_match.group(1) + self.add_to_log(f"🔑 Найден пароль: {password}") + self.status_var.set(f"Пароль: {password}") + return password + else: + self.add_to_log("❌ Пароль не найден в полученных данных") + return None + except serial.SerialException as e: + self.add_to_log(f"❌ Ошибка чтения COM-порта: {str(e)}") + return None + else: + self.add_to_log(f"❌ Файл прошивки STM32 для получения UID не найден: {stm32_firmware}") + return None + except Exception as e: + self.add_to_log(f"❌ Произошла ошибка при получении пароля: {str(e)}") + self.status_var.set("Ошибка получения пароля") + return None + def open_minicom(self): """Открывает minicom в отдельном терминале""" try: @@ -267,7 +395,7 @@ class MainApp: """Автоматический режим для STM32 или ESP32""" self.status_var.set(f"Режим Авто {mcu_type.upper()} активирован") self.add_to_log(f"🔄 Запуск автоматического режима для {mcu_type.upper()}...") - import time + if mcu_type == 'test': self.auto_mode_erase_stm32()