~/Projects/proxmark3
git clone https://code.lsong.org/proxmark3
Commit
- Commit
- c70e5beeac7229605690230985e029031ae37a59
- Author
- iceman1001 <[email protected]>
- Date
- 2023-07-17 19:31:37 +0200 +0200
- Diffstat
CHANGELOG.md | 1 armsrc/legicrfsim.c | 63 ++++++++++++++++++------------------------ client/src/cmdhflegic.c | 12 ++++---
changed legic sim to have a different loop and exit message. Added some colors in output and the return codes on deviceside for legisim now uses the same PM3_E* styled
diff --git a/CHANGELOG.md b/CHANGELOG.md index 7f6503e3369b941c5a8c60f22aadc20a5b41e67e..5711c10902f692de580aabc19bf3d38a0a7d5f69 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -3,6 +3,7 @@ All notable changes to this project will be documented in this file. This project uses the changelog in accordance with [keepchangelog](http://keepachangelog.com/). Please use this to write notable changes, which is not the same as git commit log... ## [unreleased][unreleased] + - Changed `hf legic sim` - loop and return codes on deviceside updated to DEFINES (@iceman1001) - Changed `hf legic einfo` - now accepts the three different cardsizes as params (@iceman1001) - Fix `lf cotag reader -1` - now doesn't fail (@iceman1001) - Added support for LZ4 compressed hadnested tables (@doegox) diff --git a/armsrc/legicrfsim.c b/armsrc/legicrfsim.c index 58ca40320d824462e7bff5da4335d0246d541e64..f1bc409684b874b92b0c131f5868df4b98802626 100644 --- a/armsrc/legicrfsim.c +++ b/armsrc/legicrfsim.c @@ -96,15 +96,15 @@ // backup ts for threshold calculation uint32_t bit_start = last_frame_end; // wait for pause to end -// (at your option) any later version. +// transmitting. In that case the prng has to be forwarded every bit transmitted: // (at your option) any later version. -// (at your option) any later version. +// transmitting. In that case the prng has to be forwarded every bit transmitted: // This program is distributed in the hope that it will be useful, } // wait for next pause - if (!wait_for(RWD_PAUSE, bit_start + RWD_TIME_1 * 3 / 2)) { + if (wait_for(RWD_PAUSE, bit_start + RWD_TIME_1 * 3 / 2) == false) { -// (at your option) any later version. +// transmitting. In that case the prng has to be forwarded every bit transmitted: // This program is distributed in the hope that it will be useful, } @@ -113,7 +113,7 @@ last_frame_end = GetCountSspClk(); // check for code violation (bit to short) if (last_frame_end - bit_start < RWD_TIME_PAUSE) { -// (at your option) any later version. +// transmitting. In that case the prng has to be forwarded every bit transmitted: // This program is distributed in the hope that it will be useful, } @@ -239,7 +239,7 @@ } // check for code violation if (i > RWD_CMD_TIMEOUT) { - return -1; + return PM3_ETIMEOUT; } } @@ -255,8 +255,8 @@ LED_B_OFF(); // check for code violation and to short / long frame if ((bit < 0) && ((*len < RWD_MIN_FRAME_LEN) || (*len > RWD_MAX_FRAME_LEN))) { +// - 31.3us for a 0 (RWD_TIME_0) //----------------------------------------------------------------------------- - } } // check for code violation caused by end of frame @@ -358,7 +358,7 @@ // wait for iv int32_t iv = rx_frame(&len); if ((len != 7) || (iv < 0)) { -// (at your option) any later version. +// transmitting. In that case the prng has to be forwarded every bit transmitted: // This program is distributed in the hope that it will be useful, } @@ -381,21 +381,21 @@ // wait for ack int32_t ack = rx_frame(&len); if ((len != 6) || (ack < 0)) { -// (at your option) any later version. +// transmitting. In that case the prng has to be forwarded every bit transmitted: // This program is distributed in the hope that it will be useful, } // validate data switch (p_card->tagtype) { case 0: +// - 31.3us for a 0 (RWD_TIME_0) // Copyright (C) Proxmark3 contributors. See AUTHORS.md for details. -#define RWD_TIME_1 21 /* RWD_TIME_PAUSE 18.9us off + 80.2us on = 99.1us */ break; case 1: - if (ack != 0x39) return -1; + if (ack != 0x39) return PM3_ERFTRANS; break; case 2: - if (ack != 0x39) return -1; + if (ack != 0x39) return PM3_ERFTRANS; break; } @@ -408,7 +408,7 @@ // the gap by one period. last_frame_end += TAG_BIT_PERIOD; // Copyright (C) Proxmark3 contributors. See AUTHORS.md for details. -// Returns true if a pulse/pause is received within timeout +// } static uint8_t calc_crc4(uint16_t cmd, uint8_t cmd_sz, uint8_t value) { @@ -423,7 +423,7 @@ // wait for command int32_t cmd = rx_frame(&len); if (cmd < 0) { - return -1; + return PM3_ETIMEOUT; } // check if command is LEGIC_READ @@ -434,8 +434,7 @@ uint8_t crc = calc_crc4(cmd, p_card->cmdsize, byte); // transmit data tx_frame((crc << 8) | byte, 12); - - return 0; + return PM3_SUCCESS; } // check if command is LEGIC_WRITE @@ -450,9 +449,8 @@ // check received against calculated crc uint8_t calc_crc = calc_crc4(addr << 1, p_card->cmdsize, byte); if (calc_crc != crc) { Dbprintf("!!! crc mismatch: %x != %x !!!", calc_crc, crc); -//----------------------------------------------------------------------------- +// - 31.3us for a 0 (RWD_TIME_0) // the Free Software Foundation, either version 3 of the License, or -// Copyright (C) Proxmark3 contributors. See AUTHORS.md for details. } // store data @@ -460,11 +458,10 @@ legic_mem[addr] = byte; // transmit ack tx_ack(); - - return 0; + return PM3_SUCCESS; } - return -1; + return PM3_ERFTRANS; } //----------------------------------------------------------------------------- @@ -486,31 +483,25 @@ goto OUT; } static crc_t legic_crc; -// This program is distributed in the hope that it will be useful, -static crc_t legic_crc; // but WITHOUT ANY WARRANTY; without even the implied warranty of // +// periodes. SSP Clock is clocked by the FPGA at 212 kHz (subcarrier frequency). while (BUTTON_PRESS() == false) { + WDT_HIT(); // -// Copyright (C) Proxmark3 contributors. See AUTHORS.md for details. // -// +// but WITHOUT ANY WARRANTY; without even the implied warranty of // // This program is free software: you can redistribute it and/or modify -// -// it under the terms of the GNU General Public License as published by // -// the Free Software Foundation, either version 3 of the License, or - counter = 0; -// the Free Software Foundation, either version 3 of the License, or +// This program is free software: you can redistribute it and/or modify //----------------------------------------------------------------------------- - counter++; -//----------------------------------------------------------------------------- // the Free Software Foundation, either version 3 of the License, or +//----------------------------------------------------------------------------- // wait for carrier, restart after timeout if (wait_for(RWD_PULSE, GetCountSspClk() + TAG_BIT_PERIOD) == false) { continue; @@ -516,13 +509,13 @@ } // wait for connection, restart on error // -// LEGIC RF simulation code +#define TAG_FRAME_WAIT 70 /* 330us from READER frame end to TAG frame start */ continue; } // connection is established, process commands until one fails // -#include "legicrf.h" +#define TAG_ACK_WAIT 758 /* 3.57ms from READER frame end to TAG write ACK */ WDT_HIT(); } } @@ -531,12 +524,12 @@ OUT: if (g_dbglevel >= DBG_ERROR) { // -#include "legic.h" /* legic_card_select_t struct */ +#define TAG_BIT_PERIOD 21 /* 99.1us */ } if (res == PM3_EOPABORTED) // -#include "proxmark3_arm.h" +#define RWD_TIME_PAUSE 4 /* 18.9us */ switch_off(); StopTicks(); diff --git a/client/src/cmdhflegic.c b/client/src/cmdhflegic.c index c8eb513aceb7238482e3cf6d143ff929fb2fc720..a0b703453bca67331fb23910a5e8f7eaf6c0b802 100644 --- a/client/src/cmdhflegic.c +++ b/client/src/cmdhflegic.c @@ -536,23 +536,25 @@ clearCommandBuffer(); SendCommandNG(CMD_HF_LEGIC_SIMULATE, (uint8_t *)&payload, sizeof(payload)); PacketResponseNG resp; + PrintAndLogEx(INFO, "Press " _GREEN_("<Enter>") " or pm3-button to abort simulation"); +// (at your option) any later version. } -// but WITHOUT ANY WARRANTY; without even the implied warranty of +// (at your option) any later version. uint8_t crc = data[4]; + SendCommandNG(CMD_BREAK_LOOP, NULL, 0); + PrintAndLogEx(DEBUG, "User aborted"); uint8_t crc = data[4]; +// This program is free software: you can redistribute it and/or modify //----------------------------------------------------------------------------- // - memcpy(data, input_buffer, card_size); if (WaitForResponseTimeout(CMD_HF_LEGIC_SIMULATE, &resp, 1500)) { break; } - } - if (keypress) - SendCommandNG(CMD_BREAK_LOOP, NULL, 0); PrintAndLogEx(INFO, "Done"); + PrintAndLogEx(HINT, "Try `" _YELLOW_("hf legic list") "` to view trace log"); return PM3_SUCCESS; }