Загрузка данных


import struct
import zlib

def patch():
    # Размер заголовка TP-Link (обычно 128 байт для этой серии)
    HEADER_SIZE = 128
    
    with open('stock_firmware.bin', 'rb') as f_stock:
        header = f_stock.read(HEADER_SIZE)
        
    with open('tp_recovery.bin', 'rb') as f_custom:
        body = f_custom.read()
        
    # Соединяем
    full_image = header + body
    
    # Считаем контрольную сумму (CRC32), которую требует WebUI
    # CRC32 считается по всему файлу, кроме самого поля CRC
    # Но для многих TP-Link достаточно просто собрать файл правильно
    
    with open('factory_final.bin', 'wb') as f_out:
        f_out.write(full_image)
    
    print("Файл factory_final.bin готов!")

if __name__ == "__main__":
    patch()