From ab4da50d99bb4334b86ff9bc8c5795723df37966 Mon Sep 17 00:00:00 2001 From: "roel@libnfc.org" Date: Sun, 9 Dec 2012 21:25:29 +0000 Subject: [PATCH] added automatically saving the hitag2 memory content to file --- armsrc/hitag2.c | 58 ++++++++++++++++++++++++--------------------- client/cmdlfhitag.c | 55 ++++++++++++++++++++++++++---------------- client/proxmark3.c | 3 ++- 3 files changed, 68 insertions(+), 48 deletions(-) diff --git a/armsrc/hitag2.c b/armsrc/hitag2.c index 37eb211c..6f5557f6 100644 --- a/armsrc/hitag2.c +++ b/armsrc/hitag2.c @@ -27,6 +27,7 @@ static bool bQuiet; bool bCrypto; bool bAuthenticating; bool bPwd; +bool bSuccessful; struct hitag2_tag { uint32_t uid; @@ -477,8 +478,8 @@ bool hitag2_password(byte_t* rx, const size_t rxlen, byte_t* tx, size_t* txlen) *txlen = 32; memcpy(tx,password,4); bPwd = true; - memcpy(tag.sectors[blocknr],rx,4); - blocknr++; + memcpy(tag.sectors[blocknr],rx,4); + blocknr++; } else { if(blocknr == 1){ @@ -491,7 +492,7 @@ bool hitag2_password(byte_t* rx, const size_t rxlen, byte_t* tx, size_t* txlen) blocknr++; if (blocknr > 7) { DbpString("Read succesful!"); - // We are done... for now + bSuccessful = true; return false; } *txlen = 10; @@ -553,7 +554,7 @@ bool hitag2_crypto(byte_t* rx, const size_t rxlen, byte_t* tx, size_t* txlen) { } if (blocknr > 7) { DbpString("Read succesful!"); - // We are done... for now + bSuccessful = true; return false; } *txlen = 10; @@ -1074,7 +1075,10 @@ void ReaderHitag(hitag_function htf, hitag_data* htd) { int t_wait = HITAG_T_WAIT_MAX; bool bStop; bool bQuitTraceFull = false; - + + // Reset the return status + bSuccessful = false; + // Clean up trace and prepare it for storing frames iso14a_set_tracing(TRUE); iso14a_clear_trace(); @@ -1172,26 +1176,26 @@ void ReaderHitag(hitag_function htf, hitag_data* htd) { lastbit = 1; bStop = false; - // Tag specific configuration settings (sof, timings, etc.) - if (htf < 10){ - // hitagS settings - reset_sof = 1; - t_wait = 200; - DbpString("Configured for hitagS reader"); - } else if (htf < 20) { - // hitag1 settings - reset_sof = 1; - t_wait = 200; - DbpString("Configured for hitag1 reader"); - } else if (htf < 30) { - // hitag2 settings - reset_sof = 4; - t_wait = HITAG_T_WAIT_2; - DbpString("Configured for hitag2 reader"); + // Tag specific configuration settings (sof, timings, etc.) + if (htf < 10){ + // hitagS settings + reset_sof = 1; + t_wait = 200; + DbpString("Configured for hitagS reader"); + } else if (htf < 20) { + // hitag1 settings + reset_sof = 1; + t_wait = 200; + DbpString("Configured for hitag1 reader"); + } else if (htf < 30) { + // hitag2 settings + reset_sof = 4; + t_wait = HITAG_T_WAIT_2; + DbpString("Configured for hitag2 reader"); } else { - Dbprintf("Error, unknown hitag reader type: %d",htf); - return; - } + Dbprintf("Error, unknown hitag reader type: %d",htf); + return; + } while(!bStop && !BUTTON_PRESS()) { // Watchdog hit @@ -1336,7 +1340,7 @@ void ReaderHitag(hitag_function htf, hitag_data* htd) { AT91C_BASE_TC1->TC_CCR = AT91C_TC_CLKDIS; AT91C_BASE_TC0->TC_CCR = AT91C_TC_CLKDIS; FpgaWriteConfWord(FPGA_MAJOR_MODE_OFF); - -// Dbprintf("frame received: %d",frame_count); -// DbpString("All done"); + Dbprintf("frame received: %d",frame_count); + DbpString("All done"); + cmd_send(CMD_ACK,bSuccessful,0,0,(byte_t*)tag.sectors,48); } diff --git a/client/cmdlfhitag.c b/client/cmdlfhitag.c index 2541ce59..1ee88401 100644 --- a/client/cmdlfhitag.c +++ b/client/cmdlfhitag.c @@ -30,18 +30,6 @@ int CmdLFHitagList(const char *Cmd) GetFromBigBuf(got,sizeof(got),0); WaitForResponse(CMD_ACK,NULL); - char filename[256]; - FILE* pf = NULL; - - if (param_getstr(Cmd,0,filename)) { - if (strlen(filename) > 0) { - if ((pf = fopen(filename,"w")) == NULL) { - PrintAndLog("Error: Could not open file [%s]",filename); - return 1; - } - } - } - PrintAndLog("recorded activity:"); PrintAndLog(" ETU :rssi: who bytes"); PrintAndLog("---------+----+----+-----------"); @@ -49,6 +37,9 @@ int CmdLFHitagList(const char *Cmd) int i = 0; int prev = -1; + char filename[256]; + FILE* pf = NULL; + for (;;) { if(i >= 1900) { break; @@ -198,14 +189,14 @@ int CmdLFHitagReader(const char *Cmd) { } break; default: { PrintAndLog("Error: unkown reader function %d",htf); - PrintAndLog("Hitag reader functions",htf); - PrintAndLog(" HitagS (0*)",htf); - PrintAndLog(" Hitag1 (1*)",htf); - PrintAndLog(" Hitag2 (2*)",htf); - PrintAndLog(" 21 (password mode)",htf); - PrintAndLog(" 22 (authentication)",htf); - PrintAndLog(" 23 (authentication) key is in format: ISK high + ISK low",htf); - PrintAndLog(" 25 (test recorded authentications)",htf); + PrintAndLog("Hitag reader functions"); + PrintAndLog(" HitagS (0*)"); + PrintAndLog(" Hitag1 (1*)"); + PrintAndLog(" Hitag2 (2*)"); + PrintAndLog(" 21 (password mode)"); + PrintAndLog(" 22 (authentication)"); + PrintAndLog(" 23 (authentication) key is in format: ISK high + ISK low"); + PrintAndLog(" 25 (test recorded authentications)"); return 1; } break; } @@ -213,7 +204,31 @@ int CmdLFHitagReader(const char *Cmd) { // Copy the hitag2 function into the first argument c.arg[0] = htf; + // Send the command to the proxmark SendCommand(&c); + + UsbCommand resp; + WaitForResponse(CMD_ACK,&resp); + + // Check the return status, stored in the first argument + if (resp.arg[0] == false) return 1; + + uint32_t id = bytes_to_num(resp.d.asBytes,4); + char filename[256]; + FILE* pf = NULL; + + sprintf(filename,"%08x_%04x.ht2",id,(rand() & 0xffff)); + if ((pf = fopen(filename,"wb")) == NULL) { + PrintAndLog("Error: Could not open file [%s]",filename); + return 1; + } + + // Write the 48 tag memory bytes to file and finalize + fwrite(resp.d.asBytes,1,48,pf); + fclose(pf); + + PrintAndLog("Succesfully saved tag memory to [%s]",filename); + return 0; } diff --git a/client/proxmark3.c b/client/proxmark3.c index 949013ec..db37780d 100644 --- a/client/proxmark3.c +++ b/client/proxmark3.c @@ -196,7 +196,8 @@ static void *main_loop(void *targ) { } int main(int argc, char* argv[]) { - + srand(time(0)); + if (argc < 2) { printf("syntax: %s \n\n",argv[0]); return 1; -- 2.39.2