- LiTime Speicher und Akkus         
Ergebnis 1 bis 7 von 7

Thema: Firmware (.hex) eines E Scooter BLDCs reversen und verstehen?

  1. #1

    Firmware (.hex) eines E Scooter BLDCs reversen und verstehen?

    Anzeige

    Powerstation Test
    Hallo Leute,

    Ich war damit schon überall im Internet, und habe jetzt bei Discord den Hinweis bekommen es hier dich mal zu versuchen. Ich habe eine Firmware
    eines E Scooters und will einige Kennwerte dieser ändern. Leider ist die Firmware für mich und für alle die sich bisher daran versucht haben
    ein Buch mit 7 Siegeln, das keiner so wirklich versteht. Daher wollte ich hier fragen ob denn einer weis wie man sowas (Disassembly, Decompilat) liest und versteht?

  2. #2
    Neuer Benutzer Öfters hier
    Registriert seit
    25.08.2019
    Beiträge
    6
    Hast Du Unterlagen, Schaltpläne usw. von Deinen E-Scooter?

  3. #3
    Zitat Zitat von balanceistischen Beitrag anzeigen
    Hast Du Unterlagen, Schaltpläne usw. von Deinen E-Scooter?
    Hallo,

    Ich habe ein weiteres PCB von einem Baugleichen Controller wie dem der im Scooter verbaut ist, natürlich kenne ich das komplette Pinout von dem Controller (Welche Kabel welche Signale leiten, und wo sie hingehen und wofür sie sind). Anhand von dem unbestückten Board könnte man das Platinenlayout
    und damit die Schaltung reversen. Soll ich die Firmware mal hier hochladen, hätte diese auch Decompilliert vorliegen, als Decompiler wurde IDA 7.0 und der HEX Rays decompiler genutzt, der verwendete Mikrocontroller ist ein STM32F103C8T6. Ich verstehe leider nicht, wie die Firmware funktioniert, die ist äußerst komplex. Interesse wäre seitens mir da, zu lernen wie man sowas reversed, aber bei Mikrocontroller.net (Da hab ich vorher gefragt) wird man immer schon angeschumpfen wenn man blöd fragt, die scheinen das nicht so zu mögen.

  4. #4
    Erfahrener Benutzer Fleißiges Mitglied Avatar von Defiant
    Registriert seit
    17.04.2005
    Ort
    Hamburg
    Beiträge
    182
    Ist vielleicht kein Zufall, bei den Hoverboards kamen ebenfalls STM32F103 zum Einsatz, so oder so empfehle ich https://github.com/NiklasFauth/hoverboard-firmware-hack als Einstieg.

  5. #5
    Erfahrener Benutzer Robotik Einstein Avatar von wkrug
    Registriert seit
    17.08.2006
    Ort
    Dietfurt
    Beiträge
    2.187
    Daher wollte ich hier fragen ob denn einer weis wie man sowas (Disassembly, Decompilat) liest und versteht?
    Da es sich hierbei ja dann um Assembler handelt ist das nicht so ganz einfach.
    Die Sprungmarken sind nicht vernünftig benannt, Komentarzeilen ohnehin nicht drin.
    Vermutlich werden auch die Register mit Ihren Adressen und nicht mit den Namen angesprochen.
    Du brauchst auch eine IDE für genau den verwendeten Controller - Gut, die hast Du ja.
    Ich denke das die Firmware in einer Hochsprache geschrieben und dann Assembliert wurde.

    Manchmal hilft es auch das Assembler File mit einem Simulator auszutesten.
    Da sieht man dann wenigstens welche Programmteile wann angesprochen werden.

    Oftmals ist es einfacher selber einen komplett neuen Quelltext z.B. in C zu schreiben, bevor man eine vorhandene .hex Datei zerfieselt.

    Das schwierigste hierbei dürfte die "saubere" Ansteuerung der Brushlessmotors sein.
    Macht man da was falsch kann man schnell Rauchzeichen erhalten.
    Aber evtl. findet man dazu auch eine Application Note beim Controller Hersteller, oder eine gute Library.

  6. #6
    Erfahrener Benutzer Robotik Einstein
    Registriert seit
    07.03.2011
    Beiträge
    1.899
    Zitat Zitat von wkrug Beitrag anzeigen
    Ich denke das die Firmware in einer Hochsprache geschrieben und dann Assembliert wurde.
    ....
    Oftmals ist es einfacher selber einen komplett neuen Quelltext z.B. in C zu schreiben, bevor man eine vorhandene .hex Datei zerfieselt.
    Oder anders formuliert, wer das selber locker programmieren kann, versteht möglicherweise den disasemblierten Code, den ein anderer geschrieben hat.

    Am Ende läuft es darauf hinaus, aus der Form einer Pfütze herzuleiten, wie der Eisblock mal ausgesehen, aus dem sie entstanden ist.

    MfG Klebwax
    Strom fließt auch durch krumme Drähte !

  7. #7
    Der Code ist nicht disassembliert sondern decompilliert, dürfte also deutlich besser sein als ein Disassembly. Genau da liegt auch das Problem,
    ich kann fast alles, nur Programmieren gehört leider nicht dazu, dass das für so ein Vorhaben ziemlich blöd ist nicht programmieren zu können weiß ich auch.
    Ich würde ja das Programm wenn ichs könnte neu schreiben oder jemanden fragen der das kann, aber erstens interessiert mich wie die originale Firmware da drin funktioniert (Die ist schon ziemlich gut) und zweitens dürfte es wahrscheinlich mehr aufwand sein eine Firmware von jemandem schreiben zu lassen (Wie geschrieben ich kann leider nicht wirklich programmieren) die genauso viel kann wie die die jetzt drauf ist, anstatt die jetztige so weit zu zerlegen dass man entsprechend Kennwerte ändern kann. Hier mal ein Auszug aus dem Decompilat, versche mich auch gerade dran die Memory MAP das Prozessors in IDA einzugeben, vielleicht wirds dann verständlicher, das hier ist eine Funktion:
    int __fastcall sub_800714C(int result, _DWORD *a2, unsigned int a3)
    {
    char v3; // t1
    bool v4; // cf
    unsigned int i; // r2
    int v6; // r3
    int v7; // r4
    int v8; // r5
    int v9; // r12
    bool v10; // nf
    int v11; // r3
    int v12; // r12
    int v13; // t1
    __int16 v14; // t1
    int v15; // r3
    int v16; // r12
    _DWORD *v17; // r0

    if ( a3 )
    {
    if ( (_DWORD)a2 << 30 )
    {
    while ( 1 )
    {
    --a3;
    v3 = *(_BYTE *)a2;
    a2 = (_DWORD *)((char *)a2 + 1);
    *(_BYTE *)result++ = v3;
    if ( !a3 )
    break;
    if ( !((_DWORD)a2 << 30) )
    goto LABEL_5;
    }
    }
    else
    {
    LABEL_5:
    if ( result << 30 )
    {
    v4 = a3 >= 8;
    for ( i = a3 - 8; v4; result = (int)(v17 + 1) )
    {
    v15 = *a2;
    v16 = a2[1];
    a2 += 2;
    v4 = i >= 8;
    i -= 8;
    *(_DWORD *)result = v15;
    v17 = (_DWORD *)(result + 4);
    *v17 = v16;
    }
    v10 = ((i << 29) & 0x80000000) != 0;
    }
    else
    {
    v4 = a3 >= 0x10;
    for ( i = a3 - 16; v4; result += 16 )
    {
    v6 = *a2;
    v7 = a2[1];
    v8 = a2[2];
    v9 = a2[3];
    a2 += 4;
    v4 = i >= 0x10;
    i -= 16;
    *(_DWORD *)result = v6;
    *(_DWORD *)(result + 4) = v7;
    *(_DWORD *)(result + = v8;
    *(_DWORD *)(result + 12) = v9;
    }
    v10 = ((i << 29) & 0x80000000) != 0;
    if ( __CFSHL__(i, 29) )
    {
    v11 = *a2;
    v12 = a2[1];
    a2 += 2;
    *(_DWORD *)result = v11;
    *(_DWORD *)(result + 4) = v12;
    result += 8;
    }
    }
    if ( v10 )
    {
    v13 = *a2;
    ++a2;
    *(_DWORD *)result = v13;
    result += 4;
    }
    if ( __CFSHL__(i, 31) )
    {
    v14 = *(_WORD *)a2;
    a2 = (_DWORD *)((char *)a2 + 2);
    *(_WORD *)result = v14;
    result += 2;
    }
    if ( ((i << 31) & 0x80000000) != 0 )
    *(_BYTE *)result = *(_BYTE *)a2;
    }
    }
    return result;
    }

    Ein Depp wie ich versteht natürlich noch nicht mal die Befehle in sich, da brauche ich leider noch nicht mal versuchen, das ganze Programm zu verstehen...

Ähnliche Themen

  1. Akku: Zehn Verletzte bei E-Scooter-Brand im Wohnhaus
    Von Roboternetz-News im Forum Neuigkeiten / Technik-News / Nachrichten / Aktuelles
    Antworten: 1
    Letzter Beitrag: 26.05.2020, 13:52
  2. Motor für Elektro-Scooter
    Von AlphaRay im Forum Motoren
    Antworten: 5
    Letzter Beitrag: 04.04.2011, 12:35
  3. Kaufbeispiele für BLDCs mit Sensoren
    Von superjany im Forum Motoren
    Antworten: 1
    Letzter Beitrag: 08.05.2010, 18:59
  4. Asuro Scooter
    Von Desti1989 im Forum Asuro
    Antworten: 7
    Letzter Beitrag: 09.11.2009, 16:08
  5. Antworten: 3
    Letzter Beitrag: 30.06.2005, 22:24

Berechtigungen

  • Neue Themen erstellen: Nein
  • Themen beantworten: Nein
  • Anhänge hochladen: Nein
  • Beiträge bearbeiten: Nein
  •  

LiTime Speicher und Akkus