UDS-Negative-Response-Code-Decoder
Negative UDS-Antwort in einer Sekunde dekodieren: 7F 27 35 oder einen Code einfügen, ISO-14229-Namen, abgelehnten Service und Bedeutung bekommen. Mit NRC-Tabelle.
Aktualisiert Diese Seite als Markdown
Kurz gesagt
Dieses Tool dekodiert UDS Negative Response Codes (NRCs) nach ISO 14229-1 Anhang A. Füge eine komplette negative Antwort wie 7F 27 35 oder einen bloßen Code wie 33 ein, und es zeigt den ISO-Namen, den abgelehnten Service und was der Code beim Testen eines Steuergeräts üblicherweise bedeutet. Die Tabelle unter dem Tool ist durchsuchbar und enthält auch die Codes des Authentication-Service (0x29).
Komplette Antwort (7F 27 35) oder nur den Code (35) einfügen. Hex, Leerzeichen optional.
Dekodiert
0x35 invalidKey
Abgelehnter Service: 0x27 SecurityAccess
Der gesendete SecurityAccess-Key passte nicht zum Seed. Zähle diese Antworten: Eine schwache Implementierung begrenzt die Versuche nicht.
Alle Negative Response Codes
| Code | ISO-Name | Was es am Prüfstand bedeutet |
|---|---|---|
| 0x10 | generalReject | Das Steuergerät hat den Request ohne genaueren Grund abgelehnt. Oft ein Sammelcode in der Server-Implementierung. |
| 0x11 | serviceNotSupported | Der Service ist diesem Steuergerät in keiner Session bekannt. Nützlich für die Enumeration: Der Service existiert hier nicht. |
| 0x12 | subFunctionNotSupported | Der Service existiert, diese Sub-Funktion aber in keiner Session. |
| 0x13 | incorrectMessageLengthOrInvalidFormat | Falsche Byteanzahl für diesen Request. Auch das, was ein gut implementiertes Steuergerät auf die meisten gefuzzten Nachrichten antworten sollte. |
| 0x14 | responseTooLong | Die Antwort würde die Grenze der Transportschicht überschreiten. |
| 0x21 | busyRepeatRequest | Das Steuergerät ist beschäftigt; der Tester darf den Request später wiederholen. |
| 0x22 | conditionsNotCorrect | Eine Vorbedingung ist nicht erfüllt, etwa Fahrzeuggeschwindigkeit, laufender Motor oder eine nötige Session oder ein Zustand. |
| 0x24 | requestSequenceError | Der Request kam in falscher Reihenfolge, etwa ein SecurityAccess-Key ohne vorherigen Seed-Request oder TransferData ohne RequestDownload. |
| 0x25 | noResponseFromSubnetComponent | Ein Gateway hat den Request weitergeleitet, das Ziel-Steuergerät hat aber nicht geantwortet. |
| 0x26 | failurePreventsExecutionOfRequestedAction | Ein Fehler im Steuergerät (zum Beispiel ein gespeicherter Fehler) verhindert die Aktion. |
| 0x31 | requestOutOfRange | Ein Parameter liegt außerhalb des gültigen Bereichs: unbekannte DID oder RID, ungültige Speicheradresse oder nicht unterstützter Wert. Auch die Antwort, wenn eine DID existiert, aber nicht in dieser Session, daher nützlich fürs Mapping. |
| 0x33 | securityAccessDenied | Das Steuergerät ist gesperrt. Service oder Daten brauchen vorher einen erfolgreichen SecurityAccess (0x27). Für den Tester markiert das die geschützte Oberfläche. |
| 0x34 | authenticationRequired | Der Service braucht vorher eine erfolgreiche Authentication (0x29). |
| 0x35 | invalidKey | Der gesendete SecurityAccess-Key passte nicht zum Seed. Zähle diese Antworten: Eine schwache Implementierung begrenzt die Versuche nicht. |
| 0x36 | exceedNumberOfAttempts | Zu viele falsche Keys; das Steuergerät hat SecurityAccess vorübergehend gesperrt. Das ist das korrekte Verhalten. |
| 0x37 | requiredTimeDelayNotExpired | Die Verzögerung nach einem Fehlversuch oder nach dem Einschalten ist noch nicht abgelaufen. |
| 0x38 | secureDataTransmissionRequired | Der Request muss über SecuredDataTransmission (0x84) gesendet werden. |
| 0x39 | secureDataTransmissionNotAllowed | Dieser Request darf nicht über SecuredDataTransmission gesendet werden. |
| 0x3A | secureDataVerificationFailed | Die Prüfung einer gesicherten Datenübertragung ist fehlgeschlagen. |
| 0x50 | certificateVerificationFailedInvalidTimePeriod | Authentication (0x29): Zertifikat zu diesem Zeitpunkt nicht gültig. |
| 0x51 | certificateVerificationFailedInvalidSignature | Authentication (0x29): Zertifikatssignatur ungültig. |
| 0x52 | certificateVerificationFailedInvalidChainOfTrust | Authentication (0x29): Zertifikatskette nicht vertrauenswürdig. |
| 0x53 | certificateVerificationFailedInvalidType | Authentication (0x29): falscher Zertifikatstyp. |
| 0x54 | certificateVerificationFailedInvalidFormat | Authentication (0x29): Zertifikatsformat ungültig. |
| 0x55 | certificateVerificationFailedInvalidContent | Authentication (0x29): Zertifikatsinhalt ungültig. |
| 0x56 | certificateVerificationFailedInvalidScope | Authentication (0x29): Zertifikatsumfang deckt das nicht ab. |
| 0x57 | certificateVerificationFailedInvalidCertificate | Authentication (0x29): Zertifikat widerrufen oder anderweitig ungültig. |
| 0x58 | ownershipVerificationFailed | Authentication (0x29): Besitznachweis fehlgeschlagen. |
| 0x59 | challengeCalculationFailed | Authentication (0x29): Das Steuergerät konnte die Challenge nicht berechnen. |
| 0x5A | settingAccessRightsFailed | Authentication (0x29): Zugriffsrechte konnten nicht gesetzt werden. |
| 0x5B | sessionKeyCreationOrDerivationFailed | Authentication (0x29): Ableitung des Sitzungsschlüssels fehlgeschlagen. |
| 0x5C | configurationDataUsageFailed | Authentication (0x29): Konfigurationsdaten konnten nicht genutzt werden. |
| 0x5D | deAuthenticationFailed | Authentication (0x29): De-Authentifizierung fehlgeschlagen. |
| 0x70 | uploadDownloadNotAccepted | RequestDownload oder RequestUpload abgelehnt: falsche Adresse, Länge, Format oder Zustand. |
| 0x71 | transferDataSuspended | Die Datenübertragung wurde vom Steuergerät ausgesetzt. |
| 0x72 | generalProgrammingFailure | Das Schreiben in den Speicher ist beim Programmieren fehlgeschlagen. |
| 0x73 | wrongBlockSequenceCounter | TransferData-Blockzähler außer der Reihe. |
| 0x78 | requestCorrectlyReceived-ResponsePending | Kein Fehler: Das Steuergerät braucht mehr Zeit und sendet die endgültige Antwort später. Der Tester verlängert sein P2*-Timeout. Achte auf Steuergeräte, die nie nachliefern. |
| 0x7E | subFunctionNotSupportedInActiveSession | Die Sub-Funktion existiert, aber nicht in der aktuellen Session. Session wechseln (0x10) und erneut versuchen. |
| 0x7F | serviceNotSupportedInActiveSession | Der Service existiert, aber nicht in der aktuellen Session. Klassischer Marker für Services, die in der Extended- oder Programming-Session liegen. |
| 0x81 | rpmTooHigh | Motordrehzahl zu hoch für diese Aktion. |
| 0x82 | rpmTooLow | Motordrehzahl zu niedrig für diese Aktion. |
| 0x83 | engineIsRunning | Nicht erlaubt, während der Motor läuft. |
| 0x84 | engineIsNotRunning | Nur erlaubt, während der Motor läuft. |
| 0x85 | engineRunTimeTooLow | Der Motor lief noch nicht lange genug. |
| 0x86 | temperatureTooHigh | Temperatur zu hoch für diese Aktion. |
| 0x87 | temperatureTooLow | Temperatur zu niedrig für diese Aktion. |
| 0x88 | vehicleSpeedTooHigh | Fahrzeuggeschwindigkeit zu hoch für diese Aktion. Der übliche Schutz bei Aktuatortests. |
| 0x89 | vehicleSpeedTooLow | Fahrzeuggeschwindigkeit zu niedrig für diese Aktion. |
| 0x8A | throttle/PedalTooHigh | Drossel- oder Pedalstellung zu hoch. |
| 0x8B | throttle/PedalTooLow | Drossel- oder Pedalstellung zu niedrig. |
| 0x8C | transmissionRangeNotInNeutral | Getriebe muss in Neutralstellung sein. |
| 0x8D | transmissionRangeNotInGear | Getriebe muss einen Gang eingelegt haben. |
| 0x8F | brakeSwitch(es)NotClosed | Bremspedal muss gedrückt sein. |
| 0x90 | shifterLeverNotInPark | Wählhebel muss in P stehen. |
| 0x91 | torqueConverterClutchLocked | Wandlerüberbrückungskupplung ist geschlossen. |
| 0x92 | voltageTooHigh | Versorgungsspannung zu hoch, oft beim Programmieren. |
| 0x93 | voltageTooLow | Versorgungsspannung zu niedrig, oft beim Programmieren. |
| 0x94 | resourceTemporarilyNotAvailable | Eine benötigte Ressource ist belegt; später erneut versuchen. |
So funktioniert es
Eine negative UDS-Antwort hat immer drei Bytes: 7F, den Service Identifier (SID) des abgelehnten Requests und den Negative Response Code. Das Tool nimmt die komplette Antwort oder nur den Code, schlägt ihn in der Tabelle der ISO 14229-1 nach und ergänzt, was der Code beim Testen eines Steuergeräts üblicherweise aussagt, geschrieben aus Sicht des Testers statt aus Sicht des Steuergeräts.
Die Tabelle deckt alle Codes aus ISO 14229-1:2020 Anhang A ab, inklusive des Bereichs 0x50 bis 0x5D für den Authentication-Service (0x29) und der Fahrzeugzustands-Codes 0x81 bis 0x94. Codes außerhalb der Tabelle sind herstellerspezifisch oder reserviert.
So liest du das Ergebnis
Drei Codes tragen bei der Enumeration die meiste Information. 0x11 serviceNotSupported heißt, der Service existiert auf diesem Steuergerät gar nicht. 0x7F serviceNotSupportedInActiveSession heißt, er existiert, braucht aber eine andere Session, typischerweise Extended (0x03) oder Programming (0x02). 0x33 securityAccessDenied markiert die Oberfläche, die SecurityAccess schützt. Ein Steuergerät, das bei Sub-Funktionen 0x12 oder 0x7E antwortet und bei unbekannten Identifiern 0x31, verrät dir seine Landkarte eine Antwort nach der anderen.
Beim SecurityAccess-Test zählst du die 0x35-invalidKey-Antworten. Nach der konfigurierten Zahl an Versuchen muss das Steuergerät 0x36 exceedNumberOfAttempts und danach 0x37 requiredTimeDelayNotExpired antworten. Ein Steuergerät, das weiter 0x35 antwortet, hat keinen Versuchszähler, und das ist ein Finding.
Grenzen
Das Tool kennt die Standardcodes, nicht das, was dein Steuergerät daraus macht. Manche Implementierungen antworten auf alles Unverstandene mit 0x10 generalReject, was die Struktur versteckt. Manche beschriften Bedingungen falsch. Die Enumeration von AutoST wertet die Antworten statistisch über Sessions hinweg aus, und so kartiert sie Services und Identifier auch an solchen Steuergeräten.
FAQ
Häufig gestellte Fragen
Wie ist eine negative UDS-Antwort aufgebaut?
Drei Bytes: 0x7F, der Service Identifier des abgelehnten Requests und der Negative Response Code. Ein Tester, der 27 03 sendet (SecurityAccess, requestSeed Level 3) und 7F 27 7E bekommt, lernt, dass Sub-Funktion 03 existiert, aber nicht in der aktiven Session.
Ist 0x78 ein Fehler?
Nein. requestCorrectlyReceived-ResponsePending sagt dem Tester, dass das Steuergerät mehr Zeit braucht; der Tester verlängert sein P2*-Timeout und wartet auf die endgültige Antwort. Steuergeräte, die 0x78 senden und dann nie antworten, sind ein Finding, weil der Tester hängt.
Warum antworten manche Steuergeräte mit 0x31 statt 0x7F auf unbekannte DIDs?
requestOutOfRange (0x31) ist die korrekte Antwort auf eine DID, die das Steuergerät nicht unterstützt, während serviceNotSupportedInActiveSession (0x7F) heißt, dass der ganze Service in der aktuellen Session nicht verfügbar ist. Das wird oft verwechselt und erschwert die Enumeration; AutoST interpretiert beides.
Quellen
Passende Seiten
- GlossarNRC (Negative Response Code)Eine negative UDS-Antwort besteht aus 7F, dem abgelehnten SID und einem Negative Response Code (NRC) wie 0x11, 0x33 oder 0x7F. Was die Codes aus ISO 14229-1 bedeuten.
- 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.
- Kostenlose ToolsUDS-Nachrichten-DecoderUDS-Bytes aus einem Trace einfügen und sehen, was sie bedeuten: Service, Sub-Funktion, Session, DIDs, Routine Identifier, SecurityAccess-Level oder NRC, nach ISO 14229-1.
- 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.
- PlattformHält dein Seed/Key wirklich?AutoST probt UDS SecurityAccess: Seed-Zufälligkeit, schwache Seed-zu-Key-Algorithmen, Default-Keys, Lockout und Sequenz. Begrenzt und nicht-destruktiv.
