mirror of
https://github.com/RfidResearchGroup/proxmark3.git
synced 2024-12-30 20:23:46 +08: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(){
|
||||
#define GEN_1A 1
|
||||
#define GEN_1B 2
|
||||
#define GEN_2 4
|
||||
// variables
|
||||
uint8_t isGen = 0;
|
||||
uint8_t receivedAnswer[1] = {0x00};
|
||||
uint8_t receivedAnswerPar[1] = {0x00};
|
||||
|
||||
uint8_t rec[1] = {0x00};
|
||||
uint8_t recpar[1] = {0x00};
|
||||
|
||||
// Generation 1 test
|
||||
ReaderTransmitBitsPar(wupC1, 7, NULL, NULL);
|
||||
if(!ReaderReceive(receivedAnswer, receivedAnswerPar) || (receivedAnswer[0] != 0x0a)) {
|
||||
goto OUT;
|
||||
}
|
||||
isGen |= GEN_1B;
|
||||
if(!ReaderReceive(rec, recpar) || (rec[0] != 0x0a)) {
|
||||
goto TEST2;
|
||||
};
|
||||
isGen = GEN_1B;
|
||||
|
||||
ReaderTransmit(wupC2, sizeof(wupC2), NULL);
|
||||
if(!ReaderReceive(receivedAnswer, receivedAnswerPar) || (receivedAnswer[0] != 0x0a)) {
|
||||
if(!ReaderReceive(rec, recpar) || (rec[0] != 0x0a)) {
|
||||
goto OUT;
|
||||
}
|
||||
};
|
||||
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.
|
||||
mifare_classic_halt(NULL, 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.
|
||||
uint8_t isGeneration = 0;
|
||||
|
||||
clearCommandBuffer();
|
||||
c.cmd = CMD_MIFARE_CIDENT;
|
||||
c.arg[0] = 0;
|
||||
c.arg[1] = 0;
|
||||
c.arg[2] = 0;
|
||||
SendCommand(&c);
|
||||
if (WaitForResponseTimeout(CMD_ACK, &resp, 1500)) {
|
||||
if (WaitForResponseTimeout(CMD_ACK, &resp, 1500))
|
||||
isGeneration = resp.arg[0] & 0xff;
|
||||
}
|
||||
if ( isGeneration )
|
||||
PrintAndLog("Answers to magic commands (GEN %s): YES", ((isGeneration & 0x2 )==2)?"1B":"1A");
|
||||
|
||||
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;
|
||||
}
|
||||
|
||||
// disconnect
|
||||
SendCommand(&cDisconnect);
|
||||
|
|
|
@ -567,14 +567,11 @@ int CmdLFRead(const char *Cmd) {
|
|||
break;
|
||||
default:
|
||||
PrintAndLog("Unknown parameter '%c'", param_getchar(Cmd, cmdp));
|
||||
errors = 1;
|
||||
errors = TRUE;
|
||||
break;
|
||||
}
|
||||
if(errors) break;
|
||||
}
|
||||
|
||||
// No args
|
||||
if (cmdp == 0) errors = 1;
|
||||
|
||||
//Validations
|
||||
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;
|
||||
if (graphJustNoise(GraphBuffer, testLen)) {
|
||||
PrintAndLog("no tag not found");
|
||||
PrintAndLog("no tag found");
|
||||
return -1;
|
||||
}
|
||||
return demodEM4x05resp(word);
|
||||
|
@ -981,6 +981,7 @@ void printEM4x05info(uint32_t block0, uint32_t serial) {
|
|||
|
||||
switch (chipType) {
|
||||
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 2: PrintAndLog(" Chip Type: %u | EM4469", chipType); break;
|
||||
//add more here when known
|
||||
|
|
|
@ -10,7 +10,10 @@
|
|||
extern "C" {
|
||||
#endif
|
||||
|
||||
#if defined(__linux__)
|
||||
// make realpath() available:
|
||||
#define _DEFAULT_SOURCE
|
||||
#endif
|
||||
|
||||
#if !defined(WAI_MALLOC) || !defined(WAI_FREE) || !defined(WAI_REALLOC)
|
||||
#include <stdlib.h>
|
||||
|
|
Loading…
Reference in a new issue