]> cvs.zerfleddert.de Git - proxmark3-svn/commitdiff
FIX: "hf list legic" annotation now correct prints byte and value for "legic write...
authoriceman1001 <iceman@iuse.se>
Fri, 7 Oct 2016 18:23:57 +0000 (20:23 +0200)
committericeman1001 <iceman@iuse.se>
Fri, 7 Oct 2016 18:23:57 +0000 (20:23 +0200)
armsrc/legicrf.c
client/cmdhf.c

index 4b4a6ff6abfa0a1027a6fabead1e27f9708ce01a..a8cad9b7a2935d458b233f063fab96e061aea8b7 100644 (file)
@@ -419,11 +419,10 @@ bool legic_write_byte(uint16_t index, uint8_t byte, uint8_t addr_sz) {
        crc = legic4Crc(LEGIC_WRITE, index, byte, addr_sz+1);
 
        // send write command
-       uint32_t cmd;
-       cmd     = ((crc & 0xF ) << (addr_sz+1+8));  // CRC
-       cmd |= byte  << (addr_sz+1); // Data
-       cmd |= ((index & 0xFF) << 1);           // index
-    cmd |= LEGIC_WRITE;          // CMD
+       uint32_t cmd = LEGIC_WRITE;
+       cmd |= index << 1;                        // index
+       cmd |= byte  << (addr_sz+1);  // Data   
+       cmd     |= (crc & 0xF ) << (addr_sz+1+8);       // CRC
 
        /* Bitbang the response */
        SHORT_COIL;
@@ -470,7 +469,7 @@ bool legic_write_byte(uint16_t index, uint8_t byte, uint8_t addr_sz) {
 
 OUT: ;
        // log
-       uint8_t cmdbytes[] = {cmd_sz, isOK, BYTEx(steps, 0), BYTEx(steps, 1) };
+       uint8_t cmdbytes[] = {1, isOK, BYTEx(steps, 0), BYTEx(steps, 1) };
        LogTrace(cmdbytes, sizeof(cmdbytes), start, GET_TICKS, NULL, FALSE);
        return isOK;
 }
@@ -538,13 +537,12 @@ void LegicRfWriter(uint16_t offset, uint16_t len, uint8_t iv, uint8_t *data) {
 
     LED_B_ON();        
        while( len > 0 ) {
-               
-               if ( !legic_write_byte( len + offset + LOWERLIMIT, data[len-1], card.addrsize) ) {
-                       Dbprintf("operation failed @ 0x%03.3x", len-1);
+               --len;          
+               if ( !legic_write_byte( len + offset, data[len], card.addrsize) ) {
+                       Dbprintf("operation failed | %d | %d | %d", len + offset, len, data[len] );
                        isOK = 0;
                        goto OUT;
                }
-               --len;
                WDT_HIT();
        }
 OUT:
index bc8d2ecccd8f2a861c7b01fe9bcfef185c92f200..44ad970032e2047dd9aace83c72abf0a9ea2cf1c 100644 (file)
@@ -372,6 +372,7 @@ void annotateIso14443b(char *exp, size_t size, uint8_t* cmd, uint8_t cmdsize) {
 // Quite simpel tag
 void annotateLegic(char *exp, size_t size, uint8_t* cmd, uint8_t cmdsize){     
        uint8_t bitsend = cmd[0];       
+       uint8_t cmdBit = (cmd[1] & 1);
        switch (bitsend){
                case 7:
                        snprintf(exp, size, "IV 0x%02X", cmd[1]);
@@ -388,7 +389,7 @@ void annotateLegic(char *exp, size_t size, uint8_t* cmd, uint8_t cmdsize){
                }
                case 9:
                case 11: {
-                       uint8_t cmdBit = (cmd[1] & 1);
+
                        uint16_t address = (cmd[2] << 7) | cmd[1] >> 1;
                        
                        if (cmdBit == LEGIC_READ) 
@@ -398,6 +399,22 @@ void annotateLegic(char *exp, size_t size, uint8_t* cmd, uint8_t cmdsize){
                                snprintf(exp, size, "WRITE Byte(%d)", address);
                        break;
                }
+               case 21: {
+                       if (cmdBit == LEGIC_WRITE ) {
+                               uint16_t address = ((cmd[2] << 7) | cmd[1] >> 1) & 0xFF;
+                               uint8_t val = (cmd[3] & 1 ) << 7 | cmd[2] >> 1;
+                               snprintf(exp, size, "WRITE Byte(%d) %02X", address, val);
+                       }
+                       break;
+               }
+               case 23: {
+                       if (cmdBit == LEGIC_WRITE ) {
+                               uint16_t address = ((cmd[2] << 7) | cmd[1] >> 1) & 0x3FF;
+                               uint8_t val = (cmd[3] & 0x7 ) << 5 | cmd[2] >> 3;
+                               snprintf(exp, size, "WRITE Byte(%d) %02X", address, val);
+                       }
+                       break;
+               }
                case 12:
                default:
                        break;
Impressum, Datenschutz