mirror of
https://github.com/RfidResearchGroup/proxmark3.git
synced 2026-10-06 14:17:46 +00:00
Three ways this command reported a credential that was not on the tag. CmdIdteckDemod always passed its local raw[8] to demodIdteck, never NULL, so without --raw the command decoded a zeroed stack array rather than the graphbuffer and reported card id 0 every time. The help's own first example, plain `lf idteck demod`, has been doing that since --raw was added. It now passes NULL when no --raw is given, which is the signal path demodIdteck already has and lf idteck reader already uses. A raw frame whose first word is not 4944544B printed "No genuine IDTECK found" and then fell through and announced a tag anyway, with a card id read out of whatever was passed in. It now stops there. The signal path cannot reach this: detectIdteck matches the full 32 bit preamble, so lf search and lf idteck reader are unaffected. Finally the Idteck card id was packed into a 26 bit wiegand_message_t and run through HIDUnpack, which prints an HID H10301 line with a facility code and card number. That is not a decode of anything - the id is 24 bits, byte reversed off the wire, and Unpack_H10301 returns true for any 26 bit message, so the parity flag is the only hint and it reads ok for 25% of card ids by chance. Both committed Idteck traces show it: 4944544B351FBE4B prints FC: 37 CN: 57103 parity ( ok ), AC40E069 prints FC: 52 CN: 61472 parity ( fail ). Dropped, with the wiegand_formats.h include that came in with it. Added five offline regression tests. Three fail without this change, one per defect; lf search over every committed lf trace is byte identical before and after apart from the two removed H10301 lines. Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>