- Wrong UID at HitagS simulation
- `hf 15 sim` now works as expected (piwi)
- `hf mf chk t` save to emulator memory now works as expected (mwalker)
- - Fix `hf mf sim` - wrong access rights to write key B in trailer (@McEloff)
+- Fix `hf mf sim` - wrong access rights to write key B in trailer (@McEloff)
+- allow files > 512Bytes in 'hf iclass eload' (@Sherhannn79)
### Added
- Added to `hf 14a apdu` print apdu and compose apdu (@merlokk)
switch(c->cmd) {
#ifdef WITH_LF
case CMD_SET_LF_SAMPLING_CONFIG:
- setSamplingConfig((sample_config *) c->d.asBytes);
+ setSamplingConfig(c->d.asBytes);
break;
case CMD_ACQUIRE_RAW_ADC_SAMPLES_125K:
cmd_send(CMD_ACK,SampleLF(c->arg[0], c->arg[1]),0,0,0,0);
case CMD_ICLASS_WRITEBLOCK:
iClass_WriteBlock(c->arg[0], c->d.asBytes);
break;
- case CMD_ICLASS_READCHECK: // auth step 1
- iClass_ReadCheck(c->arg[0], c->arg[1]);
- break;
case CMD_ICLASS_READBLOCK:
iClass_ReadBlk(c->arg[0]);
break;
for (j = 0; j < 4; j++) {
for (k = 0; k < 4; k++) {
if (k == (b & 3)) {
- ToSend[++ToSendMax] = 0xf0;
+ ToSend[++ToSendMax] = 0x0f;
} else {
ToSend[++ToSendMax] = 0x00;
}
if ( (result_status ^ FLAG_ICLASS_READER_CSN ^ flagReadConfig ^ flagReadCC ^ flagReadAA) == 0) {
cmd_send(CMD_ACK, result_status, 0, 0, card_data, sizeof(card_data));
if (abort_after_read) {
+ FpgaWriteConfWord(FPGA_MAJOR_MODE_OFF);
LED_A_OFF();
LED_B_OFF();
return;
card_data,
0);
+ FpgaWriteConfWord(FPGA_MAJOR_MODE_OFF);
LED_A_OFF();
}
-void iClass_ReadCheck(uint8_t blockNo, uint8_t keyType) {
- uint8_t readcheck[] = { keyType, blockNo };
- uint8_t resp[] = {0,0,0,0,0,0,0,0};
- size_t isOK = 0;
- isOK = sendCmdGetResponseWithRetries(readcheck, sizeof(readcheck), resp, sizeof(resp), 6);
- cmd_send(CMD_ACK,isOK, 0, 0, 0, 0);
-}
-
void iClass_Authentication(uint8_t *MAC) {
uint8_t check[] = { ICLASS_CMD_CHECK_KD, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 };
uint8_t resp[ICLASS_BUFFER_SIZE];
cmd_send(CMD_ACK,isOK, 0, 0, 0, 0);
}
-bool iClass_ReadBlock(uint8_t blockNo, uint8_t *readdata) {
+static bool iClass_ReadBlock(uint8_t blockNo, uint8_t *readdata) {
uint8_t readcmd[] = {ICLASS_CMD_READ_OR_IDENTIFY, blockNo, 0x00, 0x00}; //0x88, 0x00 // can i use 0C?
char bl = blockNo;
uint16_t rdCrc = iclass_crc16(&bl, 1);
bool isOK = false;
isOK = iClass_ReadBlock(blockno, readblockdata);
cmd_send(CMD_ACK, isOK, 0, 0, readblockdata, 8);
+ FpgaWriteConfWord(FPGA_MAJOR_MODE_OFF);
}
void iClass_Dump(uint8_t blockno, uint8_t numblks) {
Dbprintf("Write block [%02x] failed", blockNo);
}
cmd_send(CMD_ACK, isOK, 0, 0, 0, 0);
+ FpgaWriteConfWord(FPGA_MAJOR_MODE_OFF);
}
void iClass_Clone(uint8_t startblock, uint8_t endblock, uint8_t *data) {
extern void iClass_Authentication(uint8_t *MAC);
extern void iClass_WriteBlock(uint8_t blockNo, uint8_t *data);
extern void iClass_ReadBlk(uint8_t blockNo);
-extern bool iClass_ReadBlock(uint8_t blockNo, uint8_t *readdata);
extern void iClass_Dump(uint8_t blockno, uint8_t numblks);
extern void iClass_Clone(uint8_t startblock, uint8_t endblock, uint8_t *data);
-extern void iClass_ReadCheck(uint8_t blockNo, uint8_t keyType);
#endif
* @brief setSamplingConfig
* @param sc
*/
-void setSamplingConfig(sample_config *sc)
-{
- if(sc->divisor != 0) config.divisor = sc->divisor;
- if(sc->bits_per_sample!= 0) config.bits_per_sample= sc->bits_per_sample;
- if(sc->decimation!= 0) config.decimation= sc->decimation;
- if(sc->trigger_threshold != -1) config.trigger_threshold= sc->trigger_threshold;
- if(sc->samples_to_skip != -1) config.samples_to_skip = sc->samples_to_skip;
+void setSamplingConfig(uint8_t *config_data) {
+ sample_config *sc = (sample_config *)config_data;
+ if (sc->divisor != 0) config.divisor = sc->divisor;
+ if (sc->bits_per_sample != 0) config.bits_per_sample = sc->bits_per_sample;
+ if (sc->decimation != 0) config.decimation = sc->decimation;
+ if (sc->trigger_threshold != -1) config.trigger_threshold = sc->trigger_threshold;
+ if (sc->samples_to_skip != -1) config.samples_to_skip = sc->samples_to_skip;
config.averaging= sc->averaging;
- if(config.bits_per_sample > 8) config.bits_per_sample = 8;
- if(config.decimation < 1) config.decimation = 1;
+ if (config.bits_per_sample > 8) config.bits_per_sample = 8;
+ if (config.decimation < 1) config.decimation = 1;
printConfig();
}
-#ifndef LFSAMPLING_H
-#define LFSAMPLING_H
+#ifndef LFSAMPLING_H__
+#define LFSAMPLING_H__
/**
* acquisition of Cotag LF signal. Similar to other LF, since the Cotag has such long datarate RF/384
* Setup the FPGA to listen for samples. This method downloads the FPGA bitstream
* if not already loaded, sets divisor and starts up the antenna.
* @param divisor : 1, 88> 255 or negative ==> 134.8 KHz
-* 0 or 95 ==> 125 KHz
+* 0 or 95 ==> 125 KHz
*
**/
void LFSetupFPGAForADC(int divisor, bool lf_field);
* @brief setSamplingConfig
* @param sc
*/
-void setSamplingConfig(sample_config *sc);
+void setSamplingConfig(uint8_t *config_data);
-sample_config * getSamplingConfig();
+sample_config *getSamplingConfig();
void printConfig();
//File handling and reading
FILE *f;
char filename[FILE_PATH_SIZE];
- if(opt == 'f' && param_getstr(Cmd, 1, filename, sizeof(filename)) > 0)
- {
+ if (opt == 'f' && param_getstr(Cmd, 1, filename, sizeof(filename)) > 0) {
f = fopen(filename, "rb");
- }else{
+ } else {
return hf_iclass_eload_usage();
}
- if(!f) {
+ if (!f) {
PrintAndLog("Failed to read from file '%s'", filename);
return 1;
}
printIclassDumpInfo(dump);
//Validate
- if (bytes_read < fsize)
- {
+ if (bytes_read < fsize) {
prnlog("Error, could only read %d bytes (should be %d)",bytes_read, fsize );
free(dump);
return 1;
uint32_t bytes_sent = 0;
uint32_t bytes_remaining = bytes_read;
- while(bytes_remaining > 0){
+ while (bytes_remaining > 0) {
uint32_t bytes_in_packet = MIN(USB_CMD_DATA_SIZE, bytes_remaining);
UsbCommand c = {CMD_ICLASS_EML_MEMSET, {bytes_sent,bytes_in_packet,0}};
- memcpy(c.d.asBytes, dump, bytes_in_packet);
+ memcpy(c.d.asBytes, dump+bytes_sent, bytes_in_packet);
SendCommand(&c);
bytes_remaining -= bytes_in_packet;
bytes_sent += bytes_in_packet;
#define CMD_WRITER_LEGIC_RF 0x0389
#define CMD_EPA_PACE_COLLECT_NONCE 0x038A
-#define CMD_ICLASS_READCHECK 0x038F
#define CMD_ICLASS_CLONE 0x0390
#define CMD_ICLASS_DUMP 0x0391
#define CMD_SNOOP_ICLASS 0x0392
#define CMD_EPA_PACE_COLLECT_NONCE 0x038A
#define CMD_EPA_PACE_REPLAY 0x038B
-#define CMD_ICLASS_READCHECK 0x038F
#define CMD_ICLASS_CLONE 0x0390
#define CMD_ICLASS_DUMP 0x0391
#define CMD_SNOOP_ICLASS 0x0392