X-Git-Url: http://git.zerfleddert.de/cgi-bin/gitweb.cgi/proxmark3-svn/blobdiff_plain/31b6e9af2beb26d7e78ab5f085f79fbb350e8f90..382223b9a93ea4dbca25f65b3caa79a0b1d4dd35:/client/cmdhf15.c diff --git a/client/cmdhf15.c b/client/cmdhf15.c index 4fce726d..29612c30 100644 --- a/client/cmdhf15.c +++ b/client/cmdhf15.c @@ -54,15 +54,29 @@ typedef struct { const productName uidmapping[] = { + { 0xE001000000000000LL, 16, "Motorola" }, + { 0xE002000000000000LL, 16, "ST Microelectronics" }, + { 0xE003000000000000LL, 16, "Hitachi" }, + { 0xE004000000000000LL, 16, "Philips" }, + { 0xE004010000000000LL, 24, "Philips; IC SL2 ICS20" }, + { 0xE005000000000000LL, 16, "Infineon" }, + { 0xE005400000000000LL, 24, "Infineon; 56x32bit" }, + { 0xE006000000000000LL, 16, "Cylinc" }, { 0xE007000000000000LL, 16, "Texas Instrument; " }, { 0xE007000000000000LL, 20, "Texas Instrument; Tag-it HF-I Plus Inlay; 64x32bit" }, { 0xE007100000000000LL, 20, "Texas Instrument; Tag-it HF-I Plus Chip; 64x32bit" }, { 0xE007C00000000000LL, 23, "Texas Instrument; Tag-it HF-I Standard; 8x32bit" }, { 0xE007C40000000000LL, 23, "Texas Instrument; Tag-it HF-I Pro; 8x23bit; password" }, - { 0xE005000000000000LL, 16, "Infineon" }, - { 0xE005400000000000LL, 24, "Infineon; 56x32bit" }, - { 0xE004000000000000LL, 16, "Philips" }, - { 0xE002000000000000LL, 16, "STMicroelectronics" }, + { 0xE008000000000000LL, 16, "Fujitsu" }, + { 0xE009000000000000LL, 16, "Matsushita" }, + { 0xE00A000000000000LL, 16, "NEC" }, + { 0xE00B000000000000LL, 16, "Oki Electric" }, + { 0xE00C000000000000LL, 16, "Toshiba" }, + { 0xE00D000000000000LL, 16, "Mitsubishi" }, + { 0xE00E000000000000LL, 16, "Samsung" }, + { 0xE00F000000000000LL, 16, "Hyundai" }, + { 0xE010000000000000LL, 16, "LG-Semiconductors" }, + { 0xE012000000000000LL, 16, "HID Corporation" }, { 0xE016000000000000LL, 16, "EM-Marin SA (Skidata)" }, { 0xE016040000000000LL, 24, "EM-Marin SA (Skidata Keycard-eco); no memory" }, { 0xE016100000000000LL, 24, "EM-Marin SA (Skidata); EM4135; 36x64bit start page 13" }, @@ -70,8 +84,8 @@ const productName uidmapping[] = { }; -// fast method to just read the UID of an tag (collission detection not supported) -// *buf shouls be large enough to fit the 64bit uid +// fast method to just read the UID of a tag (collission detection not supported) +// *buf should be large enough to fit the 64bit uid // returns 1 if suceeded int getUID(uint8_t *buf) { @@ -134,10 +148,20 @@ static char* getTagInfo(uint8_t *uid) { } -// will return a clear-text message to an errorcode +// return a clear-text message to an errorcode static char* TagErrorStr(uint8_t error) { - // TODO - return NULL; + switch (error) { + case 0x01: return "The command is not supported"; + case 0x02: return "The command is not recognised"; + case 0x03: return "The option is not supported."; + case 0x0f: return "Unknown error."; + case 0x10: return "The specified block is not available (doesn’t exist)."; + case 0x11: return "The specified block is already -locked and thus cannot be locked again"; + case 0x12: return "The specified block is locked and its content cannot be changed."; + case 0x13: return "The specified block was not successfully programmed."; + case 0x14: return "The specified block was not successfully locked."; + default: return "Reserved for Future Use or Custom command error."; + } } @@ -312,7 +336,7 @@ int CmdHF15DumpMem(const char*Cmd) { blocknum++; // PrintAndLog("bn=%i",blocknum); } else { - PrintAndLog("Tag returned Error %i: %s",recv[0],TagErrorStr(recv[0])); + PrintAndLog("Tag returned Error %i: %s",recv[1],TagErrorStr(recv[1])); return 0; } } // else PrintAndLog("crc"); @@ -324,7 +348,7 @@ int CmdHF15DumpMem(const char*Cmd) { else if (r && ISO15_CRC_CHECK!=Crc(r->d.asBytes,r->arg[0])) PrintAndLog("CRC Failed"); else - PrintAndLog("Tag returned Error %i: %s",recv[0],TagErrorStr(recv[0])); + PrintAndLog("Tag returned Error %i: %s",recv[1],TagErrorStr(recv[1])); return 0; } @@ -644,12 +668,12 @@ int CmdHF15CmdRead(const char *Cmd) { sprintf(output+strlen(output),"%02hX ",recv[i]); } strcat(output," "); - for ( int i=2; iarg[0]-2; i++) { - sprintf(output+strlen(output),"%c",recv[i]>31 || recv[i]<127?recv[i]:'.'); + for ( int i=1; iarg[0]-2; i++) { + sprintf(output+strlen(output),"%c",recv[i]>31 && recv[i]<127?recv[i]:'.'); } PrintAndLog("%s",output); } else { - PrintAndLog("Tag returned Error %i: %s",recv[0],TagErrorStr(recv[0])); + PrintAndLog("Tag returned Error %i: %s",recv[1],TagErrorStr(recv[1])); } } else { PrintAndLog("CRC failed"); @@ -731,7 +755,7 @@ int CmdHF15CmdWrite(const char *Cmd) { if (!(recv[0] & ISO15_RES_ERROR)) { PrintAndLog("OK"); } else { - PrintAndLog("Tag returned Error %i: %s",recv[0],TagErrorStr(recv[0])); + PrintAndLog("Tag returned Error %i: %s",recv[1],TagErrorStr(recv[1])); } } else { PrintAndLog("CRC failed");