Обновить myscript.py

Добавлен поиск пароля в логе
This commit is contained in:
2025-10-22 11:18:24 +03:00
parent 500cf8fd1b
commit 5016716227

View File

@@ -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()