\r
#include "mifaresniff.h"\r
#include "apps.h"\r
+#include "proxmark3.h"\r
+#include "util.h"\r
+#include "string.h"\r
+#include "iso14443crc.h"\r
+#include "iso14443a.h"\r
+#include "crapto1/crapto1.h"\r
+#include "mifareutil.h"\r
+#include "common.h"\r
+\r
\r
static int sniffState = SNF_INIT;\r
static uint8_t sniffUIDType;\r
-static uint8_t sniffUID[8];\r
-static uint8_t sniffATQA[2];\r
+static uint8_t sniffUID[8] = {0x00};\r
+static uint8_t sniffATQA[2] = {0x00};\r
static uint8_t sniffSAK;\r
-static uint8_t sniffBuf[16];\r
+static uint8_t sniffBuf[16] = {0x00};\r
static uint32_t timerData = 0;\r
\r
\r
return FALSE;\r
}\r
\r
-bool RAMFUNC MfSniffLogic(const uint8_t *data, uint16_t len, uint32_t parity, uint16_t bitCnt, bool reader) {\r
+bool RAMFUNC MfSniffLogic(const uint8_t *data, uint16_t len, uint8_t *parity, uint16_t bitCnt, bool reader) {\r
\r
if (reader && (len == 1) && (bitCnt == 7)) { // reset on 7-Bit commands from reader\r
sniffState = SNF_INIT;\r
}\r
case SNF_ANTICOL2:{\r
if ((!reader) && (len == 5) && ((data[0] ^ data[1] ^ data[2] ^ data[3]) == data[4])) { // CL2 UID \r
- memcpy(sniffUID, data, 4);\r
+ memcpy(sniffUID, sniffUID+4, 3);\r
+ memcpy(sniffUID+3, data, 4);\r
sniffUIDType = SNF_UID_7;\r
sniffState = SNF_UID2;\r
}\r
sniffBuf[11] = sniffSAK;\r
sniffBuf[12] = 0xFF;\r
sniffBuf[13] = 0xFF;\r
- LogTrace(sniffBuf, 14, 0, parity, true);\r
+ LogTrace(sniffBuf, 14, 0, 0, NULL, TRUE);\r
} // intentionally no break;\r
case SNF_CARD_CMD:{ \r
- LogTrace(data, len, 0, parity, true);\r
+ LogTrace(data, len, 0, 0, NULL, TRUE);\r
sniffState = SNF_CARD_RESP;\r
timerData = GetTickCount();\r
break;\r
}\r
case SNF_CARD_RESP:{\r
- LogTrace(data, len, 0, parity, false);\r
+ LogTrace(data, len, 0, 0, NULL, FALSE);\r
sniffState = SNF_CARD_CMD;\r
timerData = GetTickCount();\r
break;\r
}\r
\r
bool RAMFUNC MfSniffSend(uint16_t maxTimeoutMs) {\r
- if (traceLen && (GetTickCount() > timerData + maxTimeoutMs)) {\r
+ if (BigBuf_get_traceLen() && (GetTickCount() > timerData + maxTimeoutMs)) {\r
return intMfSniffSend();\r
}\r
return FALSE;\r
bool intMfSniffSend() {\r
\r
int pckSize = 0;\r
- int pckLen = traceLen;\r
+ int pckLen = BigBuf_get_traceLen();\r
int pckNum = 0;\r
-\r
+ uint8_t *trace = BigBuf_get_addr();\r
+ \r
FpgaDisableSscDma();\r
while (pckLen > 0) {\r
pckSize = MIN(USB_CMD_DATA_SIZE, pckLen);\r
LED_B_ON();\r
- cmd_send(CMD_ACK, 1, pckSize, pckNum, trace + traceLen - pckLen, pckSize);\r
+ cmd_send(CMD_ACK, 1, BigBuf_get_traceLen(), pckSize, trace + BigBuf_get_traceLen() - pckLen, pckSize);\r
LED_B_OFF();\r
\r
pckLen -= pckSize;\r
cmd_send(CMD_ACK,2,0,0,0,0);\r
LED_B_OFF();\r
\r
- iso14a_clear_trace();\r
+ clear_trace();\r
\r
return TRUE;\r
}\r