mirror of
https://github.com/RfidResearchGroup/proxmark3.git
synced 2025-08-22 22:33:48 -07:00
fix some auth logic
This commit is contained in:
parent
27945e26d5
commit
98d806555e
1 changed files with 19 additions and 11 deletions
|
@ -350,12 +350,12 @@ static int ulc_authentication(uint8_t *key, bool switch_off_field) {
|
||||||
SendCommandMIX(CMD_HF_MIFAREUC_AUTH, switch_off_field, 0, 0, key, 16);
|
SendCommandMIX(CMD_HF_MIFAREUC_AUTH, switch_off_field, 0, 0, key, 16);
|
||||||
PacketResponseNG resp;
|
PacketResponseNG resp;
|
||||||
if (WaitForResponseTimeout(CMD_ACK, &resp, 1500) == false) {
|
if (WaitForResponseTimeout(CMD_ACK, &resp, 1500) == false) {
|
||||||
return 0;
|
return PM3_ETIMEOUT;
|
||||||
}
|
}
|
||||||
if (resp.oldarg[0] == 1) {
|
if (resp.oldarg[0] == 1) {
|
||||||
return 1;
|
return PM3_SUCCESS;
|
||||||
}
|
}
|
||||||
return 0;
|
return PM3_ESOFT;
|
||||||
}
|
}
|
||||||
|
|
||||||
static int trace_mfuc_try_key(uint8_t *key, int state, uint8_t (*authdata)[16]) {
|
static int trace_mfuc_try_key(uint8_t *key, int state, uint8_t (*authdata)[16]) {
|
||||||
|
@ -438,7 +438,7 @@ static int try_default_3des_keys(bool override, uint8_t **correct_key) {
|
||||||
|
|
||||||
for (uint8_t i = 0; i < ARRAYLEN(default_3des_keys); ++i) {
|
for (uint8_t i = 0; i < ARRAYLEN(default_3des_keys); ++i) {
|
||||||
uint8_t *key = default_3des_keys[i];
|
uint8_t *key = default_3des_keys[i];
|
||||||
if (ulc_authentication(key, true)) {
|
if (ulc_authentication(key, true) == PM3_SUCCESS) {
|
||||||
*correct_key = key;
|
*correct_key = key;
|
||||||
res = PM3_SUCCESS;
|
res = PM3_SUCCESS;
|
||||||
break;
|
break;
|
||||||
|
@ -509,14 +509,18 @@ static int try_default_aes_keys(bool override) {
|
||||||
}
|
}
|
||||||
|
|
||||||
static int ul_auth_select(iso14a_card_select_t *card, uint64_t tagtype, bool hasAuthKey, uint8_t *authkey, uint8_t *pack, uint8_t packSize) {
|
static int ul_auth_select(iso14a_card_select_t *card, uint64_t tagtype, bool hasAuthKey, uint8_t *authkey, uint8_t *pack, uint8_t packSize) {
|
||||||
|
|
||||||
if (hasAuthKey && (tagtype & MFU_TT_UL_C)) {
|
if (hasAuthKey && (tagtype & MFU_TT_UL_C)) {
|
||||||
//will select card automatically and close connection on error
|
//will select card automatically and close connection on error
|
||||||
if (!ulc_authentication(authkey, false)) {
|
if (ulc_authentication(authkey, false) != PM3_SUCCESS) {
|
||||||
PrintAndLogEx(WARNING, "Authentication Failed UL-C");
|
PrintAndLogEx(WARNING, "Authentication Failed UL-C");
|
||||||
return PM3_ESOFT;
|
return PM3_ESOFT;
|
||||||
}
|
}
|
||||||
|
|
||||||
} else {
|
} else {
|
||||||
if (!ul_select(card)) return PM3_ESOFT;
|
if (ul_select(card) == false) {
|
||||||
|
return PM3_ESOFT;
|
||||||
|
}
|
||||||
|
|
||||||
if (hasAuthKey) {
|
if (hasAuthKey) {
|
||||||
if (ulev1_requestAuthentication(authkey, pack, packSize) == -1) {
|
if (ulev1_requestAuthentication(authkey, pack, packSize) == -1) {
|
||||||
|
@ -2146,6 +2150,10 @@ static int CmdHF14AMfUInfo(const char *Cmd) {
|
||||||
}
|
}
|
||||||
DropField();
|
DropField();
|
||||||
PrintAndLogEx(INFO, "Done!");
|
PrintAndLogEx(INFO, "Done!");
|
||||||
|
|
||||||
|
if (ul_auth_select(&card, tagtype, has_auth_key, authkeyptr, pack, sizeof(pack)) == PM3_ESOFT) {
|
||||||
|
return PM3_ESOFT;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
@ -3541,21 +3549,21 @@ static int CmdHF14AMfUCAuth(const char *Cmd) {
|
||||||
authKeyPtr = SwapEndian64(authenticationkey, 16, 8);
|
authKeyPtr = SwapEndian64(authenticationkey, 16, 8);
|
||||||
}
|
}
|
||||||
|
|
||||||
bool isok = false;
|
int isok;
|
||||||
|
|
||||||
// If no hex key is specified, try default keys
|
// If no hex key is specified, try default keys
|
||||||
if (ak_len == 0) {
|
if (ak_len == 0) {
|
||||||
isok = (try_default_3des_keys(false, &authKeyPtr) == PM3_SUCCESS);
|
isok = try_default_3des_keys(false, &authKeyPtr);
|
||||||
} else {
|
} else {
|
||||||
// try user-supplied
|
// try user-supplied
|
||||||
isok = ulc_authentication(authKeyPtr, !keep_field_on);
|
isok = ulc_authentication(authKeyPtr, !keep_field_on);
|
||||||
}
|
}
|
||||||
|
|
||||||
if (isok)
|
if (isok == PM3_SUCCESS) {
|
||||||
PrintAndLogEx(SUCCESS, "Authentication success. 3des key: " _GREEN_("%s"), sprint_hex_inrow(authKeyPtr, 16));
|
PrintAndLogEx(SUCCESS, "Authentication success. 3des key: " _GREEN_("%s"), sprint_hex_inrow(authKeyPtr, 16));
|
||||||
else
|
} else {
|
||||||
PrintAndLogEx(WARNING, "Authentication ( " _RED_("fail") " )");
|
PrintAndLogEx(WARNING, "Authentication ( " _RED_("fail") " )");
|
||||||
|
}
|
||||||
return PM3_SUCCESS;
|
return PM3_SUCCESS;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue