#include "loclass/ikeys.h"
#include "loclass/elite_crack.h"
#include "loclass/fileutils.h"
+#include "protocols.h"
static int CmdHelp(const char *Cmd);
uint8_t CSN[8] = {0, 0, 0, 0, 0, 0, 0, 0};
if (strlen(Cmd)<1) {
- usage_hf_iclass_sim();
+ return usage_hf_iclass_sim();
}
-
- simType = param_get8(Cmd, 0);
+ simType = param_get8ex(Cmd, 0, 0, 10);
if(simType == 0)
{
PrintAndLog("Hash0, a.k.a diversified key, that is computed using Ksel and stored in the card (Block 3):");
printvar("Div key", div_key, 8);
printvar("CC_NR:",CCNR,12);
- doMAC(CCNR,12,div_key, MAC);
+ doMAC(CCNR,div_key, MAC);
printvar("MAC", MAC, 4);
uint8_t iclass_data[32000] = {0};
fseek(f, 0, SEEK_SET);
uint8_t *dump = malloc(fsize);
+
+
size_t bytes_read = fread(dump, 1, fsize, f);
fclose(f);
+ printIclassDumpInfo(dump);
//Validate
if (bytes_read < fsize)
PrintAndLog("OBS! In order to use this function, the file 'iclass_decryptionkey.bin' must reside");
PrintAndLog("in the working directory. The file should be 16 bytes binary data");
PrintAndLog("");
- PrintAndLog("example: hf iclass decrypt tagdump_12312342343.bin");
+ PrintAndLog("example: hf iclass decrypt f tagdump_12312342343.bin");
PrintAndLog("");
PrintAndLog("OBS! This is pretty stupid implementation, it tries to decrypt every block after block 6. ");
PrintAndLog("Correct behaviour would be to decrypt only the application areas where the key is valid,");
diversifyKey(CSN,KEY, div_key);
PrintAndLog("Div Key: %s",sprint_hex(div_key,8));
- doMAC(CCNR, 12,div_key, MAC);
+ doMAC(CCNR, div_key, MAC);
UsbCommand c2 = {CMD_ICLASS_ISO14443A_WRITE, {readerType,blockNo}};
memcpy(c2.d.asBytes, bldata, 8);
#include <stdio.h>
#include <strings.h>
+#include <string.h>
#include <stdint.h>
#include <stdarg.h>
+#include "protocols.h"
+#ifndef ON_DEVICE
+#include "ui.h"
+#define prnt PrintAndLog
+#endif
+
typedef struct {
}picopass_hdr;
-#define FUSE_FPERS 0x80
-#define FUSE_CODING1 0x40
-#define FUSE_CODING0 0x20
-#define FUSE_CRYPT1 0x10
-#define FUSE_CRYPT0 0x08
-#define FUSE_FPROD1 0x04
-#define FUSE_FPROD0 0x02
-#define FUSE_RA 0x01
//#define prnt printf
-void prnt(char *fmt,...)
+/*void prnt(char *fmt,...)
{
va_list argptr;
va_start(argptr, fmt);
va_end(argptr);
printf("\n");
}
-
+*/
uint8_t isset(uint8_t val, uint8_t mask)
{
return (val & mask);
mem_config(hdr);
applimit_config(hdr);
}
+void printIclassDumpInfo(uint8_t* iclass_dump)
+{
+// picopass_hdr hdr;
+// memcpy(&hdr, iclass_dump, sizeof(picopass_hdr));
+ print_picopass_info((picopass_hdr *) iclass_dump);
+}
+
+/*
void test()
{
picopass_hdr hdr = {0x27,0xaf,0x48,0x01,0xf9,0xff,0x12,0xe0,0x12,0xff,0xff,0xff,0x7f,0x1f,0xff,0x3c};
test();
return 0;
}
+*/