mirror of
https://github.com/RfidResearchGroup/proxmark3.git
synced 2025-08-20 05:13:46 -07:00
FIX: hf mf sim
- authentication works again.
CHG: `lf em`- renamed. CHG: removed functionality in whereami.c, not needed.
This commit is contained in:
parent
17556415a9
commit
d32691f1da
4 changed files with 34 additions and 29 deletions
|
@ -2791,34 +2791,37 @@ void Mifare1ksim(uint8_t flags, uint8_t exitAfterNReads, uint8_t arg2, uint8_t *
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
/*
|
crypto1_word(pcs, nr , 1);
|
||||||
// Interactive mode flag, means we need to send ACK
|
uint32_t cardRr = ar ^ crypto1_word(pcs, 0, 0);
|
||||||
|
|
||||||
crypto1_word(pcs, ar , 1);
|
//test if auth OK
|
||||||
cardRr = nr ^ crypto1_word(pcs, 0, 0);
|
|
||||||
|
|
||||||
test if auth OK
|
|
||||||
if (cardRr != prng_successor(nonce, 64)){
|
if (cardRr != prng_successor(nonce, 64)){
|
||||||
|
|
||||||
if (MF_DBGLEVEL >= 4) Dbprintf("AUTH FAILED for sector %d with key %c. cardRr=%08x, succ=%08x",
|
if (MF_DBGLEVEL >= 3)
|
||||||
cardAUTHSC, cardAUTHKEY == 0 ? 'A' : 'B',
|
Dbprintf("AUTH FAILED for sector %d with key %c. [nr=%08x cardRr=%08x] [nt=%08x succ=%08x]"
|
||||||
cardRr, prng_successor(nonce, 64));
|
, cardAUTHSC
|
||||||
Shouldn't we respond anything here?
|
, (cardAUTHKEY == 0) ? 'A' : 'B'
|
||||||
Right now, we don't nack or anything, which causes the
|
, nr
|
||||||
reader to do a WUPA after a while. /Martin
|
, cardRr
|
||||||
-- which is the correct response. /piwi
|
, nonce // nt
|
||||||
|
, prng_successor(nonce, 64)
|
||||||
|
|
||||||
|
);
|
||||||
|
// Shouldn't we respond anything here?
|
||||||
|
// Right now, we don't nack or anything, which causes the
|
||||||
|
// reader to do a WUPA after a while. /Martin
|
||||||
|
// -- which is the correct response. /piwi
|
||||||
cardSTATE_TO_IDLE();
|
cardSTATE_TO_IDLE();
|
||||||
LogTrace(Uart.output, Uart.len, Uart.startTime*16 - DELAY_AIR2ARM_AS_TAG, Uart.endTime*16 - DELAY_AIR2ARM_AS_TAG, Uart.parity, TRUE);
|
LogTrace(Uart.output, Uart.len, Uart.startTime*16 - DELAY_AIR2ARM_AS_TAG, Uart.endTime*16 - DELAY_AIR2ARM_AS_TAG, Uart.parity, TRUE);
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
*/
|
|
||||||
|
|
||||||
ans = prng_successor(nonce, 96) ^ crypto1_word(pcs, 0, 0);
|
ans = prng_successor(nonce, 96) ^ crypto1_word(pcs, 0, 0);
|
||||||
num_to_bytes(ans, 4, rAUTH_AT);
|
num_to_bytes(ans, 4, rAUTH_AT);
|
||||||
EmSendCmd(rAUTH_AT, sizeof(rAUTH_AT));
|
EmSendCmd(rAUTH_AT, sizeof(rAUTH_AT));
|
||||||
LED_C_ON();
|
LED_C_ON();
|
||||||
|
|
||||||
if (MF_DBGLEVEL >= 4) {
|
if (MF_DBGLEVEL >= 1) {
|
||||||
Dbprintf("AUTH COMPLETED for sector %d with key %c. time=%d",
|
Dbprintf("AUTH COMPLETED for sector %d with key %c. time=%d",
|
||||||
cardAUTHSC,
|
cardAUTHSC,
|
||||||
cardAUTHKEY == 0 ? 'A' : 'B',
|
cardAUTHKEY == 0 ? 'A' : 'B',
|
||||||
|
@ -2842,24 +2845,26 @@ void Mifare1ksim(uint8_t flags, uint8_t exitAfterNReads, uint8_t arg2, uint8_t *
|
||||||
receivedCmd[0] == MIFARE_AUTH_KEYB) ) {
|
receivedCmd[0] == MIFARE_AUTH_KEYB) ) {
|
||||||
|
|
||||||
authTimer = GetTickCount();
|
authTimer = GetTickCount();
|
||||||
cardAUTHSC = receivedCmd[1] / 4; // received block num
|
cardAUTHSC = receivedCmd[1] / 4; // received block -> sector
|
||||||
cardAUTHKEY = receivedCmd[0] - 0x60; // & 1
|
cardAUTHKEY = receivedCmd[0] & 0x1;
|
||||||
crypto1_destroy(pcs);
|
crypto1_destroy(pcs);
|
||||||
|
|
||||||
|
// load key into crypto
|
||||||
crypto1_create(pcs, emlGetKey(cardAUTHSC, cardAUTHKEY));
|
crypto1_create(pcs, emlGetKey(cardAUTHSC, cardAUTHKEY));
|
||||||
|
|
||||||
if (!encrypted_data) {
|
if (!encrypted_data) {
|
||||||
// first authentication
|
// first authentication
|
||||||
crypto1_word(pcs, cuid ^ nonce, 0);// Update crypto state
|
// Update crypto state init (UID ^ NONCE)
|
||||||
num_to_bytes(nonce, 4, rAUTH_AT); // Send nonce
|
crypto1_word(pcs, cuid ^ nonce, 0);
|
||||||
|
num_to_bytes(nonce, 4, rAUTH_AT);
|
||||||
if (MF_DBGLEVEL >= 4) Dbprintf("Reader authenticating for block %d (0x%02x) with key %d",receivedCmd[1] ,receivedCmd[1],cardAUTHKEY );
|
}
|
||||||
|
|
||||||
} else {
|
} else {
|
||||||
// nested authentication
|
// nested authentication
|
||||||
ans = nonce ^ crypto1_word(pcs, cuid ^ nonce, 0);
|
ans = nonce ^ crypto1_word(pcs, cuid ^ nonce, 0);
|
||||||
num_to_bytes(ans, 4, rAUTH_AT);
|
num_to_bytes(ans, 4, rAUTH_AT);
|
||||||
|
|
||||||
if (MF_DBGLEVEL >= 4) Dbprintf("Reader doing nested authentication for block %d (0x%02x) with key %d",receivedCmd[1] ,receivedCmd[1],cardAUTHKEY );
|
if (MF_DBGLEVEL >= 3) Dbprintf("Reader doing nested authentication for block %d (0x%02x) with key %c", receivedCmd[1], receivedCmd[1], cardAUTHKEY == 0 ? 'A' : 'B');
|
||||||
}
|
}
|
||||||
|
|
||||||
EmSendCmd(rAUTH_AT, sizeof(rAUTH_AT));
|
EmSendCmd(rAUTH_AT, sizeof(rAUTH_AT));
|
||||||
|
|
|
@ -157,7 +157,7 @@ int mifare_classic_authex(struct Crypto1State *pcs, uint32_t uid, uint8_t blockN
|
||||||
|
|
||||||
// some statistic
|
// some statistic
|
||||||
if (!ntptr && (MF_DBGLEVEL >= 3))
|
if (!ntptr && (MF_DBGLEVEL >= 3))
|
||||||
Dbprintf("auth uid: %08x nt: %08x", uid, nt);
|
Dbprintf("auth uid: %08x | nr: %08x | nt: %08x", uid, nr, nt);
|
||||||
|
|
||||||
// save Nt
|
// save Nt
|
||||||
if (ntptr)
|
if (ntptr)
|
||||||
|
|
|
@ -1226,13 +1226,12 @@ int CmdLFfind(const char *Cmd) {
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
static command_t CommandTable[] =
|
static command_t CommandTable[] = {
|
||||||
{
|
|
||||||
{"help", CmdHelp, 1, "This help"},
|
{"help", CmdHelp, 1, "This help"},
|
||||||
{"animal", CmdLFFdx, 1, "{ Animal RFIDs... }"},
|
{"animal", CmdLFFdx, 1, "{ Animal RFIDs... }"},
|
||||||
{"awid", CmdLFAWID, 1, "{ AWID RFIDs... }"},
|
{"awid", CmdLFAWID, 1, "{ AWID RFIDs... }"},
|
||||||
{"cotag", CmdLFCOTAG, 1, "{ COTAG RFIDs... }"},
|
{"cotag", CmdLFCOTAG, 1, "{ COTAG RFIDs... }"},
|
||||||
{"em4x", CmdLFEM4X, 1, "{ EM4X RFIDs... }"},
|
{"em", CmdLFEM4X, 1, "{ EM4X RFIDs... }"},
|
||||||
{"guard", CmdLFGuard, 1, "{ Guardall RFIDs... }"},
|
{"guard", CmdLFGuard, 1, "{ Guardall RFIDs... }"},
|
||||||
{"hid", CmdLFHID, 1, "{ HID RFIDs... }"},
|
{"hid", CmdLFHID, 1, "{ HID RFIDs... }"},
|
||||||
{"hitag", CmdLFHitag, 1, "{ HITAG RFIDs... }"},
|
{"hitag", CmdLFHitag, 1, "{ HITAG RFIDs... }"},
|
||||||
|
|
|
@ -135,6 +135,7 @@ int WAI_PREFIX(getExecutablePath)(char* out, int capacity, int* dirname_length)
|
||||||
return WAI_PREFIX(getModulePath_)(NULL, out, capacity, dirname_length);
|
return WAI_PREFIX(getModulePath_)(NULL, out, capacity, dirname_length);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/*
|
||||||
WAI_NOINLINE
|
WAI_NOINLINE
|
||||||
WAI_FUNCSPEC
|
WAI_FUNCSPEC
|
||||||
int WAI_PREFIX(getModulePath)(char* out, int capacity, int* dirname_length)
|
int WAI_PREFIX(getModulePath)(char* out, int capacity, int* dirname_length)
|
||||||
|
@ -146,8 +147,7 @@ int WAI_PREFIX(getModulePath)(char* out, int capacity, int* dirname_length)
|
||||||
#pragma warning(push)
|
#pragma warning(push)
|
||||||
#pragma warning(disable: 4054)
|
#pragma warning(disable: 4054)
|
||||||
#endif
|
#endif
|
||||||
// if (GetModuleHandleEx(GET_MODULE_HANDLE_EX_FLAG_FROM_ADDRESS | GET_MODULE_HANDLE_EX_FLAG_UNCHANGED_REFCOUNT, (LPCTSTR)WAI_RETURN_ADDRESS(), &module))
|
if (GetModuleHandleEx(GET_MODULE_HANDLE_EX_FLAG_FROM_ADDRESS | GET_MODULE_HANDLE_EX_FLAG_UNCHANGED_REFCOUNT, (LPCTSTR)WAI_RETURN_ADDRESS(), &module))
|
||||||
module = GetModuleHandle("proxmark3.exe");
|
|
||||||
#if defined(_MSC_VER)
|
#if defined(_MSC_VER)
|
||||||
#pragma warning(pop)
|
#pragma warning(pop)
|
||||||
#endif
|
#endif
|
||||||
|
@ -157,6 +157,7 @@ int WAI_PREFIX(getModulePath)(char* out, int capacity, int* dirname_length)
|
||||||
|
|
||||||
return length;
|
return length;
|
||||||
}
|
}
|
||||||
|
*/
|
||||||
|
|
||||||
#elif defined(__linux__)
|
#elif defined(__linux__)
|
||||||
|
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue