Erklärungen zum 1E Nano |
Einleitung So, ich will mal versuchen die Zusammenhänge um das 1E Nano besser zu Beleuchten. Wie man wohl mitbekommen hat, handelt es sich um ein Programmierfehler bei den neueren Karten. Bei den älteren Karten ( ACS Version 1.2 bis 1.6 ) war es das bekannte 5F Nano, mit welchem man gezielt die EEPROM Bereiche beschreiben konnte. Bei dem 1E Nano (ACS Versionen 3.82 - 3.83) ist das gezielte schreiben ins EEPROM nicht möglich. Hierbei behilft man sich etwas anders. Einige Tüftler haben herausgefunden das die Daten die im Buffer der Karte stehen alle in einem Rutsch auf die Karte geschrieben werden. Weiterhin hat man festgestellt, dass die geschriebenen Daten bis zur Adresse des Masterplainkeys reichen. Dies reicht uns völlig aus um uns nun selbst eine ganz neue Karte zu Basteln. Da wir nun den Masterplainkey beschreiben können und somit in jede beliebige Providergroup wechseln können, sind uns eigentlich die anderen Plainkeys egal. Wir Wechseln einfach in eine Provider ID die auch ein Händler benutzt. Somit bekommen wir automatisch immer den aktuellsten Key. Probleme wie bei den Plainkeys, dass der Plainkey gewechselt wurde, können somit nicht mehr auftreten, da wir ja jetzt eine vollwertige Händlerkarte besitzen. Man spricht in diesem Fall auch von einer Autoupdate Karte. Ich will jetzt mal anhand einer ACS 0383 Karte den Ablauf mit dem 1E Nano etwas Verdeutlichen. Hier ist erst einmal der Komplette Speicherraum der durch das 1E Nano beschrieben wird.
Wie man unschwer Erkennen kann fängt hier der Speicherbereich nicht wie bei den alten Karten (ACS 1.2/1.4) bei den Pins an sondern erst ab dem Ländercode. Wie bekommt man nun die Richtigen Daten an den Richtigen Platz ? Bei dem 1E Nano wird ja der Komplette Bereich mit Daten Überschrieben. Also wo stehen diese Daten die das 1E Nano dort hineinschreibt ? Wie bei jeder normale Rechner mit asynchroner Schnittstelle, gibt es einen Sende.- und Empfangsbuffer. Auch auf dieser Chipkarte finden wir diese Buffer. Sie sind nicht sonderlich gross aber für unsere Zwecke passen sie in der grösse haargenau. Diese Buffer bezeichnen wir mal als Buffer 07 und Buffer 08. Den Buffer 07 können wir gezielt beschreiben. Beim Buffer 08 müssen wir einen kleinen Trick anwenden. Bei der Ausführung von unserem 1E Nano werden nacheinander erst die Daten hinter dem 1E Nano, danach die Daten im Buffer 07 und dann die Daten im Buffer 08 auf die Karte geschrieben. Jetzt müssen wir nur noch die richtigen Stellen ausfindig machen, wo welche Daten hingehören. Zuerst habe ich mir die Daten die nun neu auf die Karte sollen zurechtgelegt. Technische Daten: Provider 00 Provider ID = 05 F2 7B Providergroup = 05 F2 Plainmasterkey = 3e 3a 99 6b f2 20 11 68 Key 02 von der Group = 43 A7 7F 70 D7 3A 52 E1 vom Date: 04A1 Key 04 von der Group = 43 A7 7F 70 D7 3A 52 E1 vom Date: 04A1 CH IDs : FFF5 / FFF9 / FFF3 / FFFE / FFF0 Provider 10 Provider ID = 1B 23 22 Providergroup = 1B 23 Plainmasterkey = 54 45 4E 8D 6E E1 CC 52 Key 11 von der Group = 39 C0 DC 8B 27 B7 0B FD vom Date: 037F Key 06 von der Group = 4A 37 1B D8 6B E7 13 C8 vom Date: 037F CH IDs : 7530 / 4E2A Wie fange ich nun an ? Diese Daten öffnen C+ NL (Provider 00) und Premiere World (Provider10). Wie gehen wir nun vor ? Da wie gesagt die Daten immer in einem Rutsch geschrieben werden, müssen diese Daten alle im Buffer vorhanden sein, bevor wir den String mit dem 1E Nano Ausführen. Das bedeutet das wir die 5 Byte Signatur nicht mittendrin erst Timen können da dadurch die Inhalte im Buffer geändert werden. Was machen wir also ? Genau, wir Timen die Signatur vorher. Hier ist das File welches wir also zuerst einmal brauchen. 01 01 00 00 00 22 C3 s0 00 1C 40 02 00 00 62 03 00 00 00 1E 00 47 45 52 00 90 00 8C 00 64 00 14 00 s1 Wie unschwer zu erkennen ist, stehen vor dem 1E Nano noch 9 Bytes. Einmal das Nano 42 02 für setze Date und das Nano 62 03 für setze Ländercode. Diese 9 Bytes stehen aber nur als Platzhalter dort. Es hätten auch andere Befehle dort stehen können, mir vielen bloss keine ein, die nachher auf eine Länge von 9 Byte kommen. Warum die 9 Byte vor dem 1E Nano ???? Würden die 9 Byte vor dem 1E Nano nicht dort stehen, gäbe es nachher beim Buffer 08 Probleme. Da der Bufferinhalt im Buffer 08 sich ungünstig verschieben tut. Nach dem 1E Nano mit der Länge 00, seht ihr den Ländercode. Die 47 45 52 stehen für GER (ASCII Code). Danach folgen gleich die Bytes die nach dem Ländercode stehen. Diese sind auch unwichtig, da dieser Bereich nicht beschrieben werden kann. Also werden die Adressbereiche von 00 bis 0B in diesem String beschrieben. Bei der Ermittlung der Signatur wird auch eine Signatur gefunden. Da aber in diesem String ein Fehler vorliegt (falsche Nanos) wird nicht mit OK geantwortet (01 01 00 00 7D...) sondern mit 01 01 00 00 7E... Das kann bei einigen Timing Programm zu Problemen führen. Wenn ihr bei eurer Karte nun die richtige 5 Byte Signatur ermittelt habt, dann notiert euch diese bitte und ersetzt das s1 am ende mit den 5 Bytes der Signatur. Aber auch das s0 ersetzen mit den 3 Bytes eurer Hexseriennummer. Wenn ihr eure Karte nun mal auslesen tut, dann müsste nur noch Müll bei den Provider IDs und Dates stehen. Ist ja auch logisch, die Buffer 07 und 08 enthielten ja auch nur Müll. Provider 00 in Form bringen Um nun weiter zu machen brauchen wir erst einmal einen funktionsfähigen Provider. Da der Buffer 07 problemlos zu beschreiben ist und dieser wiederum den ganzen Bereich von Provider 00 abdeckt, fangen wir damit an. Also nächste Info, der Bufferinhalt von Buffer 07 deckt den Adressbereich von 0C bis 58 ab. Das Kommando um diesen Buffer zu füllen lautet 01 02 07 00 00 Länge Daten In unserem Fall sieht es dann so aus: 01 02 07 00 00 4B 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00--> --> 00 00 00 00 00 00 00 00 00 P0 P0 P0 00 00 00 00 00 00 DA DA 31 00 00 00 00 00 00 00 00 00 00 00 PK PK PK PK PK PK PK PK P0 steht für die Provider ID (3 Byte), DA Für das Date (2 Byte) und PK für den Plainmasterkey. Jetzt nehme ich mir die Daten, die ich mir oben zurechtgelegt habe und setze diese ein. Somit sieht der String dann so aus. 01 02 07 00 00 4B 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00--> --> 00 00 00 00 00 00 00 00 00 05 F2 7B 00 00 00 00 00 00 04 60 31 00 00 00 00 00 00 00 00 00 00 00 3e 3a 99 6b f2 20 11 68 Die Zeichen --> bedeuten nichts anderes als das der String normalerweise oben weitergeht. Da dieser aber hier nicht komplett in einer Zeile passt, habe ich ihn geteilt. Diese Zeichen sind also nachher zu entfernen. Jetzt bilde ich ein neues CRD File welches also das Kommando "Buffer 07 Füllen" und "Schreibe 1E Nano" enthält. Dieses sieht dann z.B. FÜR MEINE KARTE so aus.Ihr habt natürlich eine andere Hexseriennummer und eine andere Signatur. Also nicht dieses File so Übernehmen, sondern euer eigenes, Selbstgetimetes mit eurer Hexseriennummer. // Schreibe Buffer 07 für Provider 00 01 02 07 00 00 4B 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00--> --> 00 00 00 00 00 00 00 00 00 05 F2 7B 00 00 00 00 00 00 04 60 31 00 00 00 00 00 00 00 00 00 00 00 3e 3a 99 6b f2 20 11 68 // Schreibe ins EEPROM 01 01 00 00 00 22 C3 33 4A 77 00 1C 40 02 00 00 62 03 00 00 00 1E 00 47 45 52 00 90 00 8C 00 64 00 14 00 56 2A 99 6F 56 Nach Ausführung von diesem File und erneutes Auslesen der Kartendaten müsste eure Provider ID vom Provider 00 nun folgende Daten enthalten: Provider ID 00 = 05 F2 7B und Date = 04 60. Bei Provider 10 müsste immer noch Müll drinnen stehen. Ist doch wiederum klar, im Buffer 08 stand ja noch nichts drin. Würden wir nur den Provider 00 benutzen wollen, könnten wir nun eigentlich aufhören, aber wir wollen ja auch noch den Provider 10 zum laufen bringen. Also weiter im Text. Provider 10 Beschreiben Kommen wir nun dazu den Buffer 08 aufzufüllen. Diesen kann man im Gegensatz zu Buffer 07 nicht direkt Beschreiben, aber wir behelfen uns mit einem Trick. Im Buffer 08 werden jeweils immer die Kartenantworten gespeichert. Also müssen wir eine Abfrage finden welche genug Daten rausschmeisst die wir vorher auch Beeinflussen können. Was hätten wir den da so ? Oh Gott, jaaaa, die Channel IDs. Diese werden ja Blockweise mit einer Länge von 3C (60Bytes) ausgegeben. Mit dem Kommando: 01 02 04 00 00 01 00 wird der erste Block der ChannelIDs von Provider 00 ausgegeben. Was machen wir jetzt. Wir schreiben unsere Daten für Provider 10 dort hinein. Damit diese Daten auch wirklich im ersten Block landen müssen wir erst einmal alle Channel IDs von Provider 00 löschen. Dies geschieht mit dem Nano 94 00. Danach schreiben wir die Channel IDs so wie wir sie Nachher brauchen. Da man leider nicht mehrmals die Channel ID 00 00 setzen können, diese würden sich nämlich immer wieder selbst überschreiben, müssen wir zwangsläufig auch ein paar andere Werte nehmen. Aber das macht Nacher überhaupt nichts wenn in den Bereichen wo eigentlich nichts wichtiges steht, einmal eine andere Zahl steht. Was haben wir nun gelernt. Der Buffer 08 deckt den Adressbereich von 59 bis 88 ab. Hier erst einmal das Grundfile. // Schreibe Channel ID liste für Provider 10 01 01 00 00 00 39 02 05 F2 00 00 33 40 02 00 00 94 00 51 D8 00 00 00 11 P1 P1 P1 00 00 00 00 00 00 DA DA 31 00 00 01 00 00--> --> 00 00 00 51 4C 02 00 00 PK PK PK PK PK PK PK PK 01 s1 P1 steht für die Provider ID (3 Byte), DA Für das Date (2 Byte) und PK für den Plainmasterkey. Jetzt nehme ich mir die Daten, die ich mir oben zurechtgelegt habe und setze diese ein. Somit sieht der String dann so aus. // Schreibe Channel ID liste für Provider 10 01 01 00 00 00 39 02 05 F2 00 00 33 40 02 00 00 94 00 51 D8 00 00 00 11 1B 23 22 00 00 00 00 00 00 03 7F 31 00 00 01 00 00--> --> 00 00 00 51 4C 02 00 00 54 45 4E 8D 6E E1 CC 52 01 BD 5C 82 AD C5 Da wir nach der ersten Prozedur alle dieselben Provider IDs haben, braucht ihr nun die Signatur nicht selber Berechnen. Dies habe ich schon für euch getan. So, jetzt bauen wir diesen String zu unseren anderen dazu und haben somit dieses CRD File: // Schreibe Buffer 07 für Provider 00 01 02 07 00 00 4B 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00--> --> 00 00 00 00 00 00 00 00 00 05 F2 7B 00 00 00 00 00 00 04 60 31 00 00 00 00 00 00 00 00 00 00 00 3e 3a 99 6b f2 20 11 68 // Schreibe ins EEPROM 01 01 00 00 00 22 C3 33 4A 77 00 1C 40 02 00 00 62 03 00 00 00 1E 00 47 45 52 00 90 00 8C 00 64 00 14 00 56 2A 99 6F 56 // Schreibe Channel ID liste für Provider 10 01 01 00 00 00 39 02 05 F2 00 00 33 40 02 00 00 94 00 51 D8 00 00 00 11 1B 23 22 00 00 00 00 00 00 03 7F 31 00 00 01 00 00--> --> 00 00 00 51 4C 02 00 00 54 45 4E 8D 6E E1 CC 52 01 BD 5C 82 AD C5 // Schreibe Buffer 07 für Provider 00 01 02 07 00 00 4B 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00--> --> 00 00 00 00 00 00 00 00 00 05 F2 7B 00 00 00 00 00 00 04 60 31 00 00 00 00 00 00 00 00 00 00 00 3e 3a 99 6b f2 20 11 68 // Übernehme Channel ID Profil ins Register 8 01 02 04 00 00 01 00 // Schreibe ins EEPROM 01 01 00 00 00 22 C3 33 4A 77 00 1C 40 02 00 00 62 03 00 00 00 1E 00 47 45 52 00 90 00 8C 00 64 00 14 00 56 2A 99 6F 56 Wie ihr sehen könnt wurden im letzten Abschnitt beide Buffers noch einmal gefüllt bis dann erst das 1E Nano zum Einsatz kommt. Nach dem Ausführen von diesem CRD File und erneutes Auslesen der Karte müssten nun die Daten wie folgt sein: Provider ID 00 = 05 F2 7B / Date = 04 60 Provider ID 10 = 1B 23 22 / Date = 03 7F Bei wem das noch nicht so ist, der möge sich das File noch einmal richtig anschauen und auf Fehler untersuchen. Wie gesagt, dieses ist ein Beispiel für eine Karte der Version ACS 0383. Was jetzt noch folgt ist das ganz normale setzen von Channel IDs und den richtigen Keys. In diesem Fall braucht ihr die Signatur auch nicht errechnen, da ich das für euch schon erledigt habe. Die Signatur funktioniert aber nur bei diesem Beispiel. Benutzt ihr andere Werte so müsst ihr die Signatur natürlich selber Timen. //öffnet alle ChIds und Keys für Provider 00 01 01 00 00 00 39 02 05 F2 00 00 33 40 02 04 60 94 00 51 D8 FF F9 04 60 FF 00 FF F5 04 60 FF 00 FF F3 04 60 FF 00 FF EE 04--> --> 60 FF 00 51 4C FF FE 04 60 FF 00 FF F0 04 60 FF 00 4C 41 5F EA 97 01 01 00 00 00 23 02 05 F2 00 00 1D 40 02 04 A1 50 52 02 43 A7 7F 70 D7 3A 52 E1 04 43 A7 7F 70 D7 3A 52 E1 33 0D 68 63 90 //öffnet alle ChIds und Keys für Provider 10 01 01 00 00 00 35 0A 1B 23 00 00 2F 40 02 03 7F 94 00 51 06 75 30 03 60 FF 00 51 06 4E 2A 03 60 FF 00 50 52 06 4A 37 1B D8--> --> 6B E7 13 C8 11 39 C0 DC 8B 27 B7 0B FD 33 AF 3E 63 64 Alles zusammengenommen sieht dann praktisch so aus: // Schreibe Buffer 07 für Provider 00 01 02 07 00 00 4B 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00--> --> 00 00 00 00 00 00 00 00 00 05 F2 7B 00 00 00 00 00 00 04 60 31 00 00 00 00 00 00 00 00 00 00 00 3e 3a 99 6b f2 20 11 68 // Schreibe ins EEPROM 01 01 00 00 00 22 C3 33 4A 77 00 1C 40 02 00 00 62 03 00 00 00 1E 00 47 45 52 00 90 00 8C 00 64 00 14 00 56 2A 99 6F 56 // Schreibe Channel ID liste für Provider 10 01 01 00 00 00 39 02 05 F2 00 00 33 40 02 00 00 94 00 51 D8 00 00 00 11 1B 23 22 00 00 00 00 00 00 03 7F 31 00 00 01 00 00--> --> 00 00 00 51 4C 02 00 00 54 45 4E 8D 6E E1 CC 52 01 BD 5C 82 AD C5 // Schreibe Buffer 07 für Provider 00 01 02 07 00 00 4B 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00--> --> 00 00 00 00 00 00 00 00 00 05 F2 7B 00 00 00 00 00 00 04 60 31 00 00 00 00 00 00 00 00 00 00 00 3e 3a 99 6b f2 20 11 68 // Übernehme Channel ID Profil ins Register 8 01 02 04 00 00 01 00 // Schreibe ins EEPROM 01 01 00 00 00 22 C3 33 4A 77 00 1C 40 02 00 00 62 03 00 00 00 1E 00 47 45 52 00 90 00 8C 00 64 00 14 00 56 2A 99 6F 56 //reset r0 //öffnet alle ChIds und Keys für Provider 00 01 01 00 00 00 39 02 05 F2 00 00 33 40 02 04 60 94 00 51 D8 FF F9 04 60 FF 00 FF F5 04 60 FF 00 FF F3 04 60 FF 00 FF EE 04--> --> 60 FF 00 51 4C FF FE 04 60 FF 00 FF F0 04 60 FF 00 4C 41 5F EA 97 01 01 00 00 00 23 02 05 F2 00 00 1D 40 02 04 A1 50 52 02 43 A7 7F 70 D7 3A 52 E1 04 43 A7 7F 70 D7 3A 52 E1 33 0D 68 63 90 //öffnet alle ChIds und Keys für Provider 10 01 01 00 00 00 35 0A 1B 23 00 00 2F 40 02 03 7F 94 00 51 06 75 30 03 60 FF 00 51 06 4E 2A 03 60 FF 00 50 52 06 4A 37 1B D8--> --> 6B E7 13 C8 11 39 C0 DC 8B 27 B7 0B FD 33 AF 3E 63 64 Ich hoffe ihr konntet mir bis hierhin folgen und habt so einigermassen verstanden von was ich geredet habe. Bei den Karten der Version ACS 0382 gibt es ein Problem mit der Buffergrösse. Schaut euch doch mal die Beispiele für diese Karten an und ihr werdet sehen, warum der Buffer 07 nicht ganz gefüllt ist ( letzte Byte vom Plainmasterkey fehlt ). Das letzte Byte gewinnt man dadurch das man vorher ein Byte im unkritischen Bereich so ändert, dass die Cheksumme (XOR Verknüpfung mit allen Bytes im String und dem Byte 3F) das letzte Byte des Plainmasterkeys von Provider 00 ergibt. Aber schaut es euch lieber mal selbst an. |