Lässt sich die Stromzähler-PIN durch Brute-Force Attacke hacken?

es war jetzt wirklich nicht sehr schwer, vielleicht verstoße ich damit auch gegen einen Hacker §§§, aber das was hier als Zähler-PIN zugemutet wird (und dessen Eingabe..) - aber ich schweife ab :stuck_out_tongue_winking_eye:

@alexx das hängt davon ab :wink:

Ich hatte für einen Zähler von Bayernwerk die PIN angefordert, das dauerte online ca. 10 Minuten (bis man das entsprechende Formular gefunden hat)

Bei Netze ODR hatte es vom Anruf bis zum Brief etwas länger gedauert, glaub 3-7 Tage

Ich habe auch noch eine Person in der Verwandtschaft, die warten schon seit 3 Monaten und der Netzbetreiber kümmert sich nicht (auch nicht nach erneuter Erinnerung)

@Optipower:

Das ist ja prima, dass es bei Dir schon geklappt hat. Welcher Zähler (Hersteller/Modell) war das?

Da muss man etwas aufpassen, dass man nicht zu viel Strom aus den GPIO Pins des Raspberry Pi zieht. Ich glaube mich leise zu erinnern, dass das Limit für den einzelnen Pin so um die 2 mA liegt. Wenn die LED mehr Strom zieht, nimmt man besser einen Transistor, hängt die LED an +5V und schaltet ihre Masse über den Transistor, dessen Basis wiederum über einen Vorwiderstand am GPIO-Pin hängt. So schont man die GPIO-Register.

Wegen Hacker-§: Keine Ahnung, ob das irgendwie kritisch ist. Im Zweifelsfall veröffentlichst Du halt einfach ein Skript, mit dessen Hilfe man eine bekannte PIN in den Stromzähler eingeben kann. Das ist sicher nicht zu beanstanden (tut ja letztlich das Gleiche wie die o.g. Handy-Apps). Eine for-Schleife von 0 bis 9999 darum herum zu bauen wird ggf. schon jeder selbst noch hinbekommen.

So lange willst du uns bitte nicht hinhalten?! Bitte die Links posten! ?

Es ist wirklich nicht mehr, als eine for next Schleife.

Der Zähler wird damit zwar irgendwann freigeschaltet, aber man weiß danach die Pin nicht...

Ich habe meine Blinkled einfach mit nem Vorwiderstand an den esp8266 Pin gepappt. Funktioniert problemlos.

Als LED benutze ich allerdings eine 880nm.

(so vielleicht klappt es jetzt mit dem Posten)

Hier ist es:

<a href=" Link entfernt " rel="nofollow nofollow nofollow"> Link entfernt

und wegen dem Zwischenwiederstand: <a href=" Link entfernt " rel="nofollow nofollow nofollow"> Link entfernt

Die LED am Besten mit schwarzen Isolierband auf dem IR Leser befestigen half bei mir und bot perfekte Eingaben.

Sobald der Zähler freigeschaltet ist, bekommt man die erweiterten Daten. Man kann damit seine PIN stark eingrenzen, ggf. eine Kamera dazu.

Ein anderer Forumsteilnehmer schrieb mir vorhin dass er das Script erweitert hat und nun ein IR Schreib/Lesekopf verwendet werden kann um die genaue PIN zu ermitteln :slight_smile:

Edit: Kann immer noch keine Links posten, es tut mir leid.

gleich nochmal versuchen! :wink:

Ich bin mal so frei: https://pastebin.com/CWjTgLC9

Wer denn? Den müssen wir dann ja nerven, dass er uns auch seine Erweiterung postet. :slight_smile: /p>

Ich bin übrigens am Selben dran.

Ein Script zum Einblinken einer bekannten Pin hatte ich ja schon.

Jetzt hab ich (mit völlig andrem Konzept) auch einen Prototyp, der alle PIN nacheinander testet.

Als nächstes kommt auch bei mir der Test, wann die Pin gefunden ist.

Dazu gibt es mehrere Ideen:

Am Einfachsten kombiniere ich meine 2 vorhandenen Lösungen mit Homeassistant. Das ist allerdings nur bedingt Transportabel.

Ich installiere mein normales Auslesetool und kombiniere es mit dem Prototyp. Das Lesetool speichert seine Werte ja eh in Homeassistant.

Nun lasse ich den Hack Prototyp seine gerade getestete Pin einfach ebenfalls per MQTT an HA senden.

Irgendwann fängt dann HA an, die Zählerwerte zu speichern. Dann schau ich nach, bei welchem Zähler das war...

Nachteil ist, dass ich immer einen Broker , bzw ein HA und ein Wlan "dabei haben" muss.

Diese Lösung ist aber jetzt quasi fertig.

Dann kann ich mir Vorstellen, dass ich Modul1 mit Modul 2 verbinde und dem Auslesetool sage, dass es bei erfolgreichem Lesen, einen Pin auf High setzt.

Dieser Pin veranlasst dann Modul 2 seinen Zählwert ins Eeprom zu schreiben.

Als drittes könnte man natürlich Einblinken und Auslesen in einem Modul machen.

Aber dazu müsste ich beide Konzepte zusammenführen, was mir zuviel Arbeit ist...

Als nächstes könnte ich einfach warten, bis es jemand andres veröffentlicht. :stuck_out_tongue_winking_eye:

Standalone, auf esp8266 mit nem kleinen Display wär schick...

1 „Gefällt mir“

Hallo zusammen,
da mir meine Stadtwerke den PIN meines alten Zählers von 2012 nicht mehr liefern konne, habe ich Optipowers Python Skript etwas abgeändert, so dass es mit einem USB IR-Lese-Schreibkopf funktioniert und automatisch erkennt ob die PIN richtig war. Dann solte nämlich das gesendete Datenpaket länger sein als vorher, weil mehr Werte übertragen werden.
Die PIN wird mittels 100ms langer Lichtpulse (durch senden entsprechend vieler 0x00 Bytes) und 100ms Pause eingegeben. Zwischen den 4 Stellen muss man 3s warten bis er auf die nächste Stelle springt.
Wenn die PIN eingegeben wurde warte ich das nächste vollständige Datenpaket ab und schaue ob es größer ist. Wenn dem so ist, wurde die PIN gefunden.
Getestet hab ich das bisher mit einem RaspberryPi 3 und einem Hichi IR USB (Ich habe auch einen Hichi IR Wifi, aber ob/wie es damit geht hab ich keine Ahnung).
Mein EMH eHZ Generation I (eHZ-IW8E2A5L0EQ2P) von 2012 sendet ohne PIN allerdings schon alle Daten über die optische Schnittstelle (wie ich jetzt weiß). Deshalb hat die automatische PIN Erkennung da nicht funktioniert. Er zeigt mir jetzt allerdings in der zweiten Zeile den Momentanverbrauch an.
Bei einem aktuellen EMH eHZ Generation K (eHZ-KW8E2A5L0EQ2P) von 2021 hat das aber einwandfrei funktioniert.
Die Geschwindigkeit die er hinlegt ist auch beachtlich: Wenn er alle 10000 PINs durchtestet, sollte er ungefähr 50 Stunden dafür brauchen.
Außerdem kann man das Programm jederzeit unterbrechen und an der Stelle wieder weiterlaufen lassen. Danke Optipower, das ist eine gute Idee.
Im File number.txt steht dann ganz am Ende die PIN.
Auf anderen Boards oder PCs muss man möglicherweise den Schnittstellen Name des Lesekopfs im Python Skript anpassen. Ebenso kann es nötig sein für andere Zähler die Baudrate von 9600 anzupassen.
Man startet das Skript einfach mit:

python3 SmartmeterPinHack.py

Will man es weiterlaufen lassen, wenn man die Konsole schließt, sollte man folgendes verwenden:

nohup python3 SmartmeterPinHack.py &

Source Code:
<a title=" Link entfernt " href=" Link entfernt " target="_blank" rel="noopener"> Link entfernt
oder falls der Link nicht geht:
https : // pastebin . com / Rcxix0aX

Ich gebe den Source Code hiermit explizit für alle möglichen Anwendungen/Weiterentwicklungen frei.

Viel Spaß beim Brute-forcing
DarkToon

PS: Ich mache mir keine Kopf wegen dem veröffentlichen dieses Hacks. Wenn die es sicher machen wollten, dann hätten die das sicherer gemacht z.B. mit einer 6-stellige PIN. Aber da sprach wohl die Benutzerfreundlichkeit dagegen.

4 „Gefällt mir“

Dann steht der individuellen Energiewende nichts mehr im Weg! :wink:

Das kann durchaus auch noch bei anderen Stromzählertypen so sein. Außer Deinem Fall, dass er so oder so die vollen SML-Daten sendet, kann es auch sein, dass man bei manchen Stromzählern nach Eingabe der richtigen PIN erst noch in irgendeinem Menü die ausführlichere SML-Botschaft einschalten muss, sie also nicht gleich von selbst kommt. Dann funktioniert die Methode auch nicht.

Da bringst Du mich jetzt aber auf eine Idee: Kamera. Na klar!
Viele Handys haben eine Zeitraffer-Funktion. Und bei denen, die sie nicht per default haben, kann man Apps wie Time Lapse, Lapse It oder dergleichen installieren. Die kann man so einstellen, dass z.B. alle 10 Sekunden ein Foto aufgenommen wird. Das Handy fügt die Einzelbilder dann zu einem Video-Stream zusammen, in dem man die Geschehnisse der letzten Stunden im Zeitraffer sieht. Das würde hier doch genau passen:
Man macht ein solches Zeitraffer-Video vom Display des Stromzählers. Daran kann man dann ablesen, wo das Display mitteilungsfreudiger wurde (Daten in der 2. Zeile), d.h. die PIN richtig war. Die richtige PIN kann man dann auf zwei Arten weit eingrenzen:

  • Auf den letzten Bildern vor der richtigen Eingabe wird man hier und da mal die PIN am Display sehen, die gerade eingegeben wurde. Die richtige muss knapp oberhalb liegen.

  • Alternativ kann man auf der Zeitachse interpolieren. Vor allem dann, wenn man den Reinblink-Algorithmus so gestrickt hat, dass die PIN-Eingaben stets in festen Zeitabständen beginnen.
    Wenn ein kompletter Scan aller PINs um die 50 Stunden dauert, wird man das Handy allerdings an ein Ladekabel hängen müsse, damit es so lange durchhält.

1 „Gefällt mir“

Also wenn ich das mit Kamera machen wollte, würde ich ein ESP32-CAM verwenden und da einen TTL Scheib-Lesekopf dranklemmen.

Dann müsste das Python Skript nach jeder PIN Eingabe nur ein Bild machen. Das entweder (extern) abspeichern oder gleich eine Zeichenerkennung ausführen (das kann die ESP32-CAM Software ja schon).

jetzt wo es gelöst ist, kommen plötzlich die hundert alternativlösungen :slight_smile:

Das ist der Lauf der Dinge. Wenn einer mal die Kraft hat, etwas auszuprobieren und erfolgreich ist, öffnet sich der Weg wie man es auch, besser, schneller oder anders machen kann.

Umgekehrt gilt das genauso: Wenn einer für ein Problem mal jeden Stein umgedreht hat und damit bewiesen, dass es NICHT geht, ist das zwar im Ergebnis erfolglos, aber unendlich wichtig, weil man sich jede Arbeit damit zukünftig ersparen kann. Diese Betrachtungsweise wird leider gerne übersehen.

2 „Gefällt mir“

Ich sitze hier mit einem eBZ DD3 sowie dem Hichi IR WLAN-Modul. Auslesen klappt, aber eben nur eingeschränkt, da ich natürlich keine PIN für den Zähler in einem Einfamilienhaus bekommen habe. Da ich bei den örtlichen Stadtwerken davon ausgehen muss, ebenfalls nach 3 Monaten noch keine PIN erhalten zu haben (geht nur postalisch, "Datenschutz"), schließe ich mich hier mal an.

Leider kann ich nur über das Netzwerk auf den Hichi zugreifen. Mittels Script habe ich es immerhin geschafft, die interne IR-LED zum Blinken zu bringen, aber der Zähler scheint nicht darauf zu reagieren. Ist die LED zu schwach? Mit der iPhone-Taschenlampe ist es schon nicht so einfach, überhaupt zur PIN-Eingabe zu kommen.

Mein Stromversorger hat mir die PIN per E-Mail geschickt innerhalb 24 Stunden nach der Anfrage. Kein Papier…

Das ist vom vnb abhängig, bei Bayernwer muss man sich nur einloggen und kann dort dann die Pin zum Zähler ablesen.

Bei Netze Bw hatte ich angerufen und die wollten Zählernummer und Marktlokation wissen und haben mir dann die Pin per Post geschickt. Hat glaube ich ca. 1 Woche gedauert

Benutz doch die App dafür (weiter oben im Thread)

Es hilft den Hintergrund zu verdunkeln bzw. Reflexionen vermindern.