- }
- if(simType > 2)
- {
- PrintAndLog("Undefined simptype %d", simType);
- return 1;
- }
- uint8_t numberOfCSNs=0;
-
- if(simType == 2)
- {
- UsbCommand c = {CMD_SIMULATE_TAG_ICLASS, {simType,63}};
- UsbCommand resp = {0};
-
- uint8_t csns[64] = {
- 0x00,0x0B,0x0F,0xFF,0xF7,0xFF,0x12,0xE0 ,
- 0x00,0x13,0x94,0x7e,0x76,0xff,0x12,0xe0 ,
- 0x2a,0x99,0xac,0x79,0xec,0xff,0x12,0xe0 ,
- 0x17,0x12,0x01,0xfd,0xf7,0xff,0x12,0xe0 ,
- 0xcd,0x56,0x01,0x7c,0x6f,0xff,0x12,0xe0 ,
- 0x4b,0x5e,0x0b,0x72,0xef,0xff,0x12,0xe0 ,
- 0x00,0x73,0xd8,0x75,0x58,0xff,0x12,0xe0 ,
- 0x0c,0x90,0x32,0xf3,0x5d,0xff,0x12,0xe0 };
-
- memcpy(c.d.asBytes, csns, 64);
-
- SendCommand(&c);
- if (!WaitForResponseTimeout(CMD_ACK, &resp, -1)) {
- PrintAndLog("Command timed out");
- return 0;
- }
-
- uint8_t num_mac_responses = resp.arg[1];
- PrintAndLog("Mac responses: %d MACs obtained (should be 8)", num_mac_responses);
-
- size_t datalen = 8*24;
- /*
- * Now, time to dump to file. We'll use this format:
- * <8-byte CSN><8-byte CC><4 byte NR><4 byte MAC>....
- * So, it should wind up as
- * 8 * 24 bytes.
- *
- * The returndata from the pm3 is on the following format
- * <4 byte NR><4 byte MAC>
- * CC are all zeroes, CSN is the same as was sent in
- **/
- void* dump = malloc(datalen);
- memset(dump,0,datalen);//<-- Need zeroes for the CC-field
- uint8_t i = 0;
- for(i = 0 ; i < 8 ; i++)
- {
- memcpy(dump+i*24, csns+i*8,8); //CSN
- //8 zero bytes here...
- //Then comes NR_MAC (eight bytes from the response)
- memcpy(dump+i*24+16,resp.d.asBytes+i*8,8);
-
- }
- /** Now, save to dumpfile **/
- saveFile("iclass_mac_attack", "bin", dump,datalen);
- free(dump);
- }else
- {
- UsbCommand c = {CMD_SIMULATE_TAG_ICLASS, {simType,numberOfCSNs}};
- memcpy(c.d.asBytes, CSN, 8);
- SendCommand(&c);
- }