projects
/
proxmark3-svn
/ blobdiff
commit
grep
author
committer
pickaxe
?
search:
re
summary
|
shortlog
|
log
|
commit
|
commitdiff
|
tree
raw
|
inline
| side by side
Fixed so build scripts utilises the git version
[proxmark3-svn]
/
armsrc
/
mifaresniff.c
diff --git
a/armsrc/mifaresniff.c
b/armsrc/mifaresniff.c
index f95ca3dfc5e0f919a325be7bcc2e4adde3bf2d24..3e5570f9ce6e575ecd1b19f2f696b30d42b94b94 100644
(file)
--- a/
armsrc/mifaresniff.c
+++ b/
armsrc/mifaresniff.c
@@
-17,104
+17,96
@@
static uint8_t sniffUID[8];
static uint8_t sniffATQA[2];
\r
static uint8_t sniffSAK;
\r
static uint8_t sniffBuf[16];
\r
static uint8_t sniffATQA[2];
\r
static uint8_t sniffSAK;
\r
static uint8_t sniffBuf[16];
\r
-static
in
t timerData = 0;
\r
+static
uint32_
t timerData = 0;
\r
\r
\r
\r
\r
-int MfSniffInit(void){
\r
- rsamples = 0;
\r
+bool MfSniffInit(void){
\r
memset(sniffUID, 0x00, 8);
\r
memset(sniffATQA, 0x00, 2);
\r
sniffSAK = 0;
\r
sniffUIDType = SNF_UID_4;
\r
\r
memset(sniffUID, 0x00, 8);
\r
memset(sniffATQA, 0x00, 2);
\r
sniffSAK = 0;
\r
sniffUIDType = SNF_UID_4;
\r
\r
- return
0
;
\r
+ return
FALSE
;
\r
}
\r
\r
}
\r
\r
-int MfSniffEnd(void){
\r
-// UsbCommand ack = {CMD_ACK, {0, 0, 0}};
\r
-
\r
+bool MfSniffEnd(void){
\r
LED_B_ON();
\r
LED_B_ON();
\r
- cmd_send(CMD_ACK,0,0,0,0,0);
\r
-// UsbSendPacket((uint8_t *)&ack, sizeof(UsbCommand));
\r
+ cmd_send(CMD_ACK,0,0,0,0,0);
\r
LED_B_OFF();
\r
\r
LED_B_OFF();
\r
\r
- return
0
;
\r
+ return
FALSE
;
\r
}
\r
\r
}
\r
\r
-
int RAMFUNC MfSniffLogic(const uint8_t * data, int len, uint32_t parity, int bitCnt, int
reader) {
\r
+
bool RAMFUNC MfSniffLogic(const uint8_t *data, uint16_t len, uint32_t parity, uint16_t bitCnt, bool
reader) {
\r
\r
\r
- if (
(len == 1) && (bitCnt = 9) && (data[0] > 0x0F)) {
\r
+ if (
reader && (len == 1) && (bitCnt == 7)) { // reset on 7-Bit commands from reader
\r
sniffState = SNF_INIT;
\r
}
\r
\r
switch (sniffState) {
\r
case SNF_INIT:{
\r
sniffState = SNF_INIT;
\r
}
\r
\r
switch (sniffState) {
\r
case SNF_INIT:{
\r
- if ((
reader) && (len == 1) && (bitCnt == 9) && ((data[0] == 0x26) || (data[0] == 0x52))) {
\r
+ if ((
len == 1) && (reader) && (bitCnt == 7) ) { // REQA or WUPA from reader
\r
sniffUIDType = SNF_UID_4;
\r
memset(sniffUID, 0x00, 8);
\r
memset(sniffATQA, 0x00, 2);
\r
sniffSAK = 0;
\r
sniffUIDType = SNF_UID_4;
\r
memset(sniffUID, 0x00, 8);
\r
memset(sniffATQA, 0x00, 2);
\r
sniffSAK = 0;
\r
-
\r
sniffState = SNF_WUPREQ;
\r
}
\r
break;
\r
}
\r
case SNF_WUPREQ:{
\r
sniffState = SNF_WUPREQ;
\r
}
\r
break;
\r
}
\r
case SNF_WUPREQ:{
\r
- if ((!reader) && (len == 2)) {
\r
+ if ((!reader) && (len == 2)) {
// ATQA from tag
\r
memcpy(sniffATQA, data, 2);
\r
memcpy(sniffATQA, data, 2);
\r
-
\r
sniffState = SNF_ATQA;
\r
}
\r
break;
\r
}
\r
case SNF_ATQA:{
\r
sniffState = SNF_ATQA;
\r
}
\r
break;
\r
}
\r
case SNF_ATQA:{
\r
- if ((reader) && (len == 2) && (data[0] == 0x93) && (data[1] == 0x20)) {
\r
+ if ((reader) && (len == 2) && (data[0] == 0x93) && (data[1] == 0x20)) {
// Select ALL from reader
\r
sniffState = SNF_ANTICOL1;
\r
}
\r
break;
\r
}
\r
case SNF_ANTICOL1:{
\r
sniffState = SNF_ANTICOL1;
\r
}
\r
break;
\r
}
\r
case SNF_ANTICOL1:{
\r
- if ((!reader) && (len == 5) && ((data[0] ^ data[1] ^ data[2] ^ data[3]) == data[4])) {
\r
+ if ((!reader) && (len == 5) && ((data[0] ^ data[1] ^ data[2] ^ data[3]) == data[4])) {
// UID from tag (CL1)
\r
memcpy(sniffUID + 3, data, 4);
\r
memcpy(sniffUID + 3, data, 4);
\r
-
\r
sniffState = SNF_UID1;
\r
}
\r
break;
\r
}
\r
case SNF_UID1:{
\r
sniffState = SNF_UID1;
\r
}
\r
break;
\r
}
\r
case SNF_UID1:{
\r
- if ((reader) && (len == 9) && (data[0] == 0x93) && (data[1] == 0x70) && (CheckCrc14443(CRC_14443_A, data, 9))) {
\r
+ if ((reader) && (len == 9) && (data[0] == 0x93) && (data[1] == 0x70) && (CheckCrc14443(CRC_14443_A, data, 9))) {
// Select 4 Byte UID from reader
\r
sniffState = SNF_SAK;
\r
}
\r
break;
\r
}
\r
case SNF_SAK:{
\r
sniffState = SNF_SAK;
\r
}
\r
break;
\r
}
\r
case SNF_SAK:{
\r
- if ((!reader) && (len == 3) && (CheckCrc14443(CRC_14443_A, data, 3))) {
\r
+ if ((!reader) && (len == 3) && (CheckCrc14443(CRC_14443_A, data, 3))) {
// SAK from card?
\r
sniffSAK = data[0];
\r
sniffSAK = data[0];
\r
- if (sniffUID[3] == 0x88) {
\r
+ if (sniffUID[3] == 0x88) {
// CL2 UID part to be expected
\r
sniffState = SNF_ANTICOL2;
\r
sniffState = SNF_ANTICOL2;
\r
- } else {
\r
+ } else {
// select completed
\r
sniffState = SNF_CARD_IDLE;
\r
}
\r
}
\r
break;
\r
}
\r
case SNF_ANTICOL2:{
\r
sniffState = SNF_CARD_IDLE;
\r
}
\r
}
\r
break;
\r
}
\r
case SNF_ANTICOL2:{
\r
- if ((!reader) && (len == 5) && ((data[0] ^ data[1] ^ data[2] ^ data[3]) == data[4])) {
\r
- memcpy(sniffUID, data, 4);
\r
+ if ((!reader) && (len == 5) && ((data[0] ^ data[1] ^ data[2] ^ data[3]) == data[4])) { // CL2 UID
\r
+ memcpy(sniffUID, sniffUID+4, 3);
\r
+ memcpy(sniffUID+3, data, 4);
\r
sniffUIDType = SNF_UID_7;
\r
sniffUIDType = SNF_UID_7;
\r
-
\r
sniffState = SNF_UID2;
\r
sniffState = SNF_UID2;
\r
- }
\r
+
}
\r
break;
\r
}
\r
case SNF_UID2:{
\r
break;
\r
}
\r
case SNF_UID2:{
\r
- if ((reader) && (len == 9) && (data[0] == 0x95) && (data[1] == 0x70) && (CheckCrc14443(CRC_14443_A, data, 9))) {
\r
+ if ((reader) && (len == 9) && (data[0] == 0x95) && (data[1] == 0x70) && (CheckCrc14443(CRC_14443_A, data, 9))) {
// Select 2nd part of 7 Byte UID
\r
sniffState = SNF_SAK;
\r
sniffState = SNF_SAK;
\r
- Dbprintf("SNF_SAK");
\r
}
\r
break;
\r
}
\r
}
\r
break;
\r
}
\r
- case SNF_CARD_IDLE:{
\r
+ case SNF_CARD_IDLE:{
// trace the card select sequence
\r
sniffBuf[0] = 0xFF;
\r
sniffBuf[1] = 0xFF;
\r
memcpy(sniffBuf + 2, sniffUID, 7);
\r
sniffBuf[0] = 0xFF;
\r
sniffBuf[1] = 0xFF;
\r
memcpy(sniffBuf + 2, sniffUID, 7);
\r
@@
-123,18
+115,15
@@
int RAMFUNC MfSniffLogic(const uint8_t * data, int len, uint32_t parity, int bit
sniffBuf[12] = 0xFF;
\r
sniffBuf[13] = 0xFF;
\r
LogTrace(sniffBuf, 14, 0, parity, true);
\r
sniffBuf[12] = 0xFF;
\r
sniffBuf[13] = 0xFF;
\r
LogTrace(sniffBuf, 14, 0, parity, true);
\r
- timerData = GetTickCount();
\r
- }
\r
- case SNF_CARD_CMD:{
\r
+ } // intentionally no break;
\r
+ case SNF_CARD_CMD:{
\r
LogTrace(data, len, 0, parity, true);
\r
LogTrace(data, len, 0, parity, true);
\r
-
\r
sniffState = SNF_CARD_RESP;
\r
timerData = GetTickCount();
\r
break;
\r
}
\r
case SNF_CARD_RESP:{
\r
LogTrace(data, len, 0, parity, false);
\r
sniffState = SNF_CARD_RESP;
\r
timerData = GetTickCount();
\r
break;
\r
}
\r
case SNF_CARD_RESP:{
\r
LogTrace(data, len, 0, parity, false);
\r
-
\r
sniffState = SNF_CARD_CMD;
\r
timerData = GetTickCount();
\r
break;
\r
sniffState = SNF_CARD_CMD;
\r
timerData = GetTickCount();
\r
break;
\r
@@
-145,51
+134,40
@@
int RAMFUNC MfSniffLogic(const uint8_t * data, int len, uint32_t parity, int bit
break;
\r
}
\r
\r
break;
\r
}
\r
\r
- return 0;
\r
+
\r
+ return FALSE;
\r
}
\r
\r
}
\r
\r
-
int RAMFUNC MfSniffSend(in
t maxTimeoutMs) {
\r
- if (traceLen && (
timerData + maxTimeoutMs < GetTickCount()
)) {
\r
+
bool RAMFUNC MfSniffSend(uint16_
t maxTimeoutMs) {
\r
+ if (traceLen && (
GetTickCount() > timerData + maxTimeoutMs
)) {
\r
return intMfSniffSend();
\r
}
\r
return intMfSniffSend();
\r
}
\r
- return
0
;
\r
+ return
FALSE
;
\r
}
\r
\r
}
\r
\r
-// internal seding function. not a RAMFUNC.
\r
-
int
intMfSniffSend() {
\r
-
\r
+// internal se
n
ding function. not a RAMFUNC.
\r
+
bool
intMfSniffSend() {
\r
+
\r
int pckSize = 0;
\r
int pckLen = traceLen;
\r
int pckNum = 0;
\r
int pckSize = 0;
\r
int pckLen = traceLen;
\r
int pckNum = 0;
\r
-
\r
- if (!traceLen) return 0;
\r
\r
FpgaDisableSscDma();
\r
\r
FpgaDisableSscDma();
\r
-
\r
while (pckLen > 0) {
\r
while (pckLen > 0) {
\r
- pckSize = MIN(32, pckLen);
\r
-// UsbCommand ack = {CMD_ACK, {1, pckSize, pckNum}};
\r
-// memcpy(ack.d.asBytes, trace + traceLen - pckLen, pckSize);
\r
-
\r
+ pckSize = MIN(USB_CMD_DATA_SIZE, pckLen);
\r
LED_B_ON();
\r
LED_B_ON();
\r
- cmd_send(CMD_ACK,1,pckSize,pckNum,trace + traceLen - pckLen,pckSize);
\r
-// UsbSendPacket((uint8_t *)&ack, sizeof(UsbCommand));
\r
-// SpinDelay(20);
\r
+ cmd_send(CMD_ACK, 1, pckSize, pckNum, trace + traceLen - pckLen, pckSize);
\r
LED_B_OFF();
\r
\r
pckLen -= pckSize;
\r
pckNum++;
\r
}
\r
\r
LED_B_OFF();
\r
\r
pckLen -= pckSize;
\r
pckNum++;
\r
}
\r
\r
-// UsbCommand ack = {CMD_ACK, {2, 0, 0}};
\r
-
\r
LED_B_ON();
\r
LED_B_ON();
\r
- cmd_send(CMD_ACK,2,0,0,0,0);
\r
-// UsbSendPacket((uint8_t *)&ack, sizeof(UsbCommand));
\r
+ cmd_send(CMD_ACK,2,0,0,0,0);
\r
LED_B_OFF();
\r
\r
LED_B_OFF();
\r
\r
- traceLen = 0;
\r
- memset(trace, 0x44, TRACE_SIZE);
\r
+ iso14a_clear_trace();
\r
\r
\r
- return
1
;
\r
+ return
TRUE
;
\r
}
\r
}
\r
Impressum
,
Datenschutz