PrintAndLog(" print keys : hf iclass managekeys p\n");
return 0;
}
-
+int usage_hf_iclass_reader(void) {
+ PrintAndLog("HELP : Act as a Iclass reader:\n");
+ PrintAndLog("Usage: hf iclass reader [h] [1]\n");
+ PrintAndLog("Options:");
+ PrintAndLog(" h This help text");
+ PrintAndLog(" 1 read only 1 tag");
+ PrintAndLog("Samples:");
+ PrintAndLog(" hf iclass reader 1");
+ return 0;
+}
+int usage_hf_iclass_replay(void){
+ PrintAndLog("HELP: Replay a collected mac message");
+ PrintAndLog("Usage: hf iclass replay [h] <mac>");
+ PrintAndLog("Options:");
+ PrintAndLog(" h This help text");
+ PrintAndLog(" <mac> Mac bytes to replay (8 hexsymbols)");
+ PrintAndLog("Samples:");
+ PrintAndLog(" hf iclass replay 00112233");
+ return 0;
+}
+int usage_hf_iclass_snoop(void){
+ PrintAndLog("HELP: Snoops the communication between reader and tag");
+ PrintAndLog("Usage: hf iclass snoop [h]");
+ PrintAndLog("Samples:");
+ PrintAndLog(" hf iclass snoop");
+ return 0;
+}
int xorbits_8(uint8_t val) {
uint8_t res = val ^ (val >> 1); //1st pass
res = res ^ (res >> 1); // 2nd pass
}
int CmdHFiClassSnoop(const char *Cmd) {
+ char cmdp = param_getchar(Cmd, 0);
+ if (cmdp == 'h' || cmdp == 'H') return usage_hf_iclass_snoop();
+
UsbCommand c = {CMD_SNOOP_ICLASS};
SendCommand(&c);
return 0;
return 0;
}
-int CmdHFiClassReader(const char *Cmd) {
- return HFiClassReader(Cmd, true, true);
+int CmdHFiClassReader(const char *Cmd) {
+ char cmdp = param_getchar(Cmd, 0);
+ if (cmdp == 'h' || cmdp == 'H') return usage_hf_iclass_reader();
+ bool findone = (cmdp == '1') ? FALSE : TRUE;
+ return HFiClassReader(Cmd, findone, true);
}
int CmdHFiClassReader_Replay(const char *Cmd) {
uint8_t readerType = 0;
uint8_t MAC[4]={0x00, 0x00, 0x00, 0x00};
- if (strlen(Cmd)<1) {
- PrintAndLog("Usage: hf iclass replay <MAC>");
- PrintAndLog(" sample: hf iclass replay 00112233");
- return 0;
- }
+ if (strlen(Cmd)<1) return usage_hf_iclass_replay();
if (param_gethex(Cmd, 0, MAC, 8)) {
PrintAndLog("MAC must include 8 HEX symbols");
}
int CmdHFiClassDecrypt(const char *Cmd) {
+
+ char opt = param_getchar(Cmd, 0);
+ if (strlen(Cmd)<1 || opt == 'h' || opt == 'H') return usage_hf_iclass_decrypt();
+
uint8_t key[16] = { 0 };
if(readKeyfile("iclass_decryptionkey.bin", 16, key)) return usage_hf_iclass_decrypt();
- PrintAndLog("Decryption file found... ");
- char opt = param_getchar(Cmd, 0);
- if (strlen(Cmd)<1 || opt == 'h' || opt == 'H') return usage_hf_iclass_decrypt();
+ PrintAndLog("Decryption key loaded from file [ok]");
//Open the tagdump-file
FILE *f;
char filename[FILE_PATH_SIZE];
if(opt == 'f' && param_getstr(Cmd, 1, filename) > 0) {
- if ( (f = fopen(filename, "rb")) == NULL) {
+ f = fopen(filename, "rb");
+ if (!f) {
PrintAndLog("Could not find file %s", filename);
return 1;
}
if (have_debit_key) memcpy(tag_data+(3*8),div_key,8);
if (have_credit_key) memcpy(tag_data+(4*8),c_div_key,8);
- printf("Num of bytes: %u\n", gotBytes);
+ printf("Num of bytes: %zu\n", gotBytes);
// print the dump
printf("------+--+-------------------------+\n");
printf("------+--+-------------------------+\n");
while (i <= endblock){
uint8_t *blk = iclass_dump + (i * 8);
- printf("Block |%02X| %s|\n", i, sprint_hex(blk, 8) );
+ printf("Block |%02X| %s\n", i, sprint_hex_ascii(blk, 8) );
i++;
}
printf("------+--+-------------------------+\n");
return 0;
}
-/*
-uint64_t xorcheck(uint64_t sdiv,uint64_t hdiv) {
- uint64_t new_div = 0x00;
- new_div ^= sdiv;
- new_div ^= hdiv;
- return new_div;
-}
-
-uint64_t hexarray_to_uint64(uint8_t *key) {
- char temp[17];
- uint64_t uint_key;
- for (int i = 0;i < 8;i++)
- sprintf(&temp[(i *2)],"%02X",key[i]);
- temp[16] = '\0';
- if (sscanf(temp,"%016"llX,&uint_key) < 1)
- return 0;
- return uint_key;
-}
-*/
void HFiClassCalcDivKey(uint8_t *CSN, uint8_t *KEY, uint8_t *div_key, bool elite){
uint8_t keytable[128] = {0};
uint8_t key_index[8] = {0};
static int saveKeys(char *filename) {
FILE *f;
f = fopen(filename,"wb");
- if (f == NULL) {
+ if (!f) {
printf("error opening file %s\n",filename);
return 0;
}