RP ✔️ Soflow SO4 Pro Gen 2 "Tuning" APP (SOHacks ReV2.0)

Sag doch mal, hast du auch schon Probiert den Controller mit ARM M4 Chip auszulesen über die PIN`s auf dem Controller? Ist ein ROP drauf aber es sollte trotzdem gehen.
Ich bin vorhin etwas am Basteln gewesen und werde die Tage meinen SO3 Pro Controller Baujahr 2020 mit meinem STLink versuchen erst einmal NUR anzusprechen. Weil der ROP, wenn er drauf ist ja den Chip löscht dann.
Hast du irgendeine Erfahrung in Sachen Controller oder diesem Vorgang? Der funktioniert ja auch bei vielen anderen Scootern Problemlos. Es geht Mittlerweile ja soweit dass es Peoples gibt die einfach den Chip auslöten, diesen dann irgendwie auslesen und durch einen anderen ohne ROP dann ersetzen. Diese SOC`s sind ja CHINA Klone laut der Google KI.
 
Ich hatte eigentlich vor, die App noch etwas weiterzuentwickeln, damit auch andere Scooter damit verbunden bzw. eingestellt werden können. Die aktuelle Soflow App nervt mich nämlich ziemlich.
Momentan bin ich dabei, die neueste Version zu reverse engineeren und schaue, ob es auch für andere Modelle Codes für die Geschwindigkeitseinstellungen gibt. Falls ja, würde ich die mit einbauen.
Das Ganze ist aber recht zeitaufwendig, vor allem auch beim Testen, da ich leider nur den SO4 Pro Gen 2 hier habe.
Hast du denn nur den 4 Pro getestet bei Engeneering deiner App? Was MUSST du haben um dein Tool zu testen? Reicht dir nur ein Controller aus? Oder muss es auch zwingend das Display sein? Nur eiine kleine Bescheidene Frage. Ich denke man braucht beides aber es gibt ja auch Controller die BLE direkt verbaut haben im Controller.
Grüße und viele schöne Weihnachtstage an ALLE!
 
Hast du denn nur den 4 Pro getestet bei Engeneering deiner App? Was MUSST du haben um dein Tool zu testen? Reicht dir nur ein Controller aus? Oder muss es auch zwingend das Display sein? Nur eiine kleine Bescheidene Frage. Ich denke man braucht beides aber es gibt ja auch Controller die BLE direkt verbaut haben im Controller.
Grüße und viele schöne Weihnachtstage an ALLE!
Für die Entwicklung der App habe ich keinen SoC-Dump gemacht.
Das Ganze lief komplett über Reverse Engineering der offiziellen Soflow-App. Ich habe mir mit Ghidra die Dart-Datei vorgenommen und daraus die BLE-Setup- und Kommunikationscodes extrahiert.

Zum Testen meines Tools reicht ein Controller völlig aus.
Display ist nicht zwingend notwendig. Das Display hängt oft nur als Frontend dran.

Nach dem, was ich bisher gesehen habe, ist es so:

Das Display-Modul hat in der Regel sauber aktiviertes ROP

Beim Controller werden oft billige chinesische STM32-Klone verbaut
ROP ist zwar häufig an, aber nicht sauber implementiert und damit unter Umständen umgehbar

Wenn du dich da wirklich rantraust, wäre es mega interessant zu wissen:

was genau du probiert hast

ob ein Dump wirklich funktioniert hat

Denn wenn ein stabiler Controller-Dump möglich ist, steht einer vollwertigen Custom-Firmware im Prinzip nicht mehr viel im Weg.

Es gab wohl schon einen Erfolg:
simcrafterlol hat beim SO4 Pro einen Firmware-Dump gezogen und auch eine Custom-CFW geflasht. Genaue Anleitungen habe ich dazu leider nicht gefunden. Er hatte aber erwähnt, dass die Controller wohl eine CPU-Key-basierte Signierung nutzen; vermutlich muss Firmware korrekt signiert sein, sonst bootet sie nicht.

Ich selbst habe noch keinen Dumpversuch gemacht:

aktuell fehlt mir die Zeit

Equipment wäre da (Logic Analyzer, ST-Link etc.)

Falls du da Erfolg hast, würde ich mir das Thema SO4 definitiv auch nochmal genauer anschauen.

Wichtig noch:
Man muss extrem vorsichtig sein. Es gibt Controller, die sich sofort selbst löschen, wenn man versucht, ROP direkt zu umgehen.
Methoden wie Voltage Glitching existieren zwar, aber das ist nichts, was man "mal eben" probiert; ein Fehler und der Chip ist Schrott.
 
Kurze Info für alle, die versuchen, die App auf anderen Modellen als dem SO4 Pro Gen 2 zu nutzen:

Wenn ihr z. B. SO3, Pro Max usw. habt und versucht, euch damit über die App zu verbinden, wird das sehr wahrscheinlich nicht funktionieren. Das ist kein Bug, sondern liegt daran, dass die BLE-Codes je nach Modell unterschiedlich sind.

Wenn jemand wirklich Bock hat und sich ein bisschen mit Technik auskennt, kann man die BLE-Codes direkt aus der offiziellen Soflow-App ziehen und diese dann in SOHacks entsprechend nachimplementieren.

Ich würde dafür empfehlen, eine ältere Soflow-APK zu nehmen, da diese nicht mit Flutter kompiliert ist und sich deutlich einfacher analysieren lässt.

Ich würde das Ganze selbst auch gerne weiter implementieren, aber mir fehlt aktuell einfach die Zeit und ich habe leider auch nicht die verschiedenen Scooter hier, um das sauber zu testen, ob und wie es auf den anderen Modellen wirklich funktioniert.

Das public Repo findet ihr hier:

Tools:


Native Soflow APK (Ohne compiled flutter)

APK Auslesen: https://rollerplausch.com/threads/s...ng-geheimer-tester-admin-modus-und-mehr.9459/


1766428673011.webp


Das Ganze ist auch ein gutes Beispiel von simcrafterlol, wie er damals den Test/Admin-Modus aktiviert hat.
Er beschreibt dort, wie man die APK öffnet, sich den Source anschaut und darüber an BLE-Commands kommt.

In der APK finden sich außerdem BLE-Commands für verschiedene Scooter-Modelle, die man extrahieren und anschließend in SOHacks implementieren kann. Genau darüber lassen sich dann auch andere Modelle als der SO4 Pro sauber unterstützen.
 
Also, ich habe mich jetzt mal drangewagt, den Controller auszubauen und schaue, wie weit man damit kommt. Der MCU ist wohl ein AT32F421CBT7. Mal sehen, ob dort ROP aktiv ist. Mir ist dabei eine weiße Box zwischen Controller und wahrscheinlich dem Hall-Sensor des Motors aufgefallen. Hat jemand vielleicht eine Ahnung, was das Ding macht?
Datenblatt:


.
photo_2025-12-28_15-00-54.webp
 

Anhänge

  • photo_2025-12-28_15-01-01.webp
    photo_2025-12-28_15-01-01.webp
    44,8 KB · Aufrufe: 0
  • photo_2025-12-28_15-00-59.webp
    photo_2025-12-28_15-00-59.webp
    68,6 KB · Aufrufe: 0
  • photo_2025-12-28_15-00-57.webp
    photo_2025-12-28_15-00-57.webp
    65 KB · Aufrufe: 0
Gibt es eineBluettooth Code um Zerostart zu aktivieren, oder um die aktivierungs Speed zu reduzieren?
Muss ja nicht gleich in der App realisiert sein!