GitHub

S60TPG 1.1.1 recovery status

Current state

Why the previous application may still be recoverable

ESP-IDF OTA writes an update to a non-running OTA slot and updates otadata to boot it. Published S60TPG boot information identifies two application slots:

Each slot spans approximately 0x1f0000 bytes. With only one completed vendor update, the original 1.1.1 application should normally remain in the other slot. Static strings in the captured 1.2.0 application do not include esp_ota_erase_last_boot_app_partition, although absence of a string is not proof that the previous slot was preserved.

Do not send another OTA command: the updater normally chooses the non-running slot, which is exactly where the possible 1.1.1 copy should reside.

Recovery paths

Preferred: preserve the flash over serial

With the plug disconnected from mains and the ESP32-C3 placed into download mode, read the complete 4 MiB flash before writing anything:

esptool.py --chip esp32c3 --port <PORT> read_flash 0x000000 0x400000 flash_dump.bin

The dump must remain private because data partitions may contain Wi-Fi and eWeLink credentials. After capture, parse the partition table and identify which slot contains version 1.1.1. Only then consider changing otadata or extracting an app-only recovery image.

Opening this mains-rated plug is mechanically difficult and must never be done while connected to mains power.

Alternative: request a sanitized app extraction

An S60TPG investigator documented taking a 4 MiB dump while firmware 1.1.1 was installed. The full dump should not be shared because it may contain secrets, but its app-only OTA partition could provide a recovery candidate:

https://www.elektroda.com/news/news4122886.html

Any externally obtained image must be quarantined and validated for the exact firmware family, wrapper format, ESP32-C3 image integrity, size, and provenance before it is considered for use.

Network cleanup

The temporary UCG rules used during interception matched:

A read-only SSH audit was attempted, but the gateway correctly required interactive authentication. Confirm in UniFi that the temporary DNAT, MASQUERADE, and earlier blocking rules are disabled or removed.