mirror of
https://github.com/RfidResearchGroup/proxmark3.git
synced 2025-08-20 13:23:51 -07:00
CHG: hf 14a read
- started to add a Magic tag gen2 detection. SKipping it for now. Can't decide to put in on deviceside or in client.
FIX: `lf read` - ophs.. it works again. ADD: `lf em 4x05--` - added a chipset definition CHG: better kali fix - from @pwpivi
This commit is contained in:
parent
8db18d2f15
commit
f24edfec54
5 changed files with 48 additions and 20 deletions
|
@ -1360,24 +1360,48 @@ void MifareCGetBlock(uint32_t arg0, uint32_t arg1, uint8_t *datain){
|
||||||
void MifareCIdent(){
|
void MifareCIdent(){
|
||||||
#define GEN_1A 1
|
#define GEN_1A 1
|
||||||
#define GEN_1B 2
|
#define GEN_1B 2
|
||||||
|
#define GEN_2 4
|
||||||
// variables
|
// variables
|
||||||
uint8_t isGen = 0;
|
uint8_t isGen = 0;
|
||||||
uint8_t receivedAnswer[1] = {0x00};
|
uint8_t rec[1] = {0x00};
|
||||||
uint8_t receivedAnswerPar[1] = {0x00};
|
uint8_t recpar[1] = {0x00};
|
||||||
|
|
||||||
|
// Generation 1 test
|
||||||
ReaderTransmitBitsPar(wupC1, 7, NULL, NULL);
|
ReaderTransmitBitsPar(wupC1, 7, NULL, NULL);
|
||||||
if(!ReaderReceive(receivedAnswer, receivedAnswerPar) || (receivedAnswer[0] != 0x0a)) {
|
if(!ReaderReceive(rec, recpar) || (rec[0] != 0x0a)) {
|
||||||
goto OUT;
|
goto TEST2;
|
||||||
}
|
};
|
||||||
isGen |= GEN_1B;
|
isGen = GEN_1B;
|
||||||
|
|
||||||
ReaderTransmit(wupC2, sizeof(wupC2), NULL);
|
ReaderTransmit(wupC2, sizeof(wupC2), NULL);
|
||||||
if(!ReaderReceive(receivedAnswer, receivedAnswerPar) || (receivedAnswer[0] != 0x0a)) {
|
if(!ReaderReceive(rec, recpar) || (rec[0] != 0x0a)) {
|
||||||
goto OUT;
|
goto OUT;
|
||||||
}
|
};
|
||||||
isGen = GEN_1A;
|
isGen = GEN_1A;
|
||||||
|
goto OUT;
|
||||||
|
|
||||||
OUT:
|
TEST2:;
|
||||||
|
/*
|
||||||
|
// Generation 2 test
|
||||||
|
struct Crypto1State mpcs = {0, 0};
|
||||||
|
struct Crypto1State *pcs = &mpcs;
|
||||||
|
|
||||||
|
// halt previous.
|
||||||
|
mifare_classic_halt(NULL, 0);
|
||||||
|
|
||||||
|
//select
|
||||||
|
if (!iso14443a_select_card(NULL, NULL, NULL, true, 0)) {
|
||||||
|
goto OUT;
|
||||||
|
};
|
||||||
|
|
||||||
|
// MIFARE_CLASSIC_WRITEBLOCK 0xA0
|
||||||
|
// ACK 0x0a
|
||||||
|
uint16_t len = mifare_sendcmd_short(pcs, 1, 0xA0, 0, rec, recpar, NULL);
|
||||||
|
if ((len != 1) || (rec[0] != 0x0A)) {
|
||||||
|
isGen = GEN_2;
|
||||||
|
};
|
||||||
|
*/
|
||||||
|
OUT:;
|
||||||
// removed the if, since some magic tags misbehavies and send an answer to it.
|
// removed the if, since some magic tags misbehavies and send an answer to it.
|
||||||
mifare_classic_halt(NULL, 0);
|
mifare_classic_halt(NULL, 0);
|
||||||
cmd_send(CMD_ACK,isGen, 0, 0, 0, 0);
|
cmd_send(CMD_ACK,isGen, 0, 0, 0, 0);
|
||||||
|
|
|
@ -391,18 +391,21 @@ int CmdHF14AReader(const char *Cmd) {
|
||||||
|
|
||||||
// try to see if card responses to "chinese magic backdoor" commands.
|
// try to see if card responses to "chinese magic backdoor" commands.
|
||||||
uint8_t isGeneration = 0;
|
uint8_t isGeneration = 0;
|
||||||
|
|
||||||
clearCommandBuffer();
|
clearCommandBuffer();
|
||||||
c.cmd = CMD_MIFARE_CIDENT;
|
c.cmd = CMD_MIFARE_CIDENT;
|
||||||
c.arg[0] = 0;
|
c.arg[0] = 0;
|
||||||
c.arg[1] = 0;
|
c.arg[1] = 0;
|
||||||
c.arg[2] = 0;
|
c.arg[2] = 0;
|
||||||
SendCommand(&c);
|
SendCommand(&c);
|
||||||
if (WaitForResponseTimeout(CMD_ACK, &resp, 1500)) {
|
if (WaitForResponseTimeout(CMD_ACK, &resp, 1500))
|
||||||
isGeneration = resp.arg[0] & 0xff;
|
isGeneration = resp.arg[0] & 0xff;
|
||||||
|
|
||||||
|
switch( isGeneration ){
|
||||||
|
case 1: PrintAndLog("Answers to magic commands (GEN 1a): YES"); break;
|
||||||
|
case 2: PrintAndLog("Answers to magic commands (GEN 1b): YES"); break;
|
||||||
|
//case 4: PrintAndLog("Answers to magic commands (GEN 2): YES"); break;
|
||||||
|
default: PrintAndLog("Answers to magic commands: NO"); break;
|
||||||
}
|
}
|
||||||
if ( isGeneration )
|
|
||||||
PrintAndLog("Answers to magic commands (GEN %s): YES", ((isGeneration & 0x2 )==2)?"1B":"1A");
|
|
||||||
|
|
||||||
// disconnect
|
// disconnect
|
||||||
SendCommand(&cDisconnect);
|
SendCommand(&cDisconnect);
|
||||||
|
|
|
@ -567,15 +567,12 @@ int CmdLFRead(const char *Cmd) {
|
||||||
break;
|
break;
|
||||||
default:
|
default:
|
||||||
PrintAndLog("Unknown parameter '%c'", param_getchar(Cmd, cmdp));
|
PrintAndLog("Unknown parameter '%c'", param_getchar(Cmd, cmdp));
|
||||||
errors = 1;
|
errors = TRUE;
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
if(errors) break;
|
if(errors) break;
|
||||||
}
|
}
|
||||||
|
|
||||||
// No args
|
|
||||||
if (cmdp == 0) errors = 1;
|
|
||||||
|
|
||||||
//Validations
|
//Validations
|
||||||
if (errors) return usage_lf_read();
|
if (errors) return usage_lf_read();
|
||||||
|
|
||||||
|
|
|
@ -797,7 +797,7 @@ int EM4x05ReadWord_ext(uint8_t addr, uint32_t pwd, bool usePwd, uint32_t *word)
|
||||||
}
|
}
|
||||||
int testLen = (GraphTraceLen < 1000) ? GraphTraceLen : 1000;
|
int testLen = (GraphTraceLen < 1000) ? GraphTraceLen : 1000;
|
||||||
if (graphJustNoise(GraphBuffer, testLen)) {
|
if (graphJustNoise(GraphBuffer, testLen)) {
|
||||||
PrintAndLog("no tag not found");
|
PrintAndLog("no tag found");
|
||||||
return -1;
|
return -1;
|
||||||
}
|
}
|
||||||
return demodEM4x05resp(word);
|
return demodEM4x05resp(word);
|
||||||
|
@ -981,6 +981,7 @@ void printEM4x05info(uint32_t block0, uint32_t serial) {
|
||||||
|
|
||||||
switch (chipType) {
|
switch (chipType) {
|
||||||
case 9: PrintAndLog("\n Chip Type: %u | EM4305", chipType); break;
|
case 9: PrintAndLog("\n Chip Type: %u | EM4305", chipType); break;
|
||||||
|
case 8: PrintAndLog("\n Chip Type: %u | EM4205", chipType); break;
|
||||||
case 4: PrintAndLog(" Chip Type: %u | Unknown", chipType); break;
|
case 4: PrintAndLog(" Chip Type: %u | Unknown", chipType); break;
|
||||||
case 2: PrintAndLog(" Chip Type: %u | EM4469", chipType); break;
|
case 2: PrintAndLog(" Chip Type: %u | EM4469", chipType); break;
|
||||||
//add more here when known
|
//add more here when known
|
||||||
|
|
|
@ -10,7 +10,10 @@
|
||||||
extern "C" {
|
extern "C" {
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
|
#if defined(__linux__)
|
||||||
|
// make realpath() available:
|
||||||
#define _DEFAULT_SOURCE
|
#define _DEFAULT_SOURCE
|
||||||
|
#endif
|
||||||
|
|
||||||
#if !defined(WAI_MALLOC) || !defined(WAI_FREE) || !defined(WAI_REALLOC)
|
#if !defined(WAI_MALLOC) || !defined(WAI_FREE) || !defined(WAI_REALLOC)
|
||||||
#include <stdlib.h>
|
#include <stdlib.h>
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue