Mifare Card Explorer for Mac

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 dinamiche per la gestione delle routine di base di accesso alla gestione delle carte contactless (libgemtagapi.dylib)

In questo progetto ho utilizzato tali ed ho incapsulato alcune delle funzionalita' offerte dalla libreria in un classe in Objective C / COCOA e quindi in un oggetto denominato FGMifareObj 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.

Scorrete la pagina per visualizzare le immagini dell'applicazione FGMifareCard explorer.

 

 

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

 

Se siete interessati ad altre utility per Macintosh, potete cercare www.versiontracker.com (softech) oppure su Tevac www.tevac.com (germinara).

Tra i siti piu' belli ed interessanti segnalo quello di Pierino Donati
al link www.pierinodonati.it

Tra le utility rilasciate per Mac

FGShortCuts Remember 1.0 Le scorciatoie piu' importanti di Mac OS X

FGPermission 1.1 Per gestire i permessi su files e cartelle

FGPreferenceManager 1.1 Per salvare e ripristinare le preferenze danneggiate delle applicazioni

FGHexEditor 1.0 Un esempio di programmazione in COCOA con codice sorgente (Un piccolo editor esadecimale)

Notes 1.0 Un piccolo editor di testo, con annesso calendario (richiede Tiger)

Gestione Fatturazione Semplice programma per la gestione delle fatture e archivio clienti per Mac OS X Tiger
( Solo il manuale)

Sensors Una piccola applicazione Cocoa, completa di sorgenti, che implementa diversi metodi per ricavare informazioni sull'hardware del Mac.
Su MacBookPro, sono lette le informazioni relative al sensore di movimento, al sensore della luminosita' ambiente, allo stato della batteria, alla velocita' di rotazione delle ventole e della temperatura della CPU. Sono state utilizzate diverse classsi e informazioni ricavate da vari programmi, i rispettivi proprietari sono citati nei credits.

TUTORIAL

Cocoa Subclassing - HUD parte 1

Cocoa Subclassing - HUD parte 2

Esperimenti con Spotlight

Query Builder

Tutorial per usare MySQL con ODBC e COCOA E' un tutorial che ha il duplice scopo di aiutare coloro che vogliono programmare in ambiente Apple Mac OS X usando XCODE e di aiutare coloro che hanno intenzione di usare Cocoa e objectivec per gestire un database MySQL usando il meccanismo ODBC.

Segnalo, inoltre i siti di Marco Coïsson e di Livio Sandel che ammiro e stimo per il loro impegno nella diffusione della conoscenza della programmazione in ambiente cocoa e macintosh. Altro sitio interessante è quello di Raucci Biagio

Un sito da cui scaricare ottimi esempi di programmazione è
quello di Martin Ulrich Kusterer


Nel mio piccolo, capacità e tempo permettendo, cerco di fornire un modesto contributo, anche perche' sono a favore di una comutità di programmatori italiani per mac os x e cocoa, della quale mi piacerebbe entrare a far parte.

Di seguito trovate i link per scaricare l'applicazione Gestione Regali realizzata per scrivere il tutorial.

Il link per scaricare il tutorial (12Mb) è
http://www.germinara.it/FGMySqlOdbcCocoaTutorial.zip

C'e anche una versione in inglese
(solo applicazione completa che pesa meno 5Mb)
http://www.germinara.it/FGMySqlOdbcCocoaTutorialEnglish.zip

 

 
 

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 :

Mifare Card Explorer for Mac (Programma)

Mifare Card XCODE Project (Progetto)

FGMifareObj.h
FGMifareObj.m

FGMifareCard.h
FGMifareCard.m

Contenuti

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

Languages
Objective C
COCOA
Operating system

Mac OS X 10.3.9 o superiore
Databases
Nessuno

 

 
       

La classe FMifareObjè 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) SelectACard:(FGMifareCard *)pSelectedCard; //Select Idle Card present in the radio field

//Access Data on Card
//As Block
-(int) ReadBlock :(FGMifareCard *) pSelectedCard forBlock:(int) nBlock usingKeyNum:(int) usingKey dataRead :(unsigned char *)BlockData; //Read a single Block

-(int) WriteBlock:(FGMifareCard *) pSelectedCard forBlock:(int) nBlock usingKeyNum:(int) usingKey dataToWrite:(unsigned char *)BlockData; //Write a single Block

-(int) EraseBlock:(FGMifareCard *) pSelectedCard forBlock:(int) nBlock usingKeyNum:(int) usingKey; //Erase a single Block

//As Sector
-(int) ReadSector:(FGMifareCard *) pSelectedCard forSector:(int) nSector usingKeyNum:(int) usingKey dataRead:(unsigned char *)SecData numBytes:(int*) bytesRead; //Read a single sector


-(int) WriteSector:(FGMifareCard *) pSelectedCard forSector:(int) nSector usingKeyNum:(int) usingKey dataToWrite:(unsigned char *)SecData; //Write a single sector


-(int) EraseSector:(FGMifareCard *) pSelectedCard forSector:(int) nSector usingKeyNum:(int) usingKey;//Erase a single sector

//All memory on the card
-(int) ReadAllSector:(FGMifareCard *) pSelectedCard dataRead:(NSMutableData*) dataOnCard usingKeyNum:(int) usingKey; //Read all data on the card

-(int) WriteAllSector:(FGMifareCard *) pSelectedCard withData:(NSMutableData*) dataToWrite usingKeyNum:(int) usingKey; //Write all data to the card

//Manage ACL

-(int) ReadACL:(FGMifareCard *) pSelectedCard forSector:(int) nSector usingKeyNum:(int) usingKey dataRead:(unsigned char *) pACL keyRead:(MIF_KEY*) theKeyB; //Read 4 BYTES ACL

-(int) WriteACL:(FGMifareCard *) pSelectedCard forSector:(int)nSector withKey:(MIF_KEY*) theWriteKey dataWrite:(unsigned char *)pACL keyA:(MIF_KEY*) theKeyA keyB:(MIF_KEY*) theKeyB; //Write 4 BYTES ACL

}


Vari esempi delle videate del programma