RoutineControl (0x31)
UDS RoutineControl (0x31) startet, stoppt und liest Routinen eines Steuergeräts über den Routine Identifier (RID). Die Request- und Response-Bytes und was zu prüfen ist.
Aktualisiert Diese Seite als Markdown
Kurz gesagt
RoutineControl (0x31) führt eine Routine auf einem Steuergerät aus, benannt über einen zwei Byte langen Routine Identifier (RID). Die Sub-Funktion wählt Start (01), Stopp (02) oder requestResults (03). Der Request 31 01 FF 01 startet Routine 0xFF01, die positive Antwort 71 01 FF 01 bestätigt es. Die meisten Routinen brauchen die Extended Session und oft SecurityAccess, weil sie Speicher löschen oder Selbsttests starten. Welche Routinen es gibt und was sie verlangen, ist ein zentraler Prüfpunkt.
Was ist RoutineControl (0x31)?
RoutineControl führt eine vordefinierte Routine auf einem Steuergerät aus. Das Sub-Funktions-Byte wählt die Operation, die zwei Bytes danach sind der Routine Identifier (RID). Eine Routine kann ein Speicherlöschen, ein Selbsttest, ein Kalibrierschritt oder eine Prüfung mit Ergebnis sein.
Ein normaler Ablauf:
| Richtung | Bytes | Bedeutung |
|---|---|---|
| Request | 31 01 FF 01 | startRoutine, RID 0xFF01 |
| Positive Antwort | 71 01 FF 01 | Routine gestartet |
| Negative Antwort | 7F 31 33 | securityAccessDenied |
Weitere typische negative Antworten sind 7F 31 31 (requestOutOfRange, unbekannter RID), 7F 31 12 (subFunctionNotSupported), 7F 31 13 (incorrectMessageLengthOrInvalidFormat), 7F 31 22 (conditionsNotCorrect) und 7F 31 24 (requestSequenceError, Ergebnis angefragt, bevor die Routine lief).
Wo ist es definiert?
ISO 14229-1:2020 definiert RoutineControl (0x31) im Routine functional unit. Die Norm beschreibt die drei Sub-Funktionen, den zwei Byte langen Routine Identifier, den optionalen routineControlOptionRecord im Request und den routineStatusRecord in der Antwort. Die Routinen selbst, ihre Identifier und ihre Ein- und Ausgaberecords, definiert der OEM, meist in einer ODX- oder CDD-Datei (ISO 22901-1 für ODX).
Was es in der Praxis bedeutet
In Routinen leben die stärksten Diagnoseaktionen, deshalb zählen ihre Zugriffsregeln. Die Spezifikation legt fest, welcher RID existiert, welche Session und welches Security-Level er braucht und welche Eingabe er erwartet. Bei der Validierung wird geprüft:
- jede Routine antwortet nur in der vorgesehenen Session und auf dem vorgesehenen Security-Level;
- ein unbekannter RID gibt NRC 0x31, keine unerwartete Aktion;
- requestResults vor dem Start gibt NRC 0x24;
- ein Option-Record falscher Länge gibt NRC 0x13;
- die Routine liefert einen sinnvollen Status und lässt das Steuergerät in einem definierten Zustand.
Wir finden regelmäßig Routinen, die in der Extended Session ohne den von der Spezifikation geforderten SecurityAccess starten, was ein echtes Finding ist, wenn die Routine Speicher oder Sicherheitsfunktionen berührt.
Wie AutoST es testet
AutoST brute-forct Routinen nie. Mit einer importierten ODX-, PDX- oder CDD-Datei ruft es nur die Routinen auf, die das Steuergerät tatsächlich definiert, mit dem Request-Payload, den du pro Routine überschreiben kannst, und speichert Request und Antwort. Es hält fest, in welcher Session und auf welchem Security-Level jede Routine mit welchem negativen Antwortcode reagiert, sodass eine Routine, die unter ihrem geforderten Schutzniveau läuft, im Ergebnis auffällt.
FAQ
Häufig gestellte Fragen
Was bedeuten die drei Sub-Funktionen?
startRoutine (0x01) startet die Routine, stopRoutine (0x02) stoppt eine laufende, und requestRoutineResults (0x03) liest ihr Ergebnis. Eine Routine kann alle drei unterstützen oder nur Start, je nachdem, was sie tut.
Warum werden Routinen nicht brute-forct?
Ein Routine Identifier adressiert eine bestimmte Aktion, etwa das Löschen eines Speicherblocks oder das Starten eines Selbsttests, und braucht oft einen strukturierten Eingaberecord. Zufällige RIDs aufzurufen ist sinnlos und riskant, also kommen die Identifier aus der ODX- oder CDD-Datei.
Was steht in der Antwort?
Die positive Antwort spiegelt die Sub-Funktion und den zwei Byte langen RID, optional gefolgt von einem routineStatusRecord und Routinenergebnissen. Bei requestRoutineResults tragen die Ergebnis-Bytes das Resultat, etwa einen Pass- oder Fail-Code.
Quellen
Passende Seiten
- GlossarRID (Routine Identifier)Eine RID ist der Zwei-Byte-Identifier, mit dem RoutineControl (0x31) eine Routine im Steuergerät startet, stoppt und abfragt, von Erase Memory (FF00) bis Herstellertests.
- GlossarUDS (Unified Diagnostic Services)UDS (ISO 14229) ist das Diagnoseprotokoll der meisten Steuergeräte: Sessions, Services, DIDs, SecurityAccess. Was es definiert und warum es die erste Angriffsfläche ist.
- GlossarDiagnose-Session (DiagnosticSessionControl 0x10)UDS DiagnosticSessionControl (0x10) wechselt ein Steuergerät zwischen Default, Extended und Programming Session. Bytes, Timing-Parameter und was zu prüfen ist.
- PlattformDein ODX und CDD, zu Tests gemacht.AutoST importiert ODX-, PDX- und Vector-CDD-Dateien, um gefundene DIDs zu benennen und die richtigen Routinen (0x31) aufzurufen. Write-Probing ist optional.
- PlattformKenne jede Tür ins ECU.AutoST enumeriert ein ECU über UDS: Diagnose-Endpunkte, Sessions, alle 255 Services und lesbare DIDs, plus XCP/CCP. Riskante Services werden markiert.
- InsightsVersteckte Diagnosedienste auf einem Steuergerät findenWie undokumentierte UDS-Services, Sessions und DIDs durch Probing und Response-Codes gefunden werden, warum es sie gibt, und was ein versteckter Service bedeutet.
