Vorwort
Seit ungefähr 2 Jahren bin ich ein Home Assistant-Benutzer und habe mich allmählich mit Geräten eingelebt, die ich dort integrieren möchte. Eines dieser Geräte war meine relativ junge Anschaffung: ein Konvektor von Electrolux.
Anfangs dachte ich über einen konventionellen Konvektor nach, den ich über eine intelligente Steckdose steuern wollte. Während des Studiums von Konvektormodellen verlagerte sich mein Interesse auf moderne Modelle, die sofort über das Internet gesteuert werden können. Obwohl sie teurer sind als eine Lösung mit einem "Sockel", herrschte Neugierde und die Wahl fiel auf einen modularen Konvektor von Electrolux, der vor dem Hintergrund der Konkurrenz das Design anzog.
Der Konvektor hat seine Aufgabe als Gerät im Winter perfekt gemeistert. Ich bin sehr zufrieden damit.
Schmerzen und erster Kontrollversuch außerhalb der Anwendung
Aber die Kontrolle über die mobile Anwendung brachte nur Ärger.
Lange Verbindung zum Server, manchmal ab dem N-ten Mal. Häufige Nichtverfügbarkeit des Geräts und Bedenken hinsichtlich der Sicherheit. Ein weiterer Meilenstein in der Salbe war das Fehlen von Lösungen für die Integration in Smart Homes.
Nach einiger Zeit entstand Interesse daran, die Möglichkeit der Verwaltung durch Lösungen von Drittanbietern zu untersuchen. Es war nicht möglich, etwas Vernünftiges zu googeln, um den Konvektor zu steuern. Aus diesem Grund habe ich mich entschlossen, den Datenverkehr der mobilen Anwendung zu untersuchen, da das Gerät weit entfernt ist und die Anwendung immer zur Hand ist.
Nach dem Studium der Materialien zur Analyse des Datenverkehrs von Anwendungen und aufgrund mangelnder Erfahrung konnte ich nur herausfinden, welche Daten und wo zur Autorisierung übertragen werden und dass die weitere Kommunikation über TCP in verschlüsselter Form erfolgt. Und ich habe auch herausgefunden, wie eine Android-Anwendung nach dem Zerlegen aussieht.
Dabei fielen meine Hände in der Hoffnung, es später noch einmal zu versuchen.
Zweite Erfahrung
, - . .
, .
2 ,
PHP ( ) Python.
Dabei habe ich herausgefunden, dass jede Sprache ihre eigenen Nuancen in den Verschlüsselungsfunktionen hat. Musste Lösungen in Java, Python und PHP schreiben, um sicherzustellen, dass die Verschlüsselung / Entschlüsselung wie erwartet funktioniert. Beispielsweise verwendet eine Anwendung PKCS7Padding, während andere Sprachen PKCS5Padding benötigen oder eine eigene Implementierung schreiben.
<?php
// ...
public function decrypt(string $message): string
{
$hash = hash('sha384', $this->key, true);
$iv = substr($hash, 32, 16);
$key = substr($hash, 0, 32);
$message = substr($message, 0, -32);
$result = (string) openssl_decrypt(
(string) base64_decode($message, true),
'AES-256-CBC',
$key,
OPENSSL_CIPHER_AES_256_CBC,
$iv
);
return CleanHelper::clean($result);
}
def decode(message, key):
digest = hashlib.sha384(key.encode()).digest()
iv = digest[-16:]
key = digest[:32]
message = message[:-32]
message = b64decode(message)
cipher = Cipher(algorithms.AES(key), modes.CBC(iv))
decryptor = cipher.decryptor()
decrypted = decryptor.update(message) + decryptor.finalize()
unpadder = padding.PKCS7(128).unpadder()
decrypted = unpadder.update(decrypted) + unpadder.finalize()
return decrypted.decode()
So gab es nach einigen Abenden bereits einen Client in PHP , mit dem Sie sich anmelden und über TCP mit dem Server kommunizieren konnten.
Meiner Meinung nach könnte das daraus resultierende MVP als Erfolg gewertet werden. Teil 2
Link zum Repository und Telegramm