Lidl WI-FI Steckdose SWS-A1 SilverCrest IAN 103043

Begonnen von ext23, 14 Juni 2015, 09:22:22

Vorheriges Thema - Nächstes Thema

enterpriseII

#165
Hallo SebiM,

das scheint meine Vermutungen aus dem Mitschnitt zu bestätigen.

Zitat von: SebiM am 10 Oktober 2016, 16:47:44

1 B  immer 0
2 B  Packet Counter, oder einfach FFFF
1 B  Company Code. ANSCHEINEND C1 = Lidl, C2 = Aldi
1 B  Device Code -- 11h für Funksteckdose?
2 B  "Auth Code", hier 92DD, wohl bei jeder Dose anders
x B  Kommando

RF-Kommando:
1 B  08 "ich bin ein RF-Kommando"
2 B  RF-Adresse
1 B  Kommando: 60h/70h fürs Schalten, 0 wird für Dimmer verwendet (gefolgt von einem Wert)



Nur der "Auth Code" scheint nicht idividuell zu sein. Ich habe denselben wie starfish.

starfish

#166
Zitat von: micky0867 am 10 Oktober 2016, 13:52:18
Pack mal in die ALLERERSTE Zeile

#! /usr/bin/perl


und ersetze das erste "se" durch "use" (ohne Anführungszeichen).

Micky
hallo Micky, danke für den Hinweis.
das habe ich inzwischen auch gemerkt,  aber jetzt fehlt noch ein modul

Can't locate Net/Packet/Consts.pm in @INC (@INC contains: /etc/perl /usr/local/lib/perl/5.14.2 /usr/local/share/perl/5.14.2 /usr/lib/perl5 /usr/share/perl5 /usr/lib/perl/5.14 /usr/share/perl/5.14 /usr/local/lib/site_perl .) at ./decode.pl line 4.
BEGIN failed--compilation aborted at ./decode.pl line 4.
root@cubietruck:~#


wie auch immer, das Problem ist dank enterpriseII  eigentlich gelöst.  Beide Dosen lassen sich jetzt ansprechen.
gruss
Starfish


starfish

@enterpriseII  ... das ist aber cool,  das funktioniert tatsächlich - hab vorab mal die WLAN-Dose getestet,  die RF-Dose folgt anschliessend.   Ein kleines Detail,  mein nc   versteht -4u  nicht   aber es reicht, einfach  "4"  wegzulassen   also nur -u
meld mich gleich wieder

enterpriseII

Zitat von: starfish am 10 Oktober 2016, 18:24:51
@enterpriseII  ... das ist aber cool,  das funktioniert tatsächlich - hab vorab mal die WLAN-Dose getestet,  die RF-Dose folgt anschliessend.   Ein kleines Detail,  mein nc   versteht -4u  nicht   aber es reicht, einfach  "4"  wegzulassen   also nur -u
meld mich gleich wieder
:)

4 legt IPv4 fest. Wird bei dir aber wohl sowieso Standard sein.

SebiM

Zitat von: enterpriseII am 10 Oktober 2016, 17:59:04
Hallo SebiM,

das scheint meine Vermutungen aus dem Mitschnitt zu bestätigen.

Nur der "Auth Code" scheint nicht idividuell zu sein. Ich habe denselben wie starfish.

Das mag sein, weiß ich nicht genau. Haben die Lidl-Dosen auch alle z.B. 7150 wie meine, da müsste ich jetzt ewig hier im Forum zurück lesen und das finden? Den Apps ist das wohl egal, weil die beim Anlernen den Code beim Broadcast-Antwort-Erfassen sehen und in ihrer Einstellungs-Datenbank speichern. (Wenn ich mich recht entsinne, speichert die zwei Tabellen, eine für WLAN-Geräte und eine für RF-Geräte)

starfish

soo,  RF  getestet - funktioniert auch, Spitze. 

SebiM

Zitat von: enterpriseII am 10 Oktober 2016, 17:59:04
Nur der "Auth Code" scheint nicht idividuell zu sein. Ich habe denselben wie starfish.

So! Nun, da ich auch mit einem Aldi-Set ausgestattet bin, kann ich für den Payload-Header bestätigen:
1 B  immer 0
2 B  Packet Counter, oder einfach FFFF
1 B  Company Code
1 B  Device Code -- 11h für Funksteckdose?
2 B  Auth Code

Lidl (SilverCrest): Company Code C1, Auth Code 7150
Aldi (EasyHome): Company Code C2, Auth Code 92DD

...tatsächlich...

Nebenbei auch witzig, ich weiß nicht ob's sonst jemand schonmal mit beiden gleichzeitig ausprobiert hat: Der App und dem Cloud-Gedöns ist das alles egal, ob Aldi oder Lidl. Ich hatte früher die SilverCrest-App verwendet, aber die Aldi-App (smart2connect) funktioniert mit denselben Login-Daten. Und es tauchen auch beide WLAN-Dosen gleichzeitig auf. Sprich, da gibt's keinen Hersteller-'Lock' oder sowas.

SebiM

Zitat von: SebiM am 10 Oktober 2016, 16:47:44
RF-Kommando:
1 B  08 "ich bin ein RF-Kommando"
2 B  RF-Adresse
1 B  Kommando: 60h/70h fürs Schalten, 0 wird für Dimmer verwendet (gefolgt von einem Wert)

Korrektur: Die RF-Adresse ist 24 Bit lang.
Wem es zu mühselig ist, mit Wireshark o.ä. oder einem Paket-Decoder herumzufuhrwerken, aber zufälligerweise ein gerootetes Android-Gerät zur Hand hat, kann die RF-Adressen auch aus der SQLite-Datenbank der App auslesen, die Datei heißt wie folgt:
/data/data/com.bugull.smart2connect/databases/smart2connect
(Existiert evtl. nur, während man angemeldet ist?)
Dort gibt's unter
CREATE TABLE t_scene_rf (_id INTEGER PRIMARY KEY AUTOINCREMENT,username TEXT NOT NULL,mac TEXT NOT NULL,name TEXT,image_name TEXT,type INTEGER,address_code TEXT,scene_id TEXT,order_number INTEGER DEFAULT 0,scene_device_type INTEGER DEFAULT 2,last_operation BIGINT DEFAULT 0,operation_type INTEGER DEFAULT 0,is_synch INTEGER DEFAULT 0,is_deleted INTEGER DEFAULT 0);
dann einen
INSERT INTO "t_scene_rf" VALUES(1, ...);
mitsamt der RF-Adresse.

Meister_Petz

#173
Moin,

kann mir irgend jemand erklären, wie ich die mitgesnifften Daten-Pakete dekodieren kann? (Ich arbeite am Mac)

Gibts da irgend nen Online AES Decrypter?

Danke

Petz

Daten die ich mitgelesen habe:
0142009569a7009a105133602a32dd3f362026ca30f8d3fd15
0142009569a7009a103a13db9bfdb50e1fc4f2f92d96f7b3c8
0140009569a7009a109b9df9147a46b242427027ecf5ad6df0
0140009569a7009a108cd9631e7a55460c56027fdb15456587
0140009569a7009a10e3948fdd2780cde02efbbb934a648f18
0140009569a7009a100559eeb764048b25b6fdfef8745b2ed5
0140009569a7009a10971fee628c3ccde6202f8874f548c475
0142009569a7009a10aa74e08f16daaafa53248db52e12b44b
0140009569a7009a103ffa77770cc40148257bdbe37c4d9bee
0140009569a7009a1079d834f850786aa092f6242aba683485

FranzB94

Hi!
Ich habe 2 von diesen Teilen. eine Steckdose funktioniert mit dem Modul einwandfrei. die andere dose blinkt langsam rot vor sich hin und lässt sich nicht schalten. Weiß jemand wie man die Dose resettet und kann mir das hier mitteilen? Danke

SebiM

Zitat von: Meister_Petz am 20 Oktober 2016, 13:49:24
Moin,

kann mir irgend jemand erklären, wie ich die mitgesnifften Daten-Pakete dekodieren kann? (Ich arbeite am Mac

Also meine PHP-Scripts laufen nicht ohne Weiteres; jedenfalls habe ich's bislang nicht geschafft, das PHP5-mcrypt-Modul unter OS X "mal eben" zum Laufen zu bringen. Habe das aber nicht weiter verfolgt, weil ich Zugriff auf genug Linux-Büchsen habe.

ZitatGibts da irgend nen Online AES Decrypter?

Nicht dass ich wüsste, aber ließe sich einrichten. Soll ich was basteln? Adresse dann aber nur per PN, mag meine Domains nicht öffentlich sichtbar haben.



Zitat
Daten die ich mitgelesen habe:
0142009569a7009a105133602a32dd3f362026ca30f8d3fd15
0142009569a7009a103a13db9bfdb50e1fc4f2f92d96f7b3c8
...


Hm, das ergibt aber irgendwie keinen Sinn :-/
Die MAC-Adresse sieht zwar richtig aus (009569a7009a), der Rest im Header passt auch; aber nach dem AES-Dekodieren kommt nichts Sinnvolles bei heraus. Was soll das denn jeweils darstellen? Normales Schalten oder die ganzen Zusatzoptionen?
Hier mal exemplarisch das Ergebnis der ersten 3 Pakete:
8bbe23068912-ae78f8d5f1a78f11e3
5717a763ce61-6501a670a35df9a445
8f0f073292b4-1dfc0cc3439b7f094d

Normalerweise schaut das aber eher z.B. so aus:
0002a1c21192-6157f7b3e104040404

Meister_Petz

@SebiM,

es wurde nur an und aus geschaltet...

Anbei hab ich noch zwei PCAP Dateien von einer anderen Steckdose:
In dem einen File schalte ich nur den Master im anderen nur den Slave
- die Steckdose hat die 192.168.100.44
- das iPhone die 192.168.18.4

Wäre super wenn Du nochmal drüber schaun könntest! Eine Online Version deines PHP Decrypters wäre auch genial ;-)

Gruß und vielen Dank

Petz



SebiM

Zitat von: Meister_Petz am 20 Oktober 2016, 17:09:59
@SebiM,

es wurde nur an und aus geschaltet...

Anbei hab ich noch zwei PCAP Dateien von einer anderen Steckdose:

Habe das schnell getestet mit dem 1. Paket, das schaut schon besser aus:
Command: 1
Lock status: 64
MAC address: 009569a70092
Encrypted block length: 16 bytes
Decrypted data: 000162c21192-010000ffff04040404

Der Trennstrich im Dump ist absichtlich dort, trennt quasi den Header vom eigentlichen Befehl. Der hier ist ein Einschalt-Befehl... (das ffff. Ausschalten wäre 00ff)

Eine Online Version deines PHP Decrypters wäre auch genial ;-)

Jaa ich bastle mal was zusammen, weiß aber noch nicht genau, wie lange ich brauche. Mit etwas Glück noch heute.
Aber, als große Lösung wäre natürlich schick, wenn man PCAP-Dateien einlesen könnte.
Deine müssten gehen, der "file" gibt mir für die ein "tcpdump capture file (big-endian) - version 2.4" aus; für die älteren Dumps hier neulich "extended tcpdump capture file (little-endian) - version 2.4", da hatte ich mit nem fertigen PHP-Script Probleme.
Naja, mal scheibchenweise vorarbeiten... Als Luxus-Lösung könnte man auch umgekehrt einen Paket-Builder basteln. Ich melde mich, sobald es was zu sehen gibt

Meister_Petz

Hallo SebiM,

erstmal vielen Dank! Kannst Du mir vielleicht noch den String raussuchen, der das von Dir besagte Ergebnis gebracht hat. Dann geh ich mal auf die Suche nach nem Tool... vielleicht gibts ja schon was.

Wenn ich das Richtig verstehe, dann geht es ja prinzipiell so:

- Ich nehme von diesem String nur den Fett gedruckten Teil:
01:40:00:95:69:a7:00:92:10:16:93:69:60:09:bd:3d:d8:39:f1:6a:27:0e:da:c8:7b

und dieser Teil: 1693696009bd3dd839f16a270edac87b ist nun AES verschlüsselt.
aber AES mit welchen Eckdaten? CBC EBC... IV... Key 0123456789abcdef?

Danke für deine Hilfe!

Gruß

Petz

SebiM

Zitat von: Meister_Petz am 20 Oktober 2016, 18:42:30
Hallo SebiM,

erstmal vielen Dank! Kannst Du mir vielleicht noch den String raussuchen, der das von Dir besagte Ergebnis gebracht hat. Dann geh ich mal auf die Suche nach nem Tool... vielleicht gibts ja schon was.

Das war das 1. UDP-Paket aus der Master.pcap:
0140009569a70092101693696009bd3dd839f16a270edac87b
oder anders formatiert
0000   01 40 00 95 69 a7 00 92 10 16 93 69 60 09 bd 3d
0010   d8 39 f1 6a 27 0e da c8 7b

Wenn ich das Richtig verstehe, dann geht es ja prinzipiell so:

- Ich nehme von diesem String nur den Fett gedruckten Teil:
01:40:00:95:69:a7:00:92:10:[b]16:93:69:60:09:bd:3d:d8:39:f1:6a:27:0e:da:c8:7b[/b]

und dieser Teil: 1693696009bd3dd839f16a270edac87b ist nun AES verschlüsselt.
aber AES mit welchen Eckdaten? CBC EBC... IV... Key 0123456789abcdef?


Soweit korrekt.
Hier nochmal die Vorgehensweise in PHP beispielshaft:
    $td = mcrypt_module_open(MCRYPT_RIJNDAEL_128, '', MCRYPT_MODE_CBC, '');
    $key = '0123456789abcdef';
    mcrypt_generic_init($td, $key, $key);
    $result = mcrypt_generic($td, $packet);
Respektive umgekehrt mit mdecrypt_generic()
Und $packet ist hier natürlich nur dieser 16-Byte-Block

...hab's aber gleich mit dem Online-Dekoder...