-
Notifications
You must be signed in to change notification settings - Fork 6
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
Protocol for new Machines #2
Comments
Ich habe aktuell nur Zugriff zu einer Jura E6. Es könnte gut sein, dass es daran liegt, dass ich mit 'FA:04' einfach nur den Knopfdruck simuliere. Wenn jetzt die Maschine aber keine Knöpfe hat, ist das vermutlich nicht verfügbar. === I currently only have access to a Jura E6. It could well be that it is because I simply simulate the button pressure with 'FA:04'. But now if the machine has no buttons, that's probably not available. |
Die Befehle wie FA:04 habe ich schon probiert und dabei passiert bei der Maschine nichts. Wie du schon sagst, keine Knöpfe und deshalb vermutlich nicht verfügbar. Ich habe beide Dongles. Vom Wi-Fi Dongle konnte ich einen Firmware-Dump anlegen, hatte die Hoffnung daraus das aktuelle Protokoll zu finden. Leider funktioniert der Wi-Fi Dongle nicht mit der ENA 8... Der Wi-Fi Dongle basiert auf einem ESP32, lässt sich also leicht selbst programmieren. Mein Ziel wäre es den Wi-Fi Dongle als Schnittstelle zu verwenden um auch ohne die App Kaffee zubereiten zu können. Vielleicht doch nochmal versuchen die Wi-Fi Firmware zu reversen. === I have already tried the commands like FA:04 and nothing happens with the machine. As you say, no buttons and therefore probably not available. I have both dongles. From the Wi-Fi dongle I was able to create a firmware dump, had hope to find from it the current protocol. Unfortunately, the Wi-Fi dongle does not work with the ENA 8.... The Wi-Fi dongle is based on an ESP32, so it is easy to program it yourself. My goal would be to use the Wi-Fi dongle as an interface to make coffee without the app. Maybe another try to reverse engineer the W-Fi firmware. |
Hallo Zusammen, |
Bekommst du ein Ja, das mit dem ESP32 habe ich auch schon hinbekommen. Hast du hier auch direkt Kabel an den ESP32 gelötet, oder gibt es da einen bessern Weg? Ich habe zwar die Debug-Pads gesehen, konnte sie aber nicht ordentlich zuordnen. Als kleiner Spoiler, im Image steht darüber nichts, da hier der Kaffee über eine zweite ebene "obfuscation" geordert wird nachdem der Dogle sich authentifiziert hat: https://github.com/Jutta-Proto/protocol-cpp/blob/main/protocol_snoops/keyexchange.md === Yes, I have already managed that with the ESP32. Did you solder cables directly to the ESP32, or is there a better way? I did see the debug pads, but couldn't map them properly. As a small spoiler, there is nothing about this in the image, as here the coffee is ordered via a second level "obfuscation" after the dogle has authenticated itself: |
Sobald meine Frau die Steckdose bei der Kaffeemaschine wieder frei gibt kann ich gerne ein paar Kaffees zubereiten. Vielleicht finden wir ja doch irgendwie raus wie man den Kaffee direkt starten kann ohne das Drücken von Tasten zu simulieren. === As soon as my wife releases the socket at the coffee machine I can prepare a few coffees. Maybe we can somehow figure out how to start the coffee directly without simulating the pressing of buttons. |
@COM8 Kann ich tatsächlich aus dem Kopf heraus nicht sagen. Muss ich nochmal austesten ob ein "ok" retour kommt. Soweit ich mich erinnere passiert aber einfach nichts. Auch kein "ok". Ich hab schon eine Befehle als Stichprobe getestet, Kaffee kommt dabei aber keine zustande. Die Testpads konnte ich zuordnen. Habe den ESP32 über diese auch geflasht. Wenn im Dongle nochmal eine Obfuscation stattfindet, dann sollte es ja möglich sein auf die Ursprungsbefehle zu schließen? Hast du es geschafft die Firmware vom ESP32 zu reversen? === I can not actually tell from memory. I must test again whether an "ok" comes back. As far as I remember nothing happens. No "ok" either. I have already tested random commands, but no coffee. I was able to assign the test pads. I also flashed the ESP32 using them. If in the dongle again an obfuscation takes place, then it should be possible to determine the original commands? Did you manage to reverse the firmware of the ESP32? |
Problem ist, der Handshake, den ich hier beschreibe findet nur garantiert beim Bluetooth-Dongle statt. Da meine Maschiene auch kein Support für den WiFi-Dongle hat kann ich da nicht wirklich snoopen (klar ich könnte eine dummy-Maschiene bauen indem ich mit einem ESP das simuliere und dann schauen was passiert). Bisher bin ich aber daran gescheitert aus den Daten irgendeinen Sinn zu machen, was danach kommt. Hier ein paar Snoops: https://github.com/Jutta-Proto/protocol-cpp/tree/main/protocol_snoops Ja, die ESP32-Firmware ist nicht verschlüsselt und kann somit einfach analysiert werden. Das habe ich auch schon bei den ganzen Strings gemacht, die in der Binary zu finden sind (Binwalk). Weiter bin ich aber bisher noch nicht gegangen, da ich gerade daran Arbeite das dumpen zu dokumentieren. Darf ich dein Bild von der Platine hier verwenden? Auch die Firmware von Bluetooth-Dongle kann gedumpt werden, da bin ich aber gerade noch dran mich ein zu lesen, da ich mit diesem Microcontroller noch nie gearbeitet habe. === Problem is, the handshake I describe here is only guaranteed to happen with the Bluetooth dongle. Since my machine also has no support for the WiFi dongle I can't really snoop there (sure I could build a dummy machine by simulating it with an ESP and then see what happens). But so far I failed to make any sense out of the data what comes after. Here are a few snoops: https://github.com/Jutta-Proto/protocol-cpp/tree/main/protocol_snoops Yes, the ESP32 firmware is not encrypted, so it can be easily analyzed. I already did that with all the strings that can be found in the binary (Binwalk). But I haven't gone further yet, because I'm working on documenting the dumping. May I use your picture of the board here? Also the firmware of the bluetooth dongle can be dumped, but I am still reading up on it, because I have never worked with this microcontroller. |
Ich vermute mal, dass die Kommunikation zwischen Bluetooth- bzw. WiFi-Dongle und Maschine wohl die gleiche sein wird. Die Snoops sehen bei mir auch so aus, auch mir erschließt sich die Logik dahinter noch nicht. binwalk hab ich auch schon drüber laufen lassen. Sitze im Moment vor Ghidra und versuche zu verstehen was ich da sehe. Bin mir aber nicht sicher ob der dump den ich habe vollständig ist... Muss sagen, dass ich mich vorher noch nie mit Reverse Engineering beschäftigt habe. Bild gerne verwenden. Kann man dich irgendwo anders auch noch antreffen? Discord oder dergleichen? === I assume that the communication between the Bluetooth or WiFi dongle and the machine will be the same. The snoops seem the same on my machine, but I also don't understand the logic behind it yet. I have also run binwalk over it. At the moment I'm sitting in front of Ghidra and trying to understand what I see. But I am not sure if the dump I have is complete... Must say that I have never dealt with reverse engineering before. Feel free to use image. Is there anywhere else you can be contacted? Discord or something like that? |
Five times hot water. Five times a different command sent from the dongle to the machine. |
@ralmulle https://github.com/BNoiZe/jura-esp32-connect/blob/main/protocol_snoops/connect_and_hot_water.txt Connecting is like we know it. Looks like all things after T3 are somehow encrypted. As soon as the device disconnects from bluetooth there is now more output from dongle/machine. One thing all messages have in common is the & at the beginning and \r\n as end. |
Thank you for the byte sequences. |
I have a bit of basic knowledge about the tools used for such jobs, but nothing too fancy here. Sure we could open a chat room on Matrix (@ga87qip:tum.de) or XMPP ([email protected]). I don't have a discord account right now. Do you have a Matrix or XMPP account? |
Yes, that's exactly what I've been scratching my head about for almost half a year so far. Does the handshake look the same for you like described here. Especially the |
Currently looking into getting an XMPP account or installing Matrix.
The process for the handshake is the same, but the keys and version are different.
|
Nearly the same: |
As already expected, was the |
Has there been any progress on this topic ? I've got an E8 (AB) with bluetooth and wanted switch over to wifi just to figure out that my coffe machine is to old to support wifi. So i also started with dumping firmware and trying to figure out how to get around this issue. The problem is that i'm not somebody who ever did reverse engineering on such kind of things so i'm now sitting in front of Ghidra and have no idea what i'm seeing here. |
We have a reversed version of the bluetooth firmware. There is some kind of disc encryption in place. Currently no working communication. Only garbage available. |
That's basically what is happening: protocol-cpp/src/test_exec/handshake_test.cpp Lines 75 to 121 in 29823be
But the result does not work. I'd say since the first byte always changes in the encrypted message and in the unencrypted one it's always '@', the handshake has an influence here and acts as a "salt" or some kind of counter. If you want, I can give you read access to the ghidra repo, so you can have a look at the stuff we already figured out. |
That would be nice, just to have a look. I've lost a little bit track on wich bit of communication this happens. The communication between WIFI <-> Coffe Maker and BLE <-> Coffe Maker should be the same, or do i miss something here ? Has somebody ever ask Jura if they can give us any information on this ? Maybe they are happy to see their stuff integrated elsewhere. |
Yes, I was in contact with JURA and this was the reply:
The communication between App <--> BT-Dongle is already cracked and can be found here: https://github.com/Jutta-Proto/protocol-bt-cpp This is for the communication between CoffeeMaker <--> BT-Dongle, basically the UART based connection. If you want to make your "old" coffee maker WiFi ready, you can use the library provided here if you are happy with the commands in this list: https://github.com/Jutta-Proto/protocol-cpp#available-commands Here you can find an example implementation: https://github.com/Jutta-Proto/gtk-ui/tree/serial If you want even more, we have to get around the second level of encryption for advanced commands. That's what we are currently working on. |
@p47-6 Do you have a Matrix account? In case you can contact me there (@ga87qip:tum.de), so I can give you access to it. If not, you can also simply drop me a mail ([email protected]). |
Just wanted to chime in on this interesting discussion. We have a Jura X9C Pro and have sucessfully "made coffee" using the FA:0X commands. I think on our machine it simulates the "wheel" menu, but it skips the double doses (like 2 espressi). Reading the sensors seems really difficult, and we have not made any progress here. |
This is something I can confirm. For me I can not make 2 espressi. I always defaults back to a regular coffee. |
We can make all the drinks, just cycling the FA:XX commands. We also found commands for "infinite milk foam" which doesnt seem super practical. But if you make any progress on the sensor output, that would be really useful knowledge. |
any updates on this? I have a Z10 with a WiFi Connect dongle and I would like to integrate it to Home Assistant through ESPHome. |
any progress with wifi? |
Nope, sadly not from my side @bischoffjeremy since I changed my job and now don't have access to a JURA coffee maker any more. |
I'm trying to resurrect all this. I've done a full packet capture on the network traffic between the app and wifi dongle; hoping it may help shed some light. |
@COM8 genauer: "machinefiles"? |
Wilkommen @8818freak 🎉 ! ==== Welcome @8818freak 🎉 ! |
Ah, ok. |
Oh, ja. Dieses Rabbit Hole bin ich auch schon runter gegangen. Aber ich habe da nichts weiteres herausgefunden, wie den Testmode, wo man alle Buttons etc. testen kann. |
Was meinst Du damit? |
Beim bruteforcen von Kommandos bin ich aber auch schon einmal in einem Menü gelandet, wo auf dem Display stand "Programming...". Das konnte ich aber leider nicht mehr reproduzieren. ====
When bruteforcing commands, I also ended up in a menu where the display said "Programming...". Unfortunately I could not reproduce this. |
Ah, ok. Es gibt auch einen Display- und und einen LED- Test. Aber Einstellungen werden Ausschließlich im Kundenmenü oder mit der Serviceanimation über die serielle Schnittstelle vorgenommen, ebenso das Laden von Updates oder neuen Parametern, beispielsweise für Anpassungen von Heizkurven, Pumpensteuerung, Trester-Mengen, minimale und maximale Mahlwerkslaufzeiten, Vorbrühen ein, aus, Vorbrühdauer, Funktionen der Tasten bei den Profimaschinen, Kolbenhübe je Taste.... |
Very strange that on my E6 (2023), none of the FA:XX FN:XX is working. Is it other codes for 2023 machines ? |
@COM8 could i get access to the hidra repo I am trying to figure out the disc encryption. |
@8de2fdb0 sure. Please send a mail to jutta (at) uwpx.org |
Hi, |
@ljames8 sadly I'm currently not giving others access any more. Sadly I don't have time right now to maintain the Ghidra Server |
Hallo,
nicht direkt ein Bug, mehr ein Kontaktversuch bzw. Diskussion.
Es sieht aus als wären die Befehle mit neueren Maschinen wieder geändert worden. Selbst besitze ich eine ENA 8 mit Touchdisplay. Ich hab schon einiges aufgefangen vom Bluetooth-Dongle. Befehle wie "TY:" funktionieren noch immer. Auch das Auslesen von Statistiken funktioniert noch gleich.
Geändert hat sich offenbar wie die Zubereitung von Kaffee angestoßen wird. Die Befehle die der Dongle dabei an die Maschine sendet machen für mich absolut keinen Sinn wenn ich sie mit bekannten Befehlen vergleiche.
Hast du den Code schon mit neueren Maschinen probiert?
The text was updated successfully, but these errors were encountered: