projects
/
proxmark3-svn
/ blobdiff
commit
grep
author
committer
pickaxe
?
search:
re
summary
|
shortlog
|
log
|
commit
|
commitdiff
|
tree
raw
|
inline
| side by side
Fix typos
[proxmark3-svn]
/
armsrc
/
mifarecmd.c
diff --git
a/armsrc/mifarecmd.c
b/armsrc/mifarecmd.c
index 14d2b68a10ac578121e3a66d590c2733405d2439..a3d6609db3413a136b6d5415e3296e103f90a28a 100644
(file)
--- a/
armsrc/mifarecmd.c
+++ b/
armsrc/mifarecmd.c
@@
-44,10
+44,10
@@
void MifareReadBlock(uint8_t arg0, uint8_t arg1, uint8_t arg2, uint8_t *datain)
struct Crypto1State *pcs;
\r
pcs = &mpcs;
\r
\r
struct Crypto1State *pcs;
\r
pcs = &mpcs;
\r
\r
- // clear trace
\r
- clear_trace();
\r
iso14443a_setup(FPGA_HF_ISO14443A_READER_LISTEN);
\r
\r
iso14443a_setup(FPGA_HF_ISO14443A_READER_LISTEN);
\r
\r
+ clear_trace();
\r
+
\r
LED_A_ON();
\r
LED_B_OFF();
\r
LED_C_OFF();
\r
LED_A_ON();
\r
LED_B_OFF();
\r
LED_C_OFF();
\r
@@
-95,9
+95,11
@@
void MifareUC_Auth(uint8_t arg0, uint8_t *keybytes){
bool turnOffField = (arg0 == 1);
\r
\r
LED_A_ON(); LED_B_OFF(); LED_C_OFF();
\r
bool turnOffField = (arg0 == 1);
\r
\r
LED_A_ON(); LED_B_OFF(); LED_C_OFF();
\r
- clear_trace();
\r
+
\r
iso14443a_setup(FPGA_HF_ISO14443A_READER_LISTEN);
\r
\r
iso14443a_setup(FPGA_HF_ISO14443A_READER_LISTEN);
\r
\r
+ clear_trace();
\r
+
\r
if(!iso14443a_select_card(NULL, NULL, NULL)) {
\r
if (MF_DBGLEVEL >= MF_DBG_ERROR) Dbprintf("Can't select card");
\r
OnError(0);
\r
if(!iso14443a_select_card(NULL, NULL, NULL)) {
\r
if (MF_DBGLEVEL >= MF_DBG_ERROR) Dbprintf("Can't select card");
\r
OnError(0);
\r
@@
-129,9
+131,10
@@
void MifareUReadBlock(uint8_t arg0, uint8_t arg1, uint8_t *datain)
\r
LEDsoff();
\r
LED_A_ON();
\r
\r
LEDsoff();
\r
LED_A_ON();
\r
- clear_trace();
\r
iso14443a_setup(FPGA_HF_ISO14443A_READER_LISTEN);
\r
\r
iso14443a_setup(FPGA_HF_ISO14443A_READER_LISTEN);
\r
\r
+ clear_trace();
\r
+
\r
int len = iso14443a_select_card(NULL, NULL, NULL);
\r
if(!len) {
\r
if (MF_DBGLEVEL >= MF_DBG_ERROR) Dbprintf("Can't select card (RC:%02X)",len);
\r
int len = iso14443a_select_card(NULL, NULL, NULL);
\r
if(!len) {
\r
if (MF_DBGLEVEL >= MF_DBG_ERROR) Dbprintf("Can't select card (RC:%02X)",len);
\r
@@
-199,11
+202,10
@@
void MifareReadSector(uint8_t arg0, uint8_t arg1, uint8_t arg2, uint8_t *datain)
struct Crypto1State *pcs;
\r
pcs = &mpcs;
\r
\r
struct Crypto1State *pcs;
\r
pcs = &mpcs;
\r
\r
- // clear trace
\r
- clear_trace();
\r
-
\r
iso14443a_setup(FPGA_HF_ISO14443A_READER_LISTEN);
\r
\r
iso14443a_setup(FPGA_HF_ISO14443A_READER_LISTEN);
\r
\r
+ clear_trace();
\r
+
\r
LED_A_ON();
\r
LED_B_OFF();
\r
LED_C_OFF();
\r
LED_A_ON();
\r
LED_B_OFF();
\r
LED_C_OFF();
\r
@@
-252,6
+254,10
@@
void MifareReadSector(uint8_t arg0, uint8_t arg1, uint8_t arg2, uint8_t *datain)
// datain = KEY bytes
\r
void MifareUReadCard(uint8_t arg0, uint16_t arg1, uint8_t arg2, uint8_t *datain)
\r
{
\r
// datain = KEY bytes
\r
void MifareUReadCard(uint8_t arg0, uint16_t arg1, uint8_t arg2, uint8_t *datain)
\r
{
\r
+ LEDsoff();
\r
+ LED_A_ON();
\r
+ iso14443a_setup(FPGA_HF_ISO14443A_READER_LISTEN);
\r
+
\r
// free eventually allocated BigBuf memory
\r
BigBuf_free();
\r
clear_trace();
\r
// free eventually allocated BigBuf memory
\r
BigBuf_free();
\r
clear_trace();
\r
@@
-269,10
+275,6
@@
void MifareUReadCard(uint8_t arg0, uint16_t arg1, uint8_t arg2, uint8_t *datain)
return;
\r
}
\r
\r
return;
\r
}
\r
\r
- LEDsoff();
\r
- LED_A_ON();
\r
- iso14443a_setup(FPGA_HF_ISO14443A_READER_LISTEN);
\r
-
\r
int len = iso14443a_select_card(NULL, NULL, NULL);
\r
if (!len) {
\r
if (MF_DBGLEVEL >= MF_DBG_ERROR) Dbprintf("Can't select card (RC:%d)",len);
\r
int len = iso14443a_select_card(NULL, NULL, NULL);
\r
if (!len) {
\r
if (MF_DBGLEVEL >= MF_DBG_ERROR) Dbprintf("Can't select card (RC:%d)",len);
\r
@@
-366,11
+368,10
@@
void MifareWriteBlock(uint8_t arg0, uint8_t arg1, uint8_t arg2, uint8_t *datain)
struct Crypto1State *pcs;
\r
pcs = &mpcs;
\r
\r
struct Crypto1State *pcs;
\r
pcs = &mpcs;
\r
\r
- // clear trace
\r
- clear_trace();
\r
-
\r
iso14443a_setup(FPGA_HF_ISO14443A_READER_LISTEN);
\r
\r
iso14443a_setup(FPGA_HF_ISO14443A_READER_LISTEN);
\r
\r
+ clear_trace();
\r
+
\r
LED_A_ON();
\r
LED_B_OFF();
\r
LED_C_OFF();
\r
LED_A_ON();
\r
LED_B_OFF();
\r
LED_C_OFF();
\r
@@
-472,9
+473,10
@@
void MifareUWriteBlock(uint8_t arg0, uint8_t arg1, uint8_t *datain)
\r
LEDsoff();
\r
LED_A_ON();
\r
\r
LEDsoff();
\r
LED_A_ON();
\r
- clear_trace();
\r
iso14443a_setup(FPGA_HF_ISO14443A_READER_LISTEN);
\r
\r
iso14443a_setup(FPGA_HF_ISO14443A_READER_LISTEN);
\r
\r
+ clear_trace();
\r
+
\r
if(!iso14443a_select_card(NULL, NULL, NULL)) {
\r
if (MF_DBGLEVEL >= 1) Dbprintf("Can't select card");
\r
OnError(0);
\r
if(!iso14443a_select_card(NULL, NULL, NULL)) {
\r
if (MF_DBGLEVEL >= 1) Dbprintf("Can't select card");
\r
OnError(0);
\r
@@
-530,9
+532,10
@@
void MifareUSetPwd(uint8_t arg0, uint8_t *datain){
memcpy(pwd, datain, 16);
\r
\r
LED_A_ON(); LED_B_OFF(); LED_C_OFF();
\r
memcpy(pwd, datain, 16);
\r
\r
LED_A_ON(); LED_B_OFF(); LED_C_OFF();
\r
- clear_trace();
\r
iso14443a_setup(FPGA_HF_ISO14443A_READER_LISTEN);
\r
\r
iso14443a_setup(FPGA_HF_ISO14443A_READER_LISTEN);
\r
\r
+ clear_trace();
\r
+
\r
if(!iso14443a_select_card(NULL, NULL, NULL)) {
\r
if (MF_DBGLEVEL >= 1) Dbprintf("Can't select card");
\r
OnError(0);
\r
if(!iso14443a_select_card(NULL, NULL, NULL)) {
\r
if (MF_DBGLEVEL >= 1) Dbprintf("Can't select card");
\r
OnError(0);
\r
@@
-632,18
+635,16
@@
void MifareNested(uint32_t arg0, uint32_t arg1, uint32_t calibrate, uint8_t *dat
uint32_t auth1_time, auth2_time;
\r
static uint16_t delta_time;
\r
\r
uint32_t auth1_time, auth2_time;
\r
static uint16_t delta_time;
\r
\r
- // free eventually allocated BigBuf memory
\r
- BigBuf_free();
\r
- // clear trace
\r
- clear_trace();
\r
- set_tracing(false);
\r
-
\r
- iso14443a_setup(FPGA_HF_ISO14443A_READER_LISTEN);
\r
-
\r
LED_A_ON();
\r
LED_C_OFF();
\r
LED_A_ON();
\r
LED_C_OFF();
\r
+ iso14443a_setup(FPGA_HF_ISO14443A_READER_LISTEN);
\r
\r
\r
+ // free eventually allocated BigBuf memory
\r
+ BigBuf_free();
\r
\r
\r
+ if (calibrate) clear_trace();
\r
+ set_tracing(true);
\r
+
\r
// statistics on nonce distance
\r
int16_t isOK = 0;
\r
#define NESTED_MAX_TRIES 12
\r
// statistics on nonce distance
\r
int16_t isOK = 0;
\r
#define NESTED_MAX_TRIES 12
\r
@@
-819,18
+820,18
@@
void MifareNested(uint32_t arg0, uint32_t arg1, uint32_t calibrate, uint8_t *dat
\r
FpgaWriteConfWord(FPGA_MAJOR_MODE_OFF);
\r
LEDsoff();
\r
\r
FpgaWriteConfWord(FPGA_MAJOR_MODE_OFF);
\r
LEDsoff();
\r
- set_tracing(TRUE);
\r
}
\r
\r
//-----------------------------------------------------------------------------
\r
// MIFARE check keys. key count up to 85.
\r
//
\r
//-----------------------------------------------------------------------------
\r
}
\r
\r
//-----------------------------------------------------------------------------
\r
// MIFARE check keys. key count up to 85.
\r
//
\r
//-----------------------------------------------------------------------------
\r
-void MifareChkKeys(uint
8
_t arg0, uint8_t arg1, uint8_t arg2, uint8_t *datain)
\r
+void MifareChkKeys(uint
16
_t arg0, uint8_t arg1, uint8_t arg2, uint8_t *datain)
\r
{
\r
// params
\r
{
\r
// params
\r
- uint8_t blockNo = arg0;
\r
- uint8_t keyType = arg1;
\r
+ uint8_t blockNo = arg0 & 0xff;
\r
+ uint8_t keyType = (arg0 >> 8) & 0xff;
\r
+ bool clearTrace = arg1;
\r
uint8_t keyCount = arg2;
\r
uint64_t ui64Key = 0;
\r
\r
uint8_t keyCount = arg2;
\r
uint64_t ui64Key = 0;
\r
\r
@@
-847,15
+848,13
@@
void MifareChkKeys(uint8_t arg0, uint8_t arg1, uint8_t arg2, uint8_t *datain)
int OLD_MF_DBGLEVEL = MF_DBGLEVEL;
\r
MF_DBGLEVEL = MF_DBG_NONE;
\r
\r
int OLD_MF_DBGLEVEL = MF_DBGLEVEL;
\r
MF_DBGLEVEL = MF_DBG_NONE;
\r
\r
- // clear trace
\r
- clear_trace();
\r
- set_tracing(TRUE);
\r
-
\r
- iso14443a_setup(FPGA_HF_ISO14443A_READER_LISTEN);
\r
-
\r
LED_A_ON();
\r
LED_B_OFF();
\r
LED_C_OFF();
\r
LED_A_ON();
\r
LED_B_OFF();
\r
LED_C_OFF();
\r
+ iso14443a_setup(FPGA_HF_ISO14443A_READER_LISTEN);
\r
+
\r
+ if (clearTrace) clear_trace();
\r
+ set_tracing(TRUE);
\r
\r
for (i = 0; i < keyCount; i++) {
\r
if(mifare_classic_halt(pcs, cuid)) {
\r
\r
for (i = 0; i < keyCount; i++) {
\r
if(mifare_classic_halt(pcs, cuid)) {
\r
@@
-902,16
+901,23
@@
void MifareSetDbgLvl(uint32_t arg0, uint32_t arg1, uint32_t arg2, uint8_t *datai
//-----------------------------------------------------------------------------
\r
// Work with emulator memory
\r
//
\r
//-----------------------------------------------------------------------------
\r
// Work with emulator memory
\r
//
\r
+// Note: we call FpgaDownloadAndGo(FPGA_BITSTREAM_HF) here although FPGA is not
\r
+// involved in dealing with emulator memory. But if it is called later, it might
\r
+// destroy the Emulator Memory.
\r
//-----------------------------------------------------------------------------
\r
//-----------------------------------------------------------------------------
\r
+
\r
void MifareEMemClr(uint32_t arg0, uint32_t arg1, uint32_t arg2, uint8_t *datain){
\r
void MifareEMemClr(uint32_t arg0, uint32_t arg1, uint32_t arg2, uint8_t *datain){
\r
+ FpgaDownloadAndGo(FPGA_BITSTREAM_HF);
\r
emlClearMem();
\r
}
\r
\r
void MifareEMemSet(uint32_t arg0, uint32_t arg1, uint32_t arg2, uint8_t *datain){
\r
emlClearMem();
\r
}
\r
\r
void MifareEMemSet(uint32_t arg0, uint32_t arg1, uint32_t arg2, uint8_t *datain){
\r
+ FpgaDownloadAndGo(FPGA_BITSTREAM_HF);
\r
emlSetMem(datain, arg0, arg1); // data, block num, blocks count
\r
}
\r
\r
void MifareEMemGet(uint32_t arg0, uint32_t arg1, uint32_t arg2, uint8_t *datain){
\r
emlSetMem(datain, arg0, arg1); // data, block num, blocks count
\r
}
\r
\r
void MifareEMemGet(uint32_t arg0, uint32_t arg1, uint32_t arg2, uint8_t *datain){
\r
+ FpgaDownloadAndGo(FPGA_BITSTREAM_HF);
\r
byte_t buf[USB_CMD_DATA_SIZE];
\r
emlGetMem(buf, arg0, arg1); // data, block num, blocks count (max 4)
\r
\r
byte_t buf[USB_CMD_DATA_SIZE];
\r
emlGetMem(buf, arg0, arg1); // data, block num, blocks count (max 4)
\r
\r
@@
-938,15
+944,13
@@
void MifareECardLoad(uint32_t arg0, uint32_t arg1, uint32_t arg2, uint8_t *datai
byte_t dataoutbuf2[16];
\r
uint8_t uid[10];
\r
\r
byte_t dataoutbuf2[16];
\r
uint8_t uid[10];
\r
\r
- // clear trace
\r
- clear_trace();
\r
- set_tracing(false);
\r
-
\r
- iso14443a_setup(FPGA_HF_ISO14443A_READER_LISTEN);
\r
-
\r
LED_A_ON();
\r
LED_B_OFF();
\r
LED_C_OFF();
\r
LED_A_ON();
\r
LED_B_OFF();
\r
LED_C_OFF();
\r
+ iso14443a_setup(FPGA_HF_ISO14443A_READER_LISTEN);
\r
+
\r
+ clear_trace();
\r
+ set_tracing(false);
\r
\r
bool isOK = true;
\r
\r
\r
bool isOK = true;
\r
\r
@@
-1040,10
+1044,10
@@
void MifareCSetBlock(uint32_t arg0, uint32_t arg1, uint32_t arg2, uint8_t *datai
LED_A_ON();
\r
LED_B_OFF();
\r
LED_C_OFF();
\r
LED_A_ON();
\r
LED_B_OFF();
\r
LED_C_OFF();
\r
+ iso14443a_setup(FPGA_HF_ISO14443A_READER_LISTEN);
\r
\r
clear_trace();
\r
set_tracing(TRUE);
\r
\r
clear_trace();
\r
set_tracing(TRUE);
\r
- iso14443a_setup(FPGA_HF_ISO14443A_READER_LISTEN);
\r
}
\r
\r
while (true) {
\r
}
\r
\r
while (true) {
\r
@@
-1139,6
+1143,7
@@
void MifareCGetBlock(uint32_t arg0, uint32_t arg1, uint32_t arg2, uint8_t *datai
// bit 2 - need HALT after sequence
\r
// bit 3 - need init FPGA and field before sequence
\r
// bit 4 - need reset FPGA and LED
\r
// bit 2 - need HALT after sequence
\r
// bit 3 - need init FPGA and field before sequence
\r
// bit 4 - need reset FPGA and LED
\r
+ // bit 5 - need to set datain instead of issuing USB reply (called via ARM for StandAloneMode14a)
\r
uint8_t workFlags = arg0;
\r
uint8_t blockNo = arg2;
\r
\r
uint8_t workFlags = arg0;
\r
uint8_t blockNo = arg2;
\r
\r
@@
-1158,10
+1163,10
@@
void MifareCGetBlock(uint32_t arg0, uint32_t arg1, uint32_t arg2, uint8_t *datai
LED_A_ON();
\r
LED_B_OFF();
\r
LED_C_OFF();
\r
LED_A_ON();
\r
LED_B_OFF();
\r
LED_C_OFF();
\r
-
\r
+ iso14443a_setup(FPGA_HF_ISO14443A_READER_LISTEN);
\r
+
\r
clear_trace();
\r
set_tracing(TRUE);
\r
clear_trace();
\r
set_tracing(TRUE);
\r
- iso14443a_setup(FPGA_HF_ISO14443A_READER_LISTEN);
\r
}
\r
\r
while (true) {
\r
}
\r
\r
while (true) {
\r
@@
-1198,7
+1203,12
@@
void MifareCGetBlock(uint32_t arg0, uint32_t arg1, uint32_t arg2, uint8_t *datai
}
\r
\r
LED_B_ON();
\r
}
\r
\r
LED_B_ON();
\r
- cmd_send(CMD_ACK,isOK,0,0,data,18);
\r
+ if (workFlags & 0x20) {
\r
+ if (isOK)
\r
+ memcpy(datain, data, 18);
\r
+ }
\r
+ else
\r
+ cmd_send(CMD_ACK,isOK,0,0,data,18);
\r
LED_B_OFF();
\r
\r
if ((workFlags & 0x10) || (!isOK)) {
\r
LED_B_OFF();
\r
\r
if ((workFlags & 0x10) || (!isOK)) {
\r
@@
-1236,7
+1246,7
@@
void MifareCIdent(){
cmd_send(CMD_ACK,isOK,0,0,0,0);
\r
}
\r
\r
cmd_send(CMD_ACK,isOK,0,0,0,0);
\r
}
\r
\r
-
//
\r
+//
\r
// DESFIRE
\r
//
\r
\r
// DESFIRE
\r
//
\r
\r
@@
-1246,8
+1256,8
@@
void Mifare_DES_Auth1(uint8_t arg0, uint8_t *datain){
uint8_t uid[10] = {0x00};
\r
uint32_t cuid;
\r
\r
uint8_t uid[10] = {0x00};
\r
uint32_t cuid;
\r
\r
- clear_trace();
\r
iso14443a_setup(FPGA_HF_ISO14443A_READER_LISTEN);
\r
iso14443a_setup(FPGA_HF_ISO14443A_READER_LISTEN);
\r
+ clear_trace();
\r
\r
int len = iso14443a_select_card(uid, NULL, &cuid);
\r
if(!len) {
\r
\r
int len = iso14443a_select_card(uid, NULL, &cuid);
\r
if(!len) {
\r
Impressum
,
Datenschutz