Heiman WS2SK-EU metering smart plug
Sulla carta sarebbe stata interessante, ma non è basata su ESP8266 e questo la rende di hacking più ostico...
La app originale (Hi-Smart) ha una valutazione media di 3.3 e un titolo in cinese, con una pagina abbondante di richieste di permessi (inclusi accesso alle telefonate e agli SMS)... Scartata.
Entrando in configurazione, non si vede nessun AP nuovo, e questo è un altro brutto segno. Comunque anche alcune prese basate su ESP8266 non si presentano come AP, lasciando ad un protocollo proprietario la configurazione.
Intanto una rapida occhiata all'interno mi rivela che viene usato un modulo HF-LPB100 / USR-WIFI232-T, ma non si vede traccia del protocollo di inizializzazione. Pare tutto demandato al micro che invia comandi AT...
Il micro è "nascosto" sotto la board: sitratta di un ST STM8S003F3, molto minimale.
Altri chip presenti sono il controller switching LNK306DN per la conversione della tensione di rete a 5V:
e l'ormai "classico" misuratore di consumi HLW8012:
Qualche round di tcpdump non mi ha portato a nulla: sicuramente la configurazione viene inserita in un sidechannel che non sto osservando. Vedo solo un burst di pacchetti generati dall'app SmartZone, ma non riesco a riconoscere i dati della rete neanche usando un AP open (senza cifratura). Solo verso la fine si riconosce 'BaseOspite', l'SSID di test.
Temo che l'unico modo per procedere possa essere il dump della comunicazione seriale tra il micro e la radio... Almeno per capire come viene impostato il WiFi e cosa viene ricevuto.
Edit 2018-08-18
Collegandomi alla seriale del modulo inizio a vedere messaggi interessanti. Per esempio, entrando in "pairing":
su_test_1 erase address=be000 page cnt=1 erase address=bf000 page cnt=1 Memsize:39292 sdk version(HSF-V1.40-201503201010-LPB100-128-16B),the app_main start time is Mar 6 2017 10:37:55 sudingkunV1.2 test88 reset_reasion:00000012 Get cmd5 response:3f 10 7f 0 0 Get cmd5 response:3f 90 7f 0 0 Get cmd3 response:3 0 1 0 0 Get cmd7 response:7 0 0 1e 0 Get vendor:0x37a, device:0x5931 WIFI Driver Version:V5.41-LW1.10-2015-04-29 wait for[2001eb20]--->20001874 kalIoctl 863[0 0] nicRxProcessEventPacket: prEvent->ucEID= 9 complete:[2001f3c8] 20001874 kalOidComplete 758[-1 1] wait end[2001eb20]<---20001874 kalIoctl 863[0 0] wait for[2001eb20]--->20001874 kalIoctl 863[0 0] complete:[2001f3c8] 20001874 kalOidComplete 758[-1 1] wait end[2001eb20]<---20001874 kalIoctl 863[0 0] wait for[2001cf64]--->20001874 kalIoctl 863[0 0] complete:[2001f3c8] 20001874 kalOidComplete 758[-1 1] wait end[2001cf64]<---20001874 kalIoctl 863[0 0] wait for[2001cf64]--->20001874 kalIoctl 863[0 0] complete:[2001f3c8] 20001874 tx_thread 1261[-1 1] wait end[2001cf64]<---20001874 kalIoctl 863[0 0] smartlink reset!!! airkiss_reset smartlinkv5 reset!!! smartlinkv3 reset!!! wait for[2001cf64]--->20001874 kalIoctl 863[0 0] STA CONN setp: state=2 ssid=�(4714004914) complete:[2001f3c8] 20001874 tx_thread 1261[-1 1] wait end[2001cf64]<---20001874 kalIoctl 863[0 0] wait for[2001cf64]--->20001834 wext_set_scan 9142[0 0] Add: Base(0904C6042) Add: Base(0904C6042) Add: Base(0904C6042) Add: Base(0904C6042) Add: Base(0904C6042) Add: Base(024FEA7F030) Add: Base(024FEA7F030) Add: Base(024FEA7F030) nicRxProcessEventPacket: prEvent->ucEID= 15 complete:[2001f3c8] 20001834 kalIndicateStatusAndComplete 434[-1 1] wait end[2001cf64]<---20001834 wext_set_scan 9142[0 0] ============================================ 1 -77 0 TIM-2,4 6 -68 0 Base 12 -68 3 BaseOspite 11 -58 0 TIM-20135439 12 -30 3 Base ============================================ 12 -30 11 -58 6 -68 1 -77 13 -10000 smtlk chnl[12], 1900,131073 STA CONN setp: state=0 ssid=�(4714004914) smtlk chnl[11], 2200,131073 smtlk chnl[6], 2500,65537 smtlk chnl[1], 2800,65537 smtlk chnl[13], 3100,131073 smtlk chnl[12], 3400,131073 (3118-12-265-1) (3119-12-265-1) (3120-12-265-1) (3121-12-265-1) smtlk chnl[11], 3700,131073 smtlk chnl[6], 4000,65537 smtlk chnl[1], 4300,65537 smtlk chnl[13], 4600,131073 smtlk chnl[12], 4900,131073 smtlk chnl[11], 5200,131073 smtlk chnl[6], 5500,65537 smtlk chnl[1], 5800,65537 smtlk chnl[13], 6100,131073 smtlk chnl[12], 6400,131073
(le righe smtlk chnl continuano a ripetersi, in attesa che dall'app venga inviato qualche pacchetto).
La parte più interessante è quella dove dice
smartlink reset!!! airkiss_reset smartlinkv5 reset!!! smartlinkv3 reset!!!
Quindi pare supportare 3 versioni del protocollo SmartLink e pure [url=]AirKiss[/url]...
Ho provato a scaricare AirKissDebugger e, malgrado richieda l'installazione fuori da PlayStore per lo meno ha permessi "sani" (solo gestione del WiFi e accesso Internet)... È solo in Cinese, ma mette automaticamente l'SSID nella prima riga, e la seconda "a naso" contiene la password. Associato al primo tentativo. Posso disinstallare SmartZone, che tenevo solo per associare la presa.
SmartLink pare che codifichi un byte della password in ogni pacchetto (traduzione con Google) e poi un pacchetto con la sola stringa "smartconfig". Però non ho notato variazioni nella lunghezza del payload UDP, nel mio tracing...
Purtroppo ancora non riesco a vedere messaggi coi comandi AT inviati dal micro al modulo wifi... Temo proprio che il micro si occupi solo della parte di misura della corrente/tensione, mentre la logica applicativa è stata inserita nel modulo WiFi, come normalmente si fa con gli ESP8266. E questo segna, al momento, la fine della ricerca: non ho ne il tempo ne la capacità di fare un reversing completo del modulo WiFi, disassemblando il suo codice per poi tentare di creargli un nuovo firmware.