NRC (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.
Aktualisiert Diese Seite als Markdown
Kurz gesagt
Ein Negative Response Code (NRC) ist das dritte Byte einer negativen UDS-Antwort, 7F <SID> <NRC>, und sagt dem Tester, warum das Steuergerät einen Request abgelehnt hat: 0x11 serviceNotSupported, 0x12 subFunctionNotSupported, 0x13 incorrectMessageLengthOrInvalidFormat, 0x22 conditionsNotCorrect, 0x31 requestOutOfRange, 0x33 securityAccessDenied, 0x35 invalidKey, 0x7E und 0x7F für die falsche Session, 0x78 für Response Pending. ISO 14229-1 Anhang A listet sie alle. Für einen Tester sind NRCs die Landkarte des Steuergeräts.
Was ist ein NRC?
Wenn ein Steuergerät einen UDS-Request nicht ausführen kann oder will, antwortet es negativ: 7F, der Service Identifier des abgelehnten Requests und ein Negative Response Code. 7F 27 35 sagt, SecurityAccess wurde mit einem ungültigen Key aufgerufen, 7F 22 31 sagt, ReadDataByIdentifier wurde nach einer DID außerhalb des Bereichs gefragt, 7F 10 12 sagt, die gewünschte Session-Sub-Funktion wird nicht unterstützt.
Die Codes, die am Prüfstand am meisten zählen, sind 0x10 generalReject, 0x11 serviceNotSupported, 0x12 subFunctionNotSupported, 0x13 incorrectMessageLengthOrInvalidFormat, 0x14 responseTooLong, 0x21 busyRepeatRequest, 0x22 conditionsNotCorrect, 0x24 requestSequenceError, 0x31 requestOutOfRange, 0x33 securityAccessDenied, 0x34 authenticationRequired, 0x35 invalidKey, 0x36 exceedNumberOfAttempts, 0x37 requiredTimeDelayNotExpired, 0x70 uploadDownloadNotAccepted, 0x72 generalProgrammingFailure, 0x73 wrongBlockSequenceCounter, 0x78 requestCorrectlyReceived-ResponsePending, 0x7E subFunctionNotSupportedInActiveSession und 0x7F serviceNotSupportedInActiveSession.
Wo ist es definiert?
ISO 14229-1:2020 Anhang A listet jeden Negative Response Code mit Name und Bedeutung; Kapitel 7.5 legt fest, wann ein Server negativ antwortet und in welcher Reihenfolge er einen Request prüft (Service, Länge, Sub-Funktion, Session, Security, Bedingungen). Die Codes 0x81 bis 0x8F und 0x92 bis 0x94 beschreiben Fahrzeugzustände wie Drehzahl-, Temperatur- und Spannungsbereiche. 0x50 bis 0x5D kamen für den Authentication-Service (0x29) hinzu. Jedes Service-Kapitel listet die Teilmenge der NRCs, die der Service zurückgeben darf, und das suppressPosRspMsgIndicationBit unterdrückt nie eine negative Antwort.
Was es in der Praxis bedeutet
NRCs sind das reichhaltigste Signal, das ein Steuergerät kostenlos preisgibt. Ein Sweep über alle Service Identifier in einer Session ergibt ein Muster: 0x11 für Services, die fehlen, 0x7F für Services, die in einer anderen Session warten, 0x33 für die Oberfläche hinter SecurityAccess, 0x13 für Services, die existieren und mit der richtigen Länge laufen würden. Dasselbe gilt für Sub-Funktionen (0x12 gegenüber 0x7E) und für Identifier (0x31). Diese Codes sorgfältig zu lesen ist Enumeration.
Beim SecurityAccess-Test zeigt die Folge 0x35, 0x35, 0x36, dann 0x37 einen funktionierenden Versuchszähler mit Verzögerung. Wir sehen regelmäßig Steuergeräte, die endlos 0x35 antworten, also unbegrenzt Key-Versuche zulassen, und Steuergeräte, die auf alles Unverstandene 0x10 generalReject schicken, was die Struktur vor dem flüchtigen Blick versteckt, nicht aber vor dem statistischen. Ein weiteres wiederkehrendes Finding: 0x78 gefolgt von Stille, was jeden Tester hängen lässt, der sich an P2* hält.
Wie AutoST es testet
Die Enumerations-Engine von AutoST klassifiziert jede Antwort in jeder Session anhand ihres NRC: supported, security access denied, not supported in this session, conditions not correct oder not supported. Die SecurityAccess-Engine zählt 0x35, 0x36 und 0x37, um den Lockout zu beurteilen, und die Fuzzing-Engine wertet ausbleibende Antworten und Transportfehler nach einem Payload als Absturz-Indikator. Der kostenlose NRC-Decoder auf dieser Seite erklärt jeden einzelnen Code.
Häufige Missverständnisse
Eine negative Antwort ist kein fehlgeschlagener Test. Das Steuergerät tut seine Arbeit, und der richtige NRC in der richtigen Situation ist genau das, wie eine sichere Implementierung aussieht. Das Finding ist der falsche Code: eine positive Antwort, wo 0x33 hingehört hätte, oder 0x35, wo 0x36 fällig war.
FAQ
Häufig gestellte Fragen
Was ist der Unterschied zwischen 0x11 und 0x7F?
serviceNotSupported (0x11) heißt, der Service existiert auf diesem Steuergerät in keiner Session. serviceNotSupportedInActiveSession (0x7F) heißt, er existiert, aber nicht in der aktuellen, meist weil er die Extended oder Programming Session braucht. Dasselbe Paar gibt es für Sub-Funktionen: 0x12 und 0x7E.
Ist 0x78 ein Fehler?
Nein. requestCorrectlyReceived-ResponsePending sagt dem Tester, dass das Steuergerät mehr Zeit braucht und er bis P2* auf die endgültige Antwort warten soll. Ein Steuergerät, das 0x78 schickt und dann nichts mehr, ist ein Finding, weil der Tester hängt. Mehrere 0x78 hintereinander sind erlaubt.
Warum bekomme ich gar keine Antwort statt eines NRC?
Bei funktional adressierten Requests schreibt ISO 14229-1 dem Steuergerät vor, statt 0x11, 0x12, 0x31, 0x7E oder 0x7F zu schweigen, damit ein Broadcast des Testers keine Flut negativer Antworten auslöst. Bei physisch adressierten Requests heißt Schweigen meist: das Steuergerät ist abgestürzt, die ISO-TP-Adresse ist falsch oder der Request ist nie angekommen.
Quellen
Passende Seiten
- GlossarSID (Service Identifier)Der SID ist das erste Byte jeder UDS-Nachricht und benennt den Service, von 0x10 DiagnosticSessionControl bis 0x3E TesterPresent. Bereiche, Antwortregel, SID-Sweep.
- 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.
- Kostenlose ToolsUDS-Negative-Response-Code-DecoderNegative 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.
- 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.
