Smartcardchip
From Bettyhacks.com - Hack BettyTV-Remote
m (Reverted edits by 140.128.20.205 (Talk); changed back to last version by Colibri) |
m (→Hardware: Serielle Parameter 8E2 ergänzt) |
||
Line 10: | Line 10: | ||
</pre> | </pre> | ||
− | + | Neben dem sehr kurzen 8 seitigen [http://www.infineon.com/cms/en/services/download.html?filename=%2fdgdl%2fSPI_SLE66C24PE_0105.pdf%3ffolderId%3ddb3a304412b407950112b416848b20bf%26fileId%3ddb3a304412b407950112b41684c420c0&location=Products.Chip_Card___Security_ICs.Chip_Card_Controllers.SLE_66_family__Enhanced_High_Performance_Controller.SLE_66C24PE.DOCUMENTS.SPI_SLE66C24PE_0105.pdf PDF] mit Information zum Chip, in dem nicht einmal die Pinbelegung beschrieben ist, hat ein Benutzer des Forums noch dieses [http://bettyhacks.com/forum/index.php?action=dlattach;topic=39.0;attach=22 PDF] gepostet. | |
Anschlussbelegung: | Anschlussbelegung: | ||
Line 24: | Line 24: | ||
* CPU Pin 132 (P2.17) steuert den nReset pin. Wird der CPU-Pin auf LO gesetzt ist der Reset aktiv. | * CPU Pin 132 (P2.17) steuert den nReset pin. Wird der CPU-Pin auf LO gesetzt ist der Reset aktiv. | ||
− | * CPU Pin 78 (P0.10) steuert | + | * CPU Pin 78 (P0.10) steuert ueber einen externen Inverter den Power Pin. Wird der CPU-Pin auf LO gesetzt wird der Chip mit Spannung versorgt. |
− | * CPU Pin 40 (XCLK) ist | + | * CPU Pin 40 (XCLK) ist ueber einen externen Frequenzteiler mit dem Takteingang des Chips verbunden. Im Betrieb wird ueber den CPU-Pin der 7,5 MHz Peripherietakt ausgegeben. Durch den Frequenzteiler wird der Takt halbiert. Der Smartcard-Chip wird dadurch mit mit 3,75 MHz getaktet. |
− | * CPU Pin 75 (TXD1) und CPU Pin | + | * CPU Pin 75 (TXD1) und CPU Pin 76 (RXD1) sind mit dem Daten Pin verbunden. Die Datenrate ist 1/64 der Taktfrequenz, also 58593,75 Bit/s und somit nahe an der von einem PC unsterstuetzen Baudrate von 57600 Bit/s (nur ca. 1,7% Abweichung). Neben der Baudrate ist die Parität auf Even sowie 2 Stopbits einzustellen. |
− | Zum Experimentieren kann man den Chip | + | Zum Experimentieren kann man den Chip ausloeten und z.B. mit dem Mastermouse-Interface verbinden. Die andere Seite des Interfaces wird an die serielle PC Schnittstelle angeschlossen. Jetzt kann man mit einen Programm wie z.B. WinExplorer Kommandos an den Chip schicken und die Antworten auswerten. Dadurch laesst sich das Uebertragungsformat herausfinden und man kann eine Kommandoliste aufstellen. |
=ATR= | =ATR= | ||
− | Nachdem beim Chip ein Reset | + | Nachdem beim Chip ein Reset ausgefuehrt wurde, wird wie bei Smartcards ueblich, ein ATR ausgegeben. Jedoch ist dieser bei der Betty properitaer. |
<PRE> | <PRE> | ||
Line 41: | Line 41: | ||
</PRE> | </PRE> | ||
− | * Das erste Byte | + | * Das erste Byte enthaelt die Anzahl der ATR Bytes incl. des Laengenbytes selbst. |
* Das zweite Byte ist das Lifecycle Byte: 1=Virgin, 2=Personalisiert | * Das zweite Byte ist das Lifecycle Byte: 1=Virgin, 2=Personalisiert | ||
− | * Das letzte Byte ist eine XOR | + | * Das letzte Byte ist eine XOR Pruefsumme ueber alle vorherigen Bytes. |
Bei allen Infineon-Chips gibts eine von Hersteller undokumentierte Funktion den Chip dazu zu bringen statt die Applikation zu starten den Hersteller-ATR auszugeben. | Bei allen Infineon-Chips gibts eine von Hersteller undokumentierte Funktion den Chip dazu zu bringen statt die Applikation zu starten den Hersteller-ATR auszugeben. | ||
Line 55: | Line 55: | ||
* Die sechs Byte mit xx enthalten eine eine vom Hersteller vergebene Seriennummer. Betty verwendet die gleiche Nummer (im Batteriefach der Fernbedienung). | * Die sechs Byte mit xx enthalten eine eine vom Hersteller vergebene Seriennummer. Betty verwendet die gleiche Nummer (im Batteriefach der Fernbedienung). | ||
− | * Die | + | * Die fuenfte Stelle gibt den Chiptyp an: 9C = SLE66C24PE |
=Protokoll= | =Protokoll= | ||
Line 62: | Line 62: | ||
{| class="wikitable" | border="1" | {| class="wikitable" | border="1" | ||
|- | |- | ||
− | ! | + | ! Laengenbyte |
! Kommandobyte | ! Kommandobyte | ||
! Optionale Datenbytes | ! Optionale Datenbytes | ||
|- | |- | ||
− | | | + | | Enthaelt die Anzahl der zum Chip gesendeten Bytes incl. des Laengenbytes selbst. |
− | | Gibt an welche Aktion der Chip | + | | Gibt an welche Aktion der Chip durchfuehren soll. |
| Bei manchen Kommandos nicht vorhanden. | | Bei manchen Kommandos nicht vorhanden. | ||
|} | |} | ||
Line 75: | Line 75: | ||
{| class="wikitable" | border="1" | {| class="wikitable" | border="1" | ||
|- | |- | ||
− | ! | + | ! Laengenbyte |
! Statusbyte | ! Statusbyte | ||
! Optionale Datenbytes | ! Optionale Datenbytes | ||
− | ! | + | ! Pruefsummenbyte |
|- | |- | ||
− | | | + | | Enthaelt die Anzahl der Antwortbytes incl. des Laengenbytes selbst. |
− | | An diesem Byte kann man erkennen ob das Kommando feherfrei | + | | An diesem Byte kann man erkennen ob das Kommando feherfrei ausgefuehrt wurde oder fehlgeschalgen ist. |
| Bei manchen Kommandos nicht vorhanden. | | Bei manchen Kommandos nicht vorhanden. | ||
− | | XOR | + | | XOR Pruefsumme ueber alle vorherigen Bytes dieses Antwortblocks |
|} | |} | ||
Line 95: | Line 95: | ||
|- | |- | ||
| 15 | | 15 | ||
− | | Das Kommando wurde erfolgreich | + | | Das Kommando wurde erfolgreich ausgefuehrt |
|- | |- | ||
| 16 | | 16 | ||
− | | Das Kommandobyte ist zwar | + | | Das Kommandobyte ist zwar gueltig, jedoch nicht die uebergebenen Daten |
|- | |- | ||
| 17 | | 17 | ||
− | | Das Kommandobyte ist | + | | Das Kommandobyte ist ungueltig |
|- | |- | ||
| 18 | | 18 | ||
Line 111: | Line 111: | ||
− | Durch das Ausprobieren aller 256 | + | Durch das Ausprobieren aller 256 Moeglichkeiten fuer das Kommandobyte und weglassen aller Kommandos bei denen Status 17 zurueckgegeben wurde ist folgende Liste entstanden. |
− | Folgende Kommandos werden | + | Folgende Kommandos werden unterstuetzt (Zahlen im Hex. Format): |
{| class="wikitable" | border="1" | {| class="wikitable" | border="1" | ||
|- | |- | ||
Line 209: | Line 209: | ||
* Kommando-Daten: Registernummer (DWORD), Unbekannt1 (DWORD) | * Kommando-Daten: Registernummer (DWORD), Unbekannt1 (DWORD) | ||
* Daten im Antwortblock: Kommandobyte-Echo, 3 * 00, Unbekannt1-Echo (DWORD), Registernummer-Echo (DWORD), Registerinhalt (DWORD), 5 * unbekannte Bytes | * Daten im Antwortblock: Kommandobyte-Echo, 3 * 00, Unbekannt1-Echo (DWORD), Registernummer-Echo (DWORD), Registerinhalt (DWORD), 5 * unbekannte Bytes | ||
− | * Wertebereich | + | * Wertebereich fuer Registernummer: 0 .. E2h |
===Kommando 46 (SC_MEM beschreiben)=== | ===Kommando 46 (SC_MEM beschreiben)=== | ||
Line 215: | Line 215: | ||
* Kommando-Daten: Registernummer (DWORD), Registerinhalt (DWORD) | * Kommando-Daten: Registernummer (DWORD), Registerinhalt (DWORD) | ||
* keine Daten im Antwortblock | * keine Daten im Antwortblock | ||
− | * Wertebereich | + | * Wertebereich fuer Registernummer: 0 .. E2h |
===Kommando 47=== | ===Kommando 47=== | ||
Line 236: | Line 236: | ||
===Kommando 4D=== | ===Kommando 4D=== | ||
* wird in der Firmware bei Adresse 80035AFC verwendet | * wird in der Firmware bei Adresse 80035AFC verwendet | ||
− | * Kommando-Daten: 0 bis 3Eh Bytes | + | * Kommando-Daten: 0 bis 3Eh Bytes moeglich (die Firmware benutzt 4 Byte) |
− | * Daten im Antwortblock: 4 * 8 Byte | + | * Daten im Antwortblock: 4 * 8 Byte Bloecke (manchmal ist Block 2 und 3 identisch) |
===Kommando 4F=== | ===Kommando 4F=== | ||
Line 243: | Line 243: | ||
* Kommando-Daten: Unbekannt1 (DWORD), Unbekannt2 (DWORD) | * Kommando-Daten: Unbekannt1 (DWORD), Unbekannt2 (DWORD) | ||
* Daten im Antwortblock: Kommandobyte-Echo, 3 * 00, Unbekannt2-Echo (DWORD), 16 dez. * unbekannte Bytes | * Daten im Antwortblock: Kommandobyte-Echo, 3 * 00, Unbekannt2-Echo (DWORD), 16 dez. * unbekannte Bytes | ||
− | * Wertebereich | + | * Wertebereich fuer Unbekannt1: 0 .. Bh |
===Kommando 50 (SC_Sec_MEM auslesen)=== | ===Kommando 50 (SC_Sec_MEM auslesen)=== | ||
Line 249: | Line 249: | ||
* Kommando-Daten: Registernummer (DWORD), Unbekannt1 (DWORD) | * Kommando-Daten: Registernummer (DWORD), Unbekannt1 (DWORD) | ||
* Daten im Antwortblock: Kommandobyte-Echo, 3 * 00, Registernummer-Echo (DWORD), Registerinhalt (DWORD), 5 * unbekannte Bytes | * Daten im Antwortblock: Kommandobyte-Echo, 3 * 00, Registernummer-Echo (DWORD), Registerinhalt (DWORD), 5 * unbekannte Bytes | ||
− | * Wertebereich | + | * Wertebereich fuer Registernummer: 0 .. 95h |
===Kommando 51=== | ===Kommando 51=== |