Hallo zusammen! Ich versuche schon seit geraumer Zeit, einen mir unbekannten Algorithmus zur Berechnung einer Checksumme über einen 512 byte großen EEPROM Bereich zu finden. Es geht dabei um RFID Chips von Philips/NXP, wie sie häufig in Funkschlüsseln verwendet werden. Als Beispiel habe ich hier einen PCF7961. Ich habe die Möglichkeit, beliebige Daten auf das EEPROM zu schreiben und die zugehörige 24 byte lange Checksumme vom Chip auszulesen. Eine Doku zum benutzten Algorithmus konnte ich leider nirgends finden. Im Anhang sind einige EEPROM dumps, in denen ich hauptsächlich den Wert eines Bytes verändert habe. Die resultierende Checksumme sieht man am Ende des Dateinamens jeder Datei. Ist hier jemand dabei, der mir helfen kann den zugrunde liegenden Algorithmus zu finden? Auch die Vorgehensweise für so eine Aufgabe wäre für mich (und sicher auch einige andere hier) sehr interessant. Mir selbst fehlt leider das nötige mathematische Verständnis, um solch eine Aufgabe anzugehen. Vielen Dank schonmal für zielführende Hilfestellungen. Gruß, Philipp
Eigentlich so ziemlich unmöglich. Du musst an den Algorithmus herankommen. Den kannst du dann im Disassembler begutachten, wobei er auch direkt in Hardware "gegossen" sein kann. Google Suche ergibt https://hackaday.com/tag/mifareclassic/ :D
Es gibt verschiedene Tools, die helfen können den Algorithmus einer unbekannte CRC zu finden, z.B. CRC RevEng: https://github.com/berney/reveng
> Ich versuche [..], einen mir unbekannten Algorithmus zur Berechnung > einer Checksumme über einen 512 byte großen EEPROM Bereich zu finden. Wozu? Du hast doch ein Orakel: > Ich habe die Möglichkeit, beliebige Daten auf das EEPROM zu schreiben > und die zugehörige 24 byte lange Checksumme vom Chip auszulesen. Blob generieren, ans Orakel geben, Prüfsumme zurücklesen, adäquat ablegen, feddisch. HTH
Wenn du hinreichend viele Codes mit korrekter Prüfsumme hast, liefert evtl. eine Statistik-Software über den Versuch einer Regression einen Hinweis ...
Warum postet man sowas in Fahrzeugelektronik und nicht in Programmierung? Was hat Reverse Engineering mit Elektronik oder KFZ zu tun?
Alexander schrieb: > Warum postet man sowas in Fahrzeugelektronik Weil es der Funkschlüssel für ein Fahrzeug ist. Wäre es der Funkschlüssel für's Haus --> Haus & Smart Home Und wäre es der Funkschlüssel der Berufsschule --> Ausbildund & Beruf
Dieter schrieb: > Es gibt verschiedene Tools, die helfen können den Algorithmus > einer > unbekannte CRC zu finden, z.B. CRC RevEng: > > https://github.com/berney/reveng Habe mit diesem Tool schon ein paar CRC-24 Algorithmen durchprobiert. Leider ohne Erfolg. Kann aber nicht ausschließen dass ich das Tool falsch bedient habe. Vielleicht hat jemand von euch mehr Erfahrung damit und kann es mal ausprobieren? g457 schrieb: > Blob generieren, ans Orakel geben, Prüfsumme zurücklesen, adäquat > ablegen, feddisch. Dann bräuchte ich ja immer den Funkchip. Mein Ziel ist es aber, die Prüfsumme auch offline berechnen zu können. Nach dem Flashen des Chips lese ich dann die Prüfsumme aus und kann so prüfen, ob die Daten richtig geschrieben wurden. Frank E. schrieb: > Wenn du hinreichend viele Codes mit korrekter Prüfsumme hast, liefert > evtl. eine Statistik-Software über den Versuch einer Regression einen > Hinweis ... Könntest du mir dabei eine Hilfestellung geben? Ich habe keine Ahnung wo ich da ansetzen kann. Im Internet hab ich auch keinen Hinweis darauf gefunden. Alexander schrieb: > Warum postet man sowas in Fahrzeugelektronik und nicht in > Programmierung? Was hat Reverse Engineering mit Elektronik oder KFZ zu > tun? Genau, es geht um einen Funkschlüssel für ein Auto. Mit PC-Programmierung hat das also nichts zu tun.
Philipp schrieb: > > Habe mit diesem Tool schon ein paar CRC-24 Algorithmen durchprobiert. > Leider ohne Erfolg. Kann aber nicht ausschließen dass ich das Tool > falsch bedient habe. Vielleicht hat jemand von euch mehr Erfahrung damit > und kann es mal ausprobieren? CRC RevEng hat eine Option um alle möglichen Polynome einer bestimmten CRC Länge durchzuprobieren. Es gibt eine umfangreiche Doku für das Tool, die erklärt das recht gut. Ich habe das hier mal auf die Schnelle mit ein paar von den obigen Dateinen ausprobiert, bei 24-Bit dauert es ja nicht lange. Allerdings wurde kein passendes CRC Polynom gefunden. Falls die Dateien keine Fehler enthalten und die angegebene CRC stimmt gibt es mehrere Möglichkeiten warum kein CRC-24 Polynom gefunden wurde, z.B. die beiden folgenden: 1.) Die CRC wird nicht über die gesamten 512 Byte der Datei berechnet. Mich wundern u.a. die vier Byte "MIKR" am Anfang jeder Datei, das ist das Default Passwort einiger NFC Tags (u.a. HITAG). Die Länge muss passen sonst funktioniert es nicht. Wenn also z.B. die vier Byte am Anfang nicht für die CRC Berechnung verwendet werden dann dürfen diese auch nicht an CRC RevEng übergeben werden. Ähnlich sieht es mit den Bytes am Ende der Dateien aus. 2.) Es ist keine CRC sondern irgendetwas anderes. Es gibt unzählige Möglichkeiten eine "Prüsumme" zu berechnen nicht nur einfache Summen oder CRCs. Es könnten z.B. auch ein paar Byte eines Hash sein (auch ein Secure-Hash mit geheimen Schlüssel ist denkbar). Woher weisst Du dass es eine CRC ist? Kannst Du das Datenblatt für den Chip hier posten bzw. eine Link dazu angeben? Also nicht für den PCF7961 sondern konkret für den EEPROM den Du verwendest.
Philipp schrieb: > Genau, es geht um einen Funkschlüssel für ein Auto. Mit > PC-Programmierung hat das also nichts zu tun. Ach eure CRC RevEng Tools laufen auf dem Bordcomputer vom Auto? Cool...
Dieter schrieb: > Philipp schrieb: >> >> Habe mit diesem Tool schon ein paar CRC-24 Algorithmen durchprobiert. >> Leider ohne Erfolg. Kann aber nicht ausschließen dass ich das Tool >> falsch bedient habe. Vielleicht hat jemand von euch mehr Erfahrung damit >> und kann es mal ausprobieren? > > CRC RevEng hat eine Option um alle möglichen Polynome einer bestimmten > CRC Länge durchzuprobieren. Es gibt eine umfangreiche Doku für das Tool, > die erklärt das recht gut. Ich habe das hier mal auf die Schnelle mit > ein paar von den obigen Dateinen ausprobiert, bei 24-Bit dauert es ja > nicht lange. Allerdings wurde kein passendes CRC Polynom gefunden. > > Falls die Dateien keine Fehler enthalten und die angegebene CRC stimmt > gibt es mehrere Möglichkeiten warum kein CRC-24 Polynom gefunden wurde, > z.B. die beiden folgenden: Erstmal vielen Dank für deine Antwort! Find ich wirklich klasse dass du es selbst mal mit reveng ausprobiert hast! > 1.) Die CRC wird nicht über die gesamten 512 Byte der Datei berechnet. > Mich wundern u.a. die vier Byte "MIKR" am Anfang jeder Datei, das ist > das Default Passwort einiger NFC Tags (u.a. HITAG). Die Länge muss > passen sonst funktioniert es nicht. Wenn also z.B. die vier Byte am > Anfang nicht für die CRC Berechnung verwendet werden dann dürfen diese > auch nicht an CRC RevEng übergeben werden. Ähnlich sieht es mit den > Bytes am Ende der Dateien aus. Die ersten 4 bytes sind eigentlich die ID des chips. Da ich meine Versuche immer mit dem selben Schlüsseln gemacht habe, ist diese immer gleich. Seltsam ist allerdings, dass diese "MIKR" lautet. Das ist eigentlich - wie von dir bereits festgestellt - das standard passwort für alle PCF79xx chips. Weiterhin gibt es am Ende noch einen 8 byte langen "Spezialbereich". In diesem stehen Konfigurationen für den Chip, die teilweise nur OTP bei der Produktion geschrieben werden, teilweise auch nur mit speziellen befehlen programmiert werden können. Könntest du es vielleicht nochmal die CRC24 berechnen und die ersten 4 und letzten 8 bytes ausblenden? > 2.) Es ist keine CRC sondern irgendetwas anderes. Es gibt unzählige > Möglichkeiten eine "Prüsumme" zu berechnen nicht nur einfache Summen > oder CRCs. Es könnten z.B. auch ein paar Byte eines Hash sein (auch > ein Secure-Hash mit geheimen Schlüssel ist denkbar). > > Woher weisst Du dass es eine CRC ist? Kannst Du das Datenblatt für > den Chip hier posten bzw. eine Link dazu angeben? Also nicht für den > PCF7961 sondern konkret für den EEPROM den Du verwendest. Ich weiß überhaupt nicht dass es eine CRC ist. Im Datenblatt wird immer nur von einer "Signature" gesprochen. CRC ist aber das einzige das ich kenne ;-) Bei diesem Speicherbereich handelt es sich um das interne EEPROM des PCF7961 Chips. Es gibt also kein extra Datenblatt für das EEPROM. Leider schweigt sich das PCF7961 Manual komplett über diese Signatur aus. Einzig und alleine in der Doku der Programmierschnittstelle wird sie erwähnt. Dort werden aber auch nur die Befehle zum Auslesen beschrieben. Es gibt keine Details zur Signatur selber.
Alexander schrieb: > Philipp schrieb: >> Genau, es geht um einen Funkschlüssel für ein Auto. Mit >> PC-Programmierung hat das also nichts zu tun. > > Ach eure CRC RevEng Tools laufen auf dem Bordcomputer vom Auto? Cool... Natürlich nicht ;-) Aber es geht ja nicht darum, das reveng Tool nachzuprogrammieren (das wäre PC-Programmierung), sondern es wird einfach nur benutzt.
Philipp schrieb: > > Könntest du es vielleicht nochmal die CRC24 berechnen und die ersten 4 > und letzten 8 bytes ausblenden? Das ändert nichts am Ergebnis, CRC RevEng findet kein passendes Polynom. Ich habe übrigens zur Sicherheit dass ich keinen Fehler gemacht habe auch mal einen bekannten CRC-24 Algorithmus ausprobiert, in diesem Fall gibt es ein Ergebnis. > Bei diesem Speicherbereich handelt es sich um das interne EEPROM des > PCF7961 Chips. Es gibt also kein extra Datenblatt für das EEPROM. > Leider schweigt sich das PCF7961 Manual komplett über diese Signatur > aus. Einzig und alleine in der Doku der Programmierschnittstelle wird > sie erwähnt. Dort werden aber auch nur die Befehle zum Auslesen > beschrieben. Es gibt keine Details zur Signatur selber. "Signatur" klingt erst mal nicht nach CRC. Gibt es denn einen Hinweis für was diese Signatur verwendet werden kann?
Dieter schrieb: > Philipp schrieb: >> >> Könntest du es vielleicht nochmal die CRC24 berechnen und die ersten 4 >> und letzten 8 bytes ausblenden? > > Das ändert nichts am Ergebnis, CRC RevEng findet kein passendes > Polynom. Ich habe übrigens zur Sicherheit dass ich keinen Fehler > gemacht habe auch mal einen bekannten CRC-24 Algorithmus ausprobiert, > in diesem Fall gibt es ein Ergebnis. > >> Bei diesem Speicherbereich handelt es sich um das interne EEPROM des >> PCF7961 Chips. Es gibt also kein extra Datenblatt für das EEPROM. >> Leider schweigt sich das PCF7961 Manual komplett über diese Signatur >> aus. Einzig und alleine in der Doku der Programmierschnittstelle wird >> sie erwähnt. Dort werden aber auch nur die Befehle zum Auslesen >> beschrieben. Es gibt keine Details zur Signatur selber. > > "Signatur" klingt erst mal nicht nach CRC. Gibt es denn einen > Hinweis für was diese Signatur verwendet werden kann? Ok, vielen Dank! Ich habe gerade nochmal einen Test gemacht: Nach Verändern der letzten beiden Bytes hat sich auch die Checksumme geändert. Das lässt vermuten dass zumindest der Block am Ende auch in die Signaturberechnung einfließt. Ich denke die Signatur wird nur dazu verwendet, um den Speicherinhalt nach dem Programmieren zu prüfen.
Gerade habe ich doch ein Muster gefunden: Verändert wurde nur das letzte EEPROM byte. Byte 512 Signatur AE (= 0x75 bit-invertiert) --> FD4D1F 6E (= 0x76 bit-invertiert) --> FD4E1F EE (= 0x77 bit-invertiert) --> FD4F1F Kann man daraus irgendwas schließen?
Philipp schrieb: > > Kann man daraus irgendwas schließen? Das schaut nicht nach einer CRC aus, da würde sich mehr ändern. Kommst Du an die Firmware des Chip? Dann könnte man schauen wie die Signatur berechnet wird (falls es nicht durch Hardware passiert).
Dieter schrieb: > Philipp schrieb: >> >> Kann man daraus irgendwas schließen? > > Das schaut nicht nach einer CRC aus, da würde sich mehr ändern. > > Kommst Du an die Firmware des Chip? Dann könnte man schauen wie > die Signatur berechnet wird (falls es nicht durch Hardware passiert). Ich komme leide nur an den "User"-Flash. Die Signatur wird aber im ROM berechnet, da habe ich leider keinen Zugriff.
Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.