Mifare Card Explorer

Il software di seguito presentato è un esempio di utilizzo delle smart card contactless RFID Mifare(R) da 4Kbyte della Philips. Il lettore della carta in radiofrequenza che ho utilizzato per il progetto è il modello GemTAG x501 USB della Gemini2K Un grazie particolare al signor. Stoyan Yordanov della Gemini2k per l'aiuto fornitomi nell'utilizzo e nella comprensione della loro libreria.

La Gemini2K fornisce insieme al lettore di smart card le librerie (DLL) e un activex per la gestione delle routine di base di accesso alla gestione delle carte contactless.

In questo progetto ho utilizzato tali DLL ed ho incapsulato alcune delle funzionalita' offerte dalla libreria in un classe in Visual C++ e quindi in un oggetto denominato CFGMifareObj di seguito descritto.

Per l'utilizzo dell'oggetto creato ho infine realizzato questa piccola applicazione che consente di leggere, scrivere i dati nella smart card Mifare Card da 4K.

Una smart cart Mifare da 4K puo' essere vista come un insieme di BLOCCHI o come un insieme di SETTORI. In pratica, dando un sguardo alla documentazione della Philips, si puo' vedere che è formata da 32 SETTORI da 48 BYTES di DATI e da altri 8 SETTORI da 240 BYTES di dati.
Ciascun settore da 48 bytes è formato da 3 BLOCCHI da 16 BYTES, mentre i restanti 8 settori da 240 bytes sono formati da 14 BLOCCHI da 16 BYTES.

Ciascun settore ha inoltre un ulteriore BLOCCO di 16 BYTES che viene chiamato TRAILER BLOCK e contine le informazioni relative alle chiavi di accesso (Key A e Key B) e ai diritti di accesso ai singoli blocchi del settore (ACCESS BITS).

Quindi, riepilogando, possiamo definire le chiavi e i diritti di accesso di ogni singolo blocco delle carta Mifare. Nel mio progetto, mi premeva realizzare la scrittura e la lettura di tutta l'area di memoria dati disponibile della card in una sola funzione, come se avessi a disposizione un unico blocco di memoria da 3,5KB circa su cui leggere e scrivere dati. Per realizzare tale modalità occorre che TUTTI I BLOCCHI DELLA CARTA abbiano gli stessi diritti di accesso e le stesse chiavi di accesso.

Le chiavi di accesso: Sono composte da 6 BYTES e possono essere due, chiamate appunto KEY A e KEY B.

IL BLOCCO TRAILER

Il blocco trailer, consente di memorizzare il valore delle chiavi A e B e nello stesso tempo la memorizzazione delle impostazioni dei Bits di accesso.

I Bits di accesso sono realativi sia all'accesso dei blocchi dati sia di accesso allo stesso blocco trailer.
Sono presenti TRE BYTES che determinano appunto, in base alla configurazione dei loro bits, che tipo di accesso viene fornito. Per una trattazione completa, si veda il sito della Philips dal quale è possibile scaricare la documentazione tecnica relativa alle carte mifare 4k.

I BLOCCHI DATI

I blocchi dati contengono le informazioni che vogliamo memorizzare sulla carta, per poter leggere o scrivere tali informazioni, dobbiamo essere autorizzati. L'autorizzazione dipende dalla chiave che utilizziamo e dagli accessi che sono stati forniti dai Bits di accesso dei TRAILER block, relativamente all'accesso dei blocchi dati.

Nel software di esempio, vengono gestire le varie modalità; ossia lettura e scrittura di un BLOCCO DATI, lettura e scrittura di un SETTORE e lettura e scrittura di TUTTA l'area dati della smart card.

Di seguito trovate il progetto scaricabile, l'eseguibile del programma e i sorgenti principali della classe indicata.

Tutti i nomi ed i marchi citati sono di proprietà dei rispettivi produttori.

 

 

Mifare 4K Card Explorer
Gratuito e con esempi sorgenti per
carte ISO ISO 14443 con tecnologia RFID

 

Caratteristiche
Lettura e scrittura singoli blocchi dati e settori per smart card Mifare (R) 4K della Philips.

Programmazione delle chiavi A e B e degli access bits per i singoli settori

Programma Free :

MifareTest CardExploer (Programma)

MifareTestProject (Progetto)

CFGMifareObj.h
CFGMifareObj.cpp

Contenuti

Gestione delle carte in radio frequenza
Gestione delle Tree View
Editor esadecimale

Languages
Visual C++
Microsoft Foundation Class (MFC)
Operating system

Windows
Databases
Nessuno

 
 

La classe CFMifareObjè quella che incapsula le funzioni per la lettura, la scrittura delle smart card e la gestione delle chiavi di accesso.

I principali metodi implementati sono:

bool ConnectToReader(); //Try to open a session and connect to the USB contactless smart card reader
void DisconnectToReader(); //Disconnect to the USB contactless smart card reader and release the session

int SelectAidleCard(); //Select Idle Card present in the radio field

int SelectACard(CFGMifareCard *pSelectedCard); //Select a Card

//Access Data on Card
//As Block
int ReadBlock(CFGMifareCard *pSelectedCard,int nBlock,int usingKey,unsigned char *BlockData); //Read a single Block

int WriteBlock(CFGMifareCard *pSelectedCard,int nBlock,int usingKey,unsigned char *BlockData);//Write a single Block

int EraseBlock(CFGMifareCard *pSelectedCard,int nBlock,int usingKey); //Erase a single Block

//As Sector
int ReadSector(CFGMifareCard *pSelectedCard,int nBlock,int usingKey,unsigned char *SecData,int* bytesRead); //Read a single sector

int WriteSector(CFGMifareCard *pSelectedCard,int nSector,int usingKey,unsigned char *SecData); //Write a single sector

int EraseSector(CFGMifareCard *pSelectedCard,int nSector,int usingKey);//Erase a single sector

//All memory on the card
int ReadAllSector(CFGMifareCard *pSelectedCard,CByteArray& dataOnCard,int usingKey,CProgressCtrl *aPrgBar); //Read all data on the card

int WriteAllSector(CFGMifareCard *pSelectedCard,CByteArray& dataToWrite,int usingKey,CProgressCtrl *aPrgBar); //Write all data to the card

//All memory on the card

int ReadACL(CFGMifareCard *pSelectedCard,int nSector,int usingKey,unsigned char *pACL,MIF_KEY& theKeyB); //Read 4 BYTES ACL

int WriteACL(CFGMifareCard *pSelectedCard,int nSector,MIF_KEY& theWriteKey,unsigned char *pACL,MIF_KEY& theKeyA,MIF_KEY& theKeyB); //Write 4 BYTES ACL
}


Vari esempi delle videate del programma