Merge branch 'master' into fix_iclass_sim 862/head
authorpwpiwi <pwpiwi@users.noreply.github.com>
Tue, 8 Oct 2019 09:54:22 +0000 (11:54 +0200)
committerpwpiwi <pwpiwi@users.noreply.github.com>
Tue, 8 Oct 2019 09:54:22 +0000 (11:54 +0200)
CHANGELOG.md
armsrc/appmain.c
armsrc/iclass.c
armsrc/iclass.h
armsrc/lfsampling.c
armsrc/lfsampling.h
client/cmdhficlass.c
client/hid-flasher/usb_cmd.h
include/usb_cmd.h

index e95ccde61bdf8349dfda88745c00365c45dd8754..fdd499fe47a754c9c51d54aaa7a3bb1504ae020c 100644 (file)
@@ -15,7 +15,8 @@ This project uses the changelog in accordance with [keepchangelog](http://keepac
 - 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)
index 93f32f5fac72a6d29c5b1dd0507ffbc4d33a7f87..e3bd1fe0192648832cd5cad7521b15597bed3238 100644 (file)
@@ -998,7 +998,7 @@ void UsbPacketReceived(uint8_t *packet, int len)
        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);
@@ -1324,9 +1324,6 @@ void UsbPacketReceived(uint8_t *packet, int len)
                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;
index 0e42fb06c4fc55cdd1a9c8580007aa2c530cb786..2533d1f9d643a549c036499d8fdaa8fd4bcf8131 100644 (file)
@@ -1405,7 +1405,7 @@ void CodeIClassCommand(const uint8_t *cmd, int len) {
                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;
                                }
@@ -1696,6 +1696,7 @@ void ReaderIClass(uint8_t arg0) {
                        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;
@@ -1847,17 +1848,10 @@ void ReaderIClass_Replay(uint8_t arg0, uint8_t *MAC) {
                         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];
@@ -1867,7 +1861,7 @@ void iClass_Authentication(uint8_t *MAC) {
        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);
@@ -1888,6 +1882,7 @@ void iClass_ReadBlk(uint8_t blockno) {
        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) {
@@ -1958,6 +1953,7 @@ void iClass_WriteBlock(uint8_t blockNo, uint8_t *data) {
                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) {
index 828792c5264b86f49448b15f8cf726707596a945..3cbe79fb5d664463ca49da3e9f1a4ac9dc77a3f9 100644 (file)
@@ -25,9 +25,7 @@ extern void IClass_iso14443A_GetPublic(uint8_t arg0);
 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
index e53d02056e057c89aef2d01d04830ad087cd8ea2..e0764063da3d33c078bb854f1b939fe5bd8695ce 100644 (file)
@@ -39,17 +39,17 @@ void printConfig()
  * @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();
 }
index ea044f3ca55dbd3841fb134acd9ec24235fafc72..3c0fc93ea7923335f9786e39a5be0e4582f04f36 100644 (file)
@@ -1,5 +1,5 @@
-#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
@@ -45,7 +45,7 @@ uint32_t DoAcquisition_config(bool silent, int sample_size);
 * 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);
@@ -61,9 +61,9 @@ 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();
 
index 6f7cc4a49ffddf869f7f260d87e2fce737d1e51b..8173868694309168f5001f5146eb2fa0881673bd 100644 (file)
@@ -308,14 +308,13 @@ int CmdHFiClassELoad(const char *Cmd) {
        //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;
        }
@@ -338,8 +337,7 @@ int CmdHFiClassELoad(const char *Cmd) {
        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;
@@ -348,10 +346,10 @@ int CmdHFiClassELoad(const char *Cmd) {
        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;
index ae1f0586554b3c86707b09ee396315b4fda14ca9..5b2c1114869c3cc67db7ff66249f14c37bbb4c4d 100644 (file)
@@ -124,7 +124,6 @@ typedef struct {
 #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
index 934b0924030aacf8208e12fa05ed9e649fafe133..0802d2f165cfeb96028b93b3a6f45e1e76ccb039 100644 (file)
@@ -156,7 +156,6 @@ typedef struct{
 #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
Impressum, Datenschutz