Merge pull request #1587 from merlokk/mst

make style
This commit is contained in:
Oleg Moiseenko 2022-02-05 13:37:41 +02:00 committed by GitHub
commit efb919f529
No known key found for this signature in database
GPG key ID: 4AEE18F83AFDEB23
15 changed files with 126 additions and 121 deletions

View file

@ -69,7 +69,7 @@ void tdes_nxp_receive(const void *in, void *out, size_t length, const void *key,
if (length % 8) return; if (length % 8) return;
if (keymode == 2) if (keymode == 2)
mbedtls_des3_set2key_dec(&ctx3, key); mbedtls_des3_set2key_dec(&ctx3, key);
else else
mbedtls_des3_set3key_dec(&ctx3, key); mbedtls_des3_set3key_dec(&ctx3, key);
uint8_t i; uint8_t i;

View file

@ -9,10 +9,10 @@
#define lconfig_h #define lconfig_h
#if defined(__APPLE__) #if defined(__APPLE__)
#include "TargetConditionals.h" #include "TargetConditionals.h"
#if TARGET_OS_IOS || TARGET_OS_WATCH || TARGET_OS_TV #if TARGET_OS_IOS || TARGET_OS_WATCH || TARGET_OS_TV
#define system(s) ((s)==NULL ? 0 : -1) #define system(s) ((s)==NULL ? 0 : -1)
#endif // end iOS #endif // end iOS
#endif #endif
#include <limits.h> #include <limits.h>

View file

@ -67,7 +67,7 @@ arguments = [[
-s Signature data (64 hexsymbols), set signature data on tag. -s Signature data (64 hexsymbols), set signature data on tag.
-o OTP data (8 hexsymbols), set `One-Time Programmable` data on tag. -o OTP data (8 hexsymbols), set `One-Time Programmable` data on tag.
-v Version data (16 hexsymbols), set version data on tag. -v Version data (16 hexsymbols), set version data on tag.
-q ATQA/SAK (<2b ATQA><1b SAK> hexsymbols), set ATQA/SAK on tag. -q ATQA/SAK (<2b ATQA><1b SAK> hexsymbols), set ATQA/SAK on tag.
-g GTU Mode (1 hexsymbol), set GTU shadow mode. -g GTU Mode (1 hexsymbol), set GTU shadow mode.
-z ATS (<1b length><0-16 ATS> hexsymbols), Configure ATS. Length set to 00 will disable ATS. -z ATS (<1b length><0-16 ATS> hexsymbols), Configure ATS. Length set to 00 will disable ATS.
-w Wipe tag. 0 for Mifare or 1 for UL. Fills tag with zeros and put default values for type selected. -w Wipe tag. 0 for Mifare or 1 for UL. Fills tag with zeros and put default values for type selected.
@ -177,7 +177,7 @@ local function read_config()
local info = connect() local info = connect()
if not info then return false, "Can't select card" end if not info then return false, "Can't select card" end
-- read Ultimate Magic Card CONFIG -- read Ultimate Magic Card CONFIG
if magicconfig == nil then if magicconfig == nil then
magicconfig = send("CF".._key.."C6") magicconfig = send("CF".._key.."C6")
else print('No Config') else print('No Config')
end end
@ -195,7 +195,7 @@ local function read_config()
if ats:sub(1,2) == '00' then atsstr = 'Disabled' if ats:sub(1,2) == '00' then atsstr = 'Disabled'
else atsstr = (string.sub(ats, 3)) else atsstr = (string.sub(ats, 3))
end end
if ulprotocol == '00' then if ulprotocol == '00' then
cardprotocol = 'MIFARE Classic Protocol' cardprotocol = 'MIFARE Classic Protocol'
ultype = 'Disabled' ultype = 'Disabled'
if uidlength == '00' then if uidlength == '00' then
@ -211,11 +211,11 @@ local function read_config()
elseif atqaf == '00 42' and sak == '18' then cardtype = 'MIFARE 4k S70 7-byte UID' elseif atqaf == '00 42' and sak == '18' then cardtype = 'MIFARE 4k S70 7-byte UID'
end end
end end
elseif ulprotocol == '01' then elseif ulprotocol == '01' then
-- Read Ultralight config only if UL protocol is enabled -- Read Ultralight config only if UL protocol is enabled
cardprotocol = 'MIFARE Ultralight/NTAG' cardprotocol = 'MIFARE Ultralight/NTAG'
block0 = send("3000") block0 = send("3000")
uid0 = block0:sub(1,6) uid0 = block0:sub(1,6)
uid = uid0..block0:sub(9,16) uid = uid0..block0:sub(9,16)
if ulmode == '00' then ultype = 'Ultralight EV1' if ulmode == '00' then ultype = 'Ultralight EV1'
elseif ulmode == '01' then ultype = 'NTAG21x' elseif ulmode == '01' then ultype = 'NTAG21x'
@ -241,7 +241,7 @@ local function read_config()
elseif cversion == '0004040502021503' then versionstr = 'NTAG I2C 2K PLUS' elseif cversion == '0004040502021503' then versionstr = 'NTAG I2C 2K PLUS'
elseif cversion == '0004040401000F03' then versionstr = 'NTAG 213F' elseif cversion == '0004040401000F03' then versionstr = 'NTAG 213F'
elseif cversion == '0004040401001303' then versionstr = 'NTAG 216F' elseif cversion == '0004040401001303' then versionstr = 'NTAG 216F'
end end
-- read PWD -- read PWD
cpwd = send("30F0"):sub(1,8) cpwd = send("30F0"):sub(1,8)
pwd = send("30E5"):sub(1,8) pwd = send("30E5"):sub(1,8)
@ -256,7 +256,7 @@ local function read_config()
lib14a.disconnect() lib14a.disconnect()
end end
if _print < 1 then if _print < 1 then
print(string.rep('=', 88)) print(string.rep('=', 88))
print('\t\t\tUltimate Magic Card Configuration') print('\t\t\tUltimate Magic Card Configuration')
print(string.rep('=', 88)) print(string.rep('=', 88))
print(' - Raw Config ', string.sub(magicconfig, 1, -9)) print(' - Raw Config ', string.sub(magicconfig, 1, -9))
@ -273,10 +273,10 @@ local function read_config()
print(' - ATQA ', atqaf) print(' - ATQA ', atqaf)
print(' - SAK ', sak) print(' - SAK ', sak)
if ulprotocol == '01' then if ulprotocol == '01' then
print('') print('')
print(string.rep('=', 88)) print(string.rep('=', 88))
print('\t\t\tMagic UL/NTAG 21* Configuration') print('\t\t\tMagic UL/NTAG 21* Configuration')
print(string.rep('=', 88)) print(string.rep('=', 88))
print(' - ATS ', atsstr) print(' - ATS ', atsstr)
print(' - Password ', '[0xE5] '..pwd, '[0xF0] '..cpwd) print(' - Password ', '[0xE5] '..pwd, '[0xF0] '..cpwd)
print(' - Pack ', '[0xE6] '..pack, '[0xF1] '..cpack) print(' - Pack ', '[0xE6] '..pack, '[0xF1] '..cpack)
@ -307,7 +307,7 @@ local function write_uid(useruid)
local uidbytes = utils.ConvertHexToBytes(useruid) local uidbytes = utils.ConvertHexToBytes(useruid)
local bcc1 = bxor(bxor(bxor(uidbytes[1], uidbytes[2]), uidbytes[3]), uidbytes[4]) local bcc1 = bxor(bxor(bxor(uidbytes[1], uidbytes[2]), uidbytes[3]), uidbytes[4])
local block0 = string.format('%02X%02X%02X%02X%02X', uidbytes[1], uidbytes[2], uidbytes[3], uidbytes[4], bcc1) local block0 = string.format('%02X%02X%02X%02X%02X', uidbytes[1], uidbytes[2], uidbytes[3], uidbytes[4], bcc1)
local resp = send('CF'.._key..'CD00'..block0) local resp = send('CF'.._key..'CD00'..block0)
-- Writes a MFUL UID with bcc1, bcc2 using NTAG21xx commands. -- Writes a MFUL UID with bcc1, bcc2 using NTAG21xx commands.
elseif ulprotocol == '01' then elseif ulprotocol == '01' then
-- uid string checks -- uid string checks
@ -339,7 +339,7 @@ end
-- Write ATQA/SAK -- Write ATQA/SAK
local function write_atqasak(atqasak) local function write_atqasak(atqasak)
-- read CONFIG -- read CONFIG
if not magicconfig then if not magicconfig then
_print = 1 _print = 1
read_config() read_config()
end end
@ -350,16 +350,16 @@ end
local atqauser2 = atqasak:sub(3,4) local atqauser2 = atqasak:sub(3,4)
local atqauserf = atqauser2..atqauser1 local atqauserf = atqauser2..atqauser1
local sakuser = atqasak:sub(5,6) local sakuser = atqasak:sub(5,6)
if sakuser == '04' then if sakuser == '04' then
print('Never set SAK bit 3 (e.g. SAK=04), it indicates an extra cascade level is required') print('Never set SAK bit 3 (e.g. SAK=04), it indicates an extra cascade level is required')
return nil return nil
elseif (sakuser == '20' or sakuser == '28') and atslen == '00' then elseif (sakuser == '20' or sakuser == '28') and atslen == '00' then
print('When SAK equals 20 or 28, ATS must be turned on') print('When SAK equals 20 or 28, ATS must be turned on')
return nil return nil
elseif atqauser2 == '40' then elseif atqauser2 == '40' then
print('ATQA of [00 40] will cause the card to not answer.') print('ATQA of [00 40] will cause the card to not answer.')
return nil return nil
else else
local info = connect() local info = connect()
if not info then return false, "Can't select card" end if not info then return false, "Can't select card" end
print('New ATQA: '..atqauser1..' '..atqauser2..' New SAK: '..sakuser) print('New ATQA: '..atqauser1..' '..atqauser2..' New SAK: '..sakuser)
@ -376,7 +376,7 @@ end
-- Write NTAG PWD -- Write NTAG PWD
local function write_ntagpwd(ntagpwd) local function write_ntagpwd(ntagpwd)
-- read CONFIG -- read CONFIG
if not magicconfig then if not magicconfig then
_print = 1 _print = 1
read_config() read_config()
end end
@ -389,7 +389,7 @@ local function write_ntagpwd(ntagpwd)
if not info then return false, "Can't select card" end if not info then return false, "Can't select card" end
print('Writing new NTAG PWD ', ntagpwd) print('Writing new NTAG PWD ', ntagpwd)
local resp = send('A2E5'..ntagpwd) -- must add both for password to be read by the reader command B1 local resp = send('A2E5'..ntagpwd) -- must add both for password to be read by the reader command B1
local resp = send('A2F0'..ntagpwd) local resp = send('A2F0'..ntagpwd)
lib14a.disconnect() lib14a.disconnect()
if resp == nil then if resp == nil then
return nil, 'Failed to write password' return nil, 'Failed to write password'
@ -401,7 +401,7 @@ end
-- Write PACK -- Write PACK
local function write_pack(userpack) local function write_pack(userpack)
-- read CONFIG -- read CONFIG
if not magicconfig then if not magicconfig then
_print = 1 _print = 1
read_config() read_config()
end end
@ -426,7 +426,7 @@ local function write_otp(block3)
if #block3 == 0 then return nil, 'empty OTP string' end if #block3 == 0 then return nil, 'empty OTP string' end
if #block3 ~= 8 then return nil, 'OTP wrong length. Should be 4 hex bytes' end if #block3 ~= 8 then return nil, 'OTP wrong length. Should be 4 hex bytes' end
-- read CONFIG -- read CONFIG
if not magicconfig then if not magicconfig then
_print = 1 _print = 1
read_config() read_config()
end end
@ -450,7 +450,7 @@ local function write_version(data)
if #data == 0 then return nil, 'empty version string' end if #data == 0 then return nil, 'empty version string' end
if #data ~= 16 then return nil, 'version wrong length. Should be 8 hex bytes' end if #data ~= 16 then return nil, 'version wrong length. Should be 8 hex bytes' end
-- read CONFIG -- read CONFIG
if not magicconfig then if not magicconfig then
_print = 1 _print = 1
read_config() read_config()
end end
@ -478,7 +478,7 @@ local function write_signature(data)
if #data == 0 then return nil, 'empty data string' end if #data == 0 then return nil, 'empty data string' end
if #data ~= 64 then return nil, 'data wrong length. Should be 32 hex bytes' end if #data ~= 64 then return nil, 'data wrong length. Should be 32 hex bytes' end
-- read CONFIG -- read CONFIG
if not magicconfig then if not magicconfig then
_print = 1 _print = 1
read_config() read_config()
end end
@ -510,16 +510,16 @@ local function write_gtu(gtu)
if not info then return false, "Can't select card" end if not info then return false, "Can't select card" end
if gtu == '00' then if gtu == '00' then
print('Enabling GTU Pre-Write') print('Enabling GTU Pre-Write')
send('CF'.._key..'32'..gtu) send('CF'.._key..'32'..gtu)
elseif gtu == '01' then elseif gtu == '01' then
print('Enabling GTU Restore Mode') print('Enabling GTU Restore Mode')
send('CF'.._key..'32'..gtu) send('CF'.._key..'32'..gtu)
elseif gtu == '02' then elseif gtu == '02' then
print('Disabled GTU') print('Disabled GTU')
send('CF'.._key..'32'..gtu) send('CF'.._key..'32'..gtu)
elseif gtu == '03' then elseif gtu == '03' then
print('Disabled GTU, high speed R/W mode for Ultralight') print('Disabled GTU, high speed R/W mode for Ultralight')
send('CF'.._key..'32'..gtu) send('CF'.._key..'32'..gtu)
else else
print('Failed to set GTU mode') print('Failed to set GTU mode')
end end
@ -536,7 +536,7 @@ local function write_ats(atsuser)
local atscardlen = atsuser:sub(1,2) local atscardlen = atsuser:sub(1,2)
local atscardlendecimal = tonumber(atscardlen, 16) local atscardlendecimal = tonumber(atscardlen, 16)
local atsf = string.sub(atsuser, 3) local atsf = string.sub(atsuser, 3)
if (#atsf / 2) ~= atscardlendecimal then if (#atsf / 2) ~= atscardlendecimal then
oops('Given length of ATS ('..atscardlendecimal..') does not match the ATS_length ('..(#atsf / 2)..')') oops('Given length of ATS ('..atscardlendecimal..') does not match the ATS_length ('..(#atsf / 2)..')')
return true, 'Ok' return true, 'Ok'
else else
@ -556,7 +556,7 @@ local function write_ulp(ulp)
if #ulp > 2 then return nil, 'type wrong length. Should be 1 hex byte' end if #ulp > 2 then return nil, 'type wrong length. Should be 1 hex byte' end
local info = connect() local info = connect()
if not info then return false, "Can't select card" end if not info then return false, "Can't select card" end
if ulp == '00' then if ulp == '00' then
print('Changing card to Mifare Classic Protocol') print('Changing card to Mifare Classic Protocol')
send("CF".._key.."69"..ulp) send("CF".._key.."69"..ulp)
elseif ulp == '01' then elseif ulp == '01' then
@ -576,7 +576,7 @@ local function write_ulm(ulm)
if #ulm > 2 then return nil, 'type wrong length. Should be 1 hex byte' end if #ulm > 2 then return nil, 'type wrong length. Should be 1 hex byte' end
local info = connect() local info = connect()
if not info then return false, "Can't select card" end if not info then return false, "Can't select card" end
if ulm == '00' then if ulm == '00' then
print('Changing card UL mode to Ultralight EV1') print('Changing card UL mode to Ultralight EV1')
send("CF".._key.."6A"..ulm) send("CF".._key.."6A"..ulm)
elseif ulm == '01' then elseif ulm == '01' then
@ -855,7 +855,7 @@ local function wipe(wtype)
send("CF".._key.."CD000102030404080400000000000000BEAF") send("CF".._key.."CD000102030404080400000000000000BEAF")
local err, msg, resp local err, msg, resp
local cmd_empty = 'CF'.._key..'CD%02X00000000000000000000000000000000' local cmd_empty = 'CF'.._key..'CD%02X00000000000000000000000000000000'
local cmd_cfg1 = 'CF'.._key..'CD%02XFFFFFFFFFFFFFF078069FFFFFFFFFFFF' local cmd_cfg1 = 'CF'.._key..'CD%02XFFFFFFFFFFFFFF078069FFFFFFFFFFFF'
for b = 1, 0xFB do for b = 1, 0xFB do
if b == 0x03 or b == 0x07 or b == 0x0B or b == 0x0F or b == 0x13 or b == 0x17 or b == 0x1B or b == 0x1F or b == 0x23 or b == 0x27 or b == 0x2B or b == 0x2F or b == 0x33 or b == 0x37 or b == 0x3B or b == 0x3F then if b == 0x03 or b == 0x07 or b == 0x0B or b == 0x0F or b == 0x13 or b == 0x17 or b == 0x1B or b == 0x1F or b == 0x23 or b == 0x27 or b == 0x2B or b == 0x2F or b == 0x33 or b == 0x37 or b == 0x3B or b == 0x3F then
local cmd = (cmd_cfg1):format(b) local cmd = (cmd_cfg1):format(b)

View file

@ -797,7 +797,7 @@ int CmdHF14ASniff(const char *Cmd) {
} }
int ExchangeRAW14a(uint8_t *datain, int datainlen, bool activateField, bool leaveSignalON, uint8_t *dataout, int maxdataoutlen, int *dataoutlen, bool silentMode) { int ExchangeRAW14a(uint8_t *datain, int datainlen, bool activateField, bool leaveSignalON, uint8_t *dataout, int maxdataoutlen, int *dataoutlen, bool silentMode) {
uint16_t cmdc = 0; uint16_t cmdc = 0;
*dataoutlen = 0; *dataoutlen = 0;

View file

@ -1050,7 +1050,7 @@ static int CmdHF14AMfRestore(const char *Cmd) {
PrintAndLogEx(INFO, "Restoring " _YELLOW_("%s")" to card", datafilename); PrintAndLogEx(INFO, "Restoring " _YELLOW_("%s")" to card", datafilename);
// main loop for restoreing. // main loop for restoreing.
// a bit more complicated than needed // a bit more complicated than needed
// this is because of two things. // this is because of two things.
// 1. we are setting keys from a key file or using the existing ones in the dump // 1. we are setting keys from a key file or using the existing ones in the dump
@ -1060,11 +1060,11 @@ static int CmdHF14AMfRestore(const char *Cmd) {
for (uint8_t b = 0; b < mfNumBlocksPerSector(s); b++) { for (uint8_t b = 0; b < mfNumBlocksPerSector(s); b++) {
uint8_t bldata[MFBLOCK_SIZE] = {0x00}; uint8_t bldata[MFBLOCK_SIZE] = {0x00};
memcpy(bldata, dump, MFBLOCK_SIZE); memcpy(bldata, dump, MFBLOCK_SIZE);
// if sector trailer // if sector trailer
if (mfNumBlocksPerSector(s)-1 == b) { if (mfNumBlocksPerSector(s) - 1 == b) {
if (use_keyfile_for_auth == false) { if (use_keyfile_for_auth == false) {
// replace KEY A // replace KEY A
bldata[0] = (keyA[s][0]); bldata[0] = (keyA[s][0]);

View file

@ -3404,7 +3404,7 @@ static int DesfireCreateFileParameters(
uint8_t pfileid, uint8_t pisofileid, uint8_t pfileid, uint8_t pisofileid,
uint8_t amodeid, uint8_t frightsid, uint8_t amodeid, uint8_t frightsid,
uint8_t r_modeid, uint8_t w_modeid, uint8_t rw_modeid, uint8_t ch_modeid, uint8_t r_modeid, uint8_t w_modeid, uint8_t rw_modeid, uint8_t ch_modeid,
uint8_t *data, size_t *datalen ) { uint8_t *data, size_t *datalen) {
*datalen = 0; *datalen = 0;
@ -4475,10 +4475,10 @@ static int CmdHF14ADesClearRecordFile(const char *Cmd) {
} }
static int DesfileReadISOFileAndPrint(DesfireContext_t *dctx, static int DesfileReadISOFileAndPrint(DesfireContext_t *dctx,
bool select_current_file, uint8_t fnum, bool select_current_file, uint8_t fnum,
uint16_t fisoid, int filetype, uint16_t fisoid, int filetype,
uint32_t offset, uint32_t length, uint32_t offset, uint32_t length,
bool noauth, bool verbose) { bool noauth, bool verbose) {
if (filetype == RFTAuto) { if (filetype == RFTAuto) {
PrintAndLogEx(ERR, "ISO mode needs to specify file type"); PrintAndLogEx(ERR, "ISO mode needs to specify file type");
@ -4572,10 +4572,10 @@ static int DesfileReadISOFileAndPrint(DesfireContext_t *dctx,
return PM3_SUCCESS; return PM3_SUCCESS;
} }
static int DesfileReadFileAndPrint(DesfireContext_t *dctx, static int DesfileReadFileAndPrint(DesfireContext_t *dctx,
uint8_t fnum, int filetype, uint8_t fnum, int filetype,
uint32_t offset, uint32_t length, uint32_t offset, uint32_t length,
uint32_t maxdatafilelength, bool noauth, bool verbose) { uint32_t maxdatafilelength, bool noauth, bool verbose) {
int res; int res;
// length of record for record file // length of record for record file
@ -4889,10 +4889,10 @@ static int CmdHF14ADesReadData(const char *Cmd) {
} }
static int DesfileWriteISOFile(DesfireContext_t *dctx, static int DesfileWriteISOFile(DesfireContext_t *dctx,
bool select_current_file, uint8_t fnum, bool select_current_file, uint8_t fnum,
uint16_t fisoid, int filetype, uint16_t fisoid, int filetype,
uint32_t offset, uint8_t *data, uint32_t offset, uint8_t *data,
uint32_t datalen, bool verbose) { uint32_t datalen, bool verbose) {
if (filetype == RFTAuto) { if (filetype == RFTAuto) {
PrintAndLogEx(ERR, "ISO mode needs to specify file type"); PrintAndLogEx(ERR, "ISO mode needs to specify file type");

View file

@ -266,9 +266,9 @@ static int CmdGallagherClone(const char *Cmd) {
} }
PrintAndLogEx(INFO, "Preparing to clone Gallagher to " _YELLOW_("%s") " from %s.", PrintAndLogEx(INFO, "Preparing to clone Gallagher to " _YELLOW_("%s") " from %s.",
cardtype, cardtype,
use_raw ? "raw hex" : "specified data" use_raw ? "raw hex" : "specified data"
); );
print_blocks(blocks, ARRAYLEN(blocks)); print_blocks(blocks, ARRAYLEN(blocks));
if (em) { if (em) {

View file

@ -236,7 +236,7 @@ static int CmdPyramidClone(const char *Cmd) {
"The facility-code is 8-bit and the card number is 16-bit. Larger values are truncated.\n" "The facility-code is 8-bit and the card number is 16-bit. Larger values are truncated.\n"
"Currently only works on 26bit", "Currently only works on 26bit",
"lf pyramid clone --fc 123 --cn 11223\n" "lf pyramid clone --fc 123 --cn 11223\n"
"lf pyramid clone --raw 0001010101010101010440013223921c\n" "lf pyramid clone --raw 0001010101010101010440013223921c\n"
"lf pyramid clone --fc 123 --cn 11223 --q5 -> encode for Q5/T5555 tag\n" "lf pyramid clone --fc 123 --cn 11223 --q5 -> encode for Q5/T5555 tag\n"
"lf pyramid clone --fc 123 --cn 11223 --em -> encode for EM4305/4469\n" "lf pyramid clone --fc 123 --cn 11223 --em -> encode for EM4305/4469\n"
); );
@ -285,7 +285,7 @@ static int CmdPyramidClone(const char *Cmd) {
if (use_raw) { if (use_raw) {
PrintAndLogEx(FAILED, "Can't specify both raw and fc/cn at the same time"); PrintAndLogEx(FAILED, "Can't specify both raw and fc/cn at the same time");
return PM3_EINVARG; return PM3_EINVARG;
} }
} }
uint32_t blocks[5]; uint32_t blocks[5];
@ -332,9 +332,9 @@ static int CmdPyramidClone(const char *Cmd) {
} }
PrintAndLogEx(INFO, "Preparing to clone Farpointe/Pyramid to " _YELLOW_("%s") " from %s.", PrintAndLogEx(INFO, "Preparing to clone Farpointe/Pyramid to " _YELLOW_("%s") " from %s.",
cardtype, cardtype,
use_raw ? "raw hex" : "specified data" use_raw ? "raw hex" : "specified data"
); );
print_blocks(blocks, ARRAYLEN(blocks)); print_blocks(blocks, ARRAYLEN(blocks));
if (em) { if (em) {
@ -392,12 +392,12 @@ static int CmdPyramidSim(const char *Cmd) {
if (use_raw) { if (use_raw) {
PrintAndLogEx(FAILED, "Can't specify both raw and fc/cn at the same time"); PrintAndLogEx(FAILED, "Can't specify both raw and fc/cn at the same time");
return PM3_EINVARG; return PM3_EINVARG;
} }
} }
uint8_t bs[sizeof(raw) * 8]; uint8_t bs[sizeof(raw) * 8];
memset(bs, 0x00, sizeof(bs)); memset(bs, 0x00, sizeof(bs));
if (use_raw == false) { if (use_raw == false) {
uint32_t facilitycode = (fc & 0x000000FF); uint32_t facilitycode = (fc & 0x000000FF);
uint32_t cardnumber = (cn & 0x0000FFFF); uint32_t cardnumber = (cn & 0x0000FFFF);

View file

@ -79,7 +79,7 @@ static bool merge_topaz_reader_frames(uint32_t timestamp, uint32_t *duration, ui
return true; return true;
} }
static uint8_t calc_pos(uint8_t *d){ static uint8_t calc_pos(uint8_t *d) {
// PCB [CID] [NAD] [INF] CRC CRC // PCB [CID] [NAD] [INF] CRC CRC
uint8_t pos = 1; uint8_t pos = 1;
if ((d[0] & 0x08) == 0x08) // cid byte following if ((d[0] & 0x08) == 0x08) // cid byte following
@ -88,7 +88,7 @@ static uint8_t calc_pos(uint8_t *d){
if ((d[0] & 0x04) == 0x04) // nad byte following if ((d[0] & 0x04) == 0x04) // nad byte following
pos++; pos++;
return pos; return pos;
} }
static uint8_t extract_uid[10] = {0}; static uint8_t extract_uid[10] = {0};
@ -99,7 +99,7 @@ static uint8_t extract_epurse[8] = {0};
static uint16_t extractChallenges(uint16_t tracepos, uint16_t traceLen, uint8_t *trace) { static uint16_t extractChallenges(uint16_t tracepos, uint16_t traceLen, uint8_t *trace) {
// sanity check // sanity check
if (is_last_record(tracepos, traceLen)) { if (is_last_record(tracepos, traceLen)) {
return traceLen; return traceLen;
} }
@ -111,9 +111,9 @@ static uint16_t extractChallenges(uint16_t tracepos, uint16_t traceLen, uint8_t
// sanity check tracking position is less then available trace size // sanity check tracking position is less then available trace size
if (tracepos + TRACELOG_HDR_LEN + data_len + TRACELOG_PARITY_LEN(hdr) > traceLen) { if (tracepos + TRACELOG_HDR_LEN + data_len + TRACELOG_PARITY_LEN(hdr) > traceLen) {
PrintAndLogEx(DEBUG, "trace pos offset %"PRIu64 " larger than reported tracelen %u", PrintAndLogEx(DEBUG, "trace pos offset %"PRIu64 " larger than reported tracelen %u",
tracepos + TRACELOG_HDR_LEN + data_len + TRACELOG_PARITY_LEN(hdr), tracepos + TRACELOG_HDR_LEN + data_len + TRACELOG_PARITY_LEN(hdr),
traceLen traceLen
); );
return traceLen; return traceLen;
} }
@ -139,7 +139,7 @@ static uint16_t extractChallenges(uint16_t tracepos, uint16_t traceLen, uint8_t
} }
} }
// extract MFU-C // extract MFU-C
switch (frame[0]) { switch (frame[0]) {
case MIFARE_ULC_AUTH_1: { case MIFARE_ULC_AUTH_1: {
if (data_len != 4) { if (data_len != 4) {
@ -154,7 +154,7 @@ static uint16_t extractChallenges(uint16_t tracepos, uint16_t traceLen, uint8_t
} }
if (next_hdr->frame[0] != MIFARE_ULC_AUTH_2) { if (next_hdr->frame[0] != MIFARE_ULC_AUTH_2) {
break; break;
} }
PrintAndLogEx(INFO, "MFU-C AUTH"); PrintAndLogEx(INFO, "MFU-C AUTH");
@ -166,16 +166,16 @@ static uint16_t extractChallenges(uint16_t tracepos, uint16_t traceLen, uint8_t
if (next_hdr->frame[0] == MIFARE_ULC_AUTH_2 && next_hdr->data_len == 19) { if (next_hdr->frame[0] == MIFARE_ULC_AUTH_2 && next_hdr->data_len == 19) {
PrintAndLogEx(NORMAL, "%s", sprint_hex_inrow(next_hdr->frame + 1, 16)); PrintAndLogEx(NORMAL, "%s", sprint_hex_inrow(next_hdr->frame + 1, 16));
} }
return tracepos; return tracepos;
} }
} }
// extract iCLASS // extract iCLASS
// --csn 9655a400f8ff12e0 --epurse f0ffffffffffffff --macs 0000000089cb984b // --csn 9655a400f8ff12e0 --epurse f0ffffffffffffff --macs 0000000089cb984b
if (hdr->isResponse == false) { if (hdr->isResponse == false) {
uint8_t c = frame[0] & 0x0F; uint8_t c = frame[0] & 0x0F;
switch (c) { switch (c) {
case ICLASS_CMD_SELECT: { case ICLASS_CMD_SELECT: {
@ -208,7 +208,7 @@ static uint16_t extractChallenges(uint16_t tracepos, uint16_t traceLen, uint8_t
if (extract_uidlen == 8) { if (extract_uidlen == 8) {
PrintAndLogEx(INFO, "hf iclass lookup --csn %s " NOLF, sprint_hex_inrow(extract_uid, extract_uidlen)); PrintAndLogEx(INFO, "hf iclass lookup --csn %s " NOLF, sprint_hex_inrow(extract_uid, extract_uidlen));
PrintAndLogEx(NORMAL, "--epurse %s " NOLF, sprint_hex_inrow(extract_epurse, 8)); PrintAndLogEx(NORMAL, "--epurse %s " NOLF, sprint_hex_inrow(extract_epurse, 8));
PrintAndLogEx(NORMAL, "--macs %s " NOLF, sprint_hex_inrow(frame + 1, 8) ); PrintAndLogEx(NORMAL, "--macs %s " NOLF, sprint_hex_inrow(frame + 1, 8));
PrintAndLogEx(NORMAL, "-f iclass_default_keys.dic"); PrintAndLogEx(NORMAL, "-f iclass_default_keys.dic");
return tracepos; return tracepos;
} }
@ -248,7 +248,7 @@ static uint16_t extractChallenges(uint16_t tracepos, uint16_t traceLen, uint8_t
memcpy(extract_uid + extract_uidlen, frame + 2, 4); memcpy(extract_uid + extract_uidlen, frame + 2, 4);
extract_uidlen += 4; extract_uidlen += 4;
PrintAndLogEx(INFO, "UID... " _YELLOW_("%s"), sprint_hex_inrow(extract_uid, extract_uidlen)); PrintAndLogEx(INFO, "UID... " _YELLOW_("%s"), sprint_hex_inrow(extract_uid, extract_uidlen));
} }
} }
break; break;
} }
@ -279,9 +279,9 @@ static uint16_t extractChallenges(uint16_t tracepos, uint16_t traceLen, uint8_t
switch (frame[pos]) { switch (frame[pos]) {
case MFDES_AUTHENTICATE: { case MFDES_AUTHENTICATE: {
// Assume wrapped or unwrapped // Assume wrapped or unwrapped
PrintAndLogEx(INFO, "AUTH NATIVE (keyNo %d)", frame[pos + long_jmp]); PrintAndLogEx(INFO, "AUTH NATIVE (keyNo %d)", frame[pos + long_jmp]);
if (hdr->isResponse == false && next_record_is_response(tracepos, trace)) { if (hdr->isResponse == false && next_record_is_response(tracepos, trace)) {
tracelog_hdr_t *next_hdr = (tracelog_hdr_t *)(trace + tracepos); tracelog_hdr_t *next_hdr = (tracelog_hdr_t *)(trace + tracepos);
@ -299,12 +299,12 @@ static uint16_t extractChallenges(uint16_t tracepos, uint16_t traceLen, uint8_t
PrintAndLogEx(NORMAL, "%s", sprint_hex_inrow(next_hdr->frame + pos + long_jmp, 16)); PrintAndLogEx(NORMAL, "%s", sprint_hex_inrow(next_hdr->frame + pos + long_jmp, 16));
} }
return tracepos; return tracepos;
} }
break; // AUTHENTICATE_NATIVE break; // AUTHENTICATE_NATIVE
} }
case MFDES_AUTHENTICATE_ISO: { case MFDES_AUTHENTICATE_ISO: {
// Assume wrapped or unwrapped // Assume wrapped or unwrapped
PrintAndLogEx(INFO, "AUTH ISO (keyNo %d)", frame[pos + long_jmp]); PrintAndLogEx(INFO, "AUTH ISO (keyNo %d)", frame[pos + long_jmp]);
if (hdr->isResponse == false && next_record_is_response(tracepos, trace)) { if (hdr->isResponse == false && next_record_is_response(tracepos, trace)) {
@ -326,7 +326,7 @@ static uint16_t extractChallenges(uint16_t tracepos, uint16_t traceLen, uint8_t
tracepos += TRACELOG_HDR_LEN + next_hdr->data_len + TRACELOG_PARITY_LEN(next_hdr); tracepos += TRACELOG_HDR_LEN + next_hdr->data_len + TRACELOG_PARITY_LEN(next_hdr);
if (next_hdr->frame[pos] == MFDES_ADDITIONAL_FRAME) { if (next_hdr->frame[pos] == MFDES_ADDITIONAL_FRAME) {
PrintAndLogEx(NORMAL, "%s", sprint_hex_inrow(next_hdr->frame + pos + long_jmp, (tdea<<1))); PrintAndLogEx(NORMAL, "%s", sprint_hex_inrow(next_hdr->frame + pos + long_jmp, (tdea << 1)));
} }
return tracepos; return tracepos;
} }
@ -334,7 +334,7 @@ static uint16_t extractChallenges(uint16_t tracepos, uint16_t traceLen, uint8_t
break; // AUTHENTICATE_STANDARD break; // AUTHENTICATE_STANDARD
} }
case MFDES_AUTHENTICATE_AES: { case MFDES_AUTHENTICATE_AES: {
// Assume wrapped or unwrapped // Assume wrapped or unwrapped
PrintAndLogEx(INFO, "AUTH AES (keyNo %d)", frame[pos + long_jmp]); PrintAndLogEx(INFO, "AUTH AES (keyNo %d)", frame[pos + long_jmp]);
if (hdr->isResponse == false && next_record_is_response(tracepos, trace)) { if (hdr->isResponse == false && next_record_is_response(tracepos, trace)) {
@ -368,7 +368,7 @@ static uint16_t extractChallenges(uint16_t tracepos, uint16_t traceLen, uint8_t
break; break;
} }
} }
} }
return tracepos; return tracepos;
} }
@ -455,9 +455,9 @@ static uint16_t printTraceLine(uint16_t tracepos, uint16_t traceLen, uint8_t *tr
if (tracepos + TRACELOG_HDR_LEN + data_len + TRACELOG_PARITY_LEN(hdr) > traceLen) { if (tracepos + TRACELOG_HDR_LEN + data_len + TRACELOG_PARITY_LEN(hdr) > traceLen) {
PrintAndLogEx(DEBUG, "trace pos offset %"PRIu64 " larger than reported tracelen %u", PrintAndLogEx(DEBUG, "trace pos offset %"PRIu64 " larger than reported tracelen %u",
tracepos + TRACELOG_HDR_LEN + data_len + TRACELOG_PARITY_LEN(hdr), tracepos + TRACELOG_HDR_LEN + data_len + TRACELOG_PARITY_LEN(hdr),
traceLen traceLen
); );
return traceLen; return traceLen;
} }
@ -895,7 +895,7 @@ static int CmdTraceExtract(const char *Cmd) {
void *argtable[] = { void *argtable[] = {
arg_param_begin, arg_param_begin,
arg_lit0("1", "buffer", "use data from trace buffer"), arg_lit0("1", "buffer", "use data from trace buffer"),
arg_param_end arg_param_end
}; };
CLIExecWithReturn(ctx, Cmd, argtable, true); CLIExecWithReturn(ctx, Cmd, argtable, true);

View file

@ -806,7 +806,7 @@ static void DesfireSplitBytesToBlock(uint8_t *blockdata, size_t *blockdatacount,
} }
int DesfireExchangeEx(bool activate_field, DesfireContext_t *ctx, uint8_t cmd, uint8_t *data, size_t datalen, uint8_t *respcode, int DesfireExchangeEx(bool activate_field, DesfireContext_t *ctx, uint8_t cmd, uint8_t *data, size_t datalen, uint8_t *respcode,
uint8_t *resp, size_t *resplen, bool enable_chaining, size_t splitbysize) { uint8_t *resp, size_t *resplen, bool enable_chaining, size_t splitbysize) {
int res = PM3_SUCCESS; int res = PM3_SUCCESS;
if (!PrintChannelModeWarning(cmd, ctx->secureChannel, ctx->cmdSet, ctx->commMode)) if (!PrintChannelModeWarning(cmd, ctx->secureChannel, ctx->cmdSet, ctx->commMode))

View file

@ -87,17 +87,17 @@ static void ln_command_completion(const char *text, linenoiseCompletions *lc) {
// When no pm3 device present // When no pm3 device present
// and the command is not available offline, // and the command is not available offline,
// we skip it. // we skip it.
if ((g_session.pm3_present == false) && (vocabulory[index].offline == false )) { if ((g_session.pm3_present == false) && (vocabulory[index].offline == false)) {
index++; index++;
continue; continue;
} }
index++; index++;
if (strncmp (command, text, len) == 0) { if (strncmp(command, text, len) == 0) {
const char *space = strstr(command + len, " "); const char *space = strstr(command + len, " ");
if (space != NULL) { if (space != NULL) {
if ((prev_match_len == 0) || (strncmp (prev_match, command, prev_match_len < space - command ? prev_match_len : space - command) != 0)) { if ((prev_match_len == 0) || (strncmp(prev_match, command, prev_match_len < space - command ? prev_match_len : space - command) != 0)) {
linenoiseAddCompletion(lc, str_ndup(command, space - command + 1)); linenoiseAddCompletion(lc, str_ndup(command, space - command + 1));
prev_match = command; prev_match = command;
prev_match_len = space - command + 1; prev_match_len = space - command + 1;

View file

@ -176,10 +176,14 @@ const static vocabulory_t vocabulory[] = {
{ 0, "hf 15 csetuid" }, { 0, "hf 15 csetuid" },
{ 1, "hf cipurse help" }, { 1, "hf cipurse help" },
{ 0, "hf cipurse info" }, { 0, "hf cipurse info" },
{ 0, "hf cipurse select" },
{ 0, "hf cipurse auth" }, { 0, "hf cipurse auth" },
{ 0, "hf cipurse read" }, { 0, "hf cipurse read" },
{ 0, "hf cipurse write" }, { 0, "hf cipurse write" },
{ 0, "hf cipurse aread" }, { 0, "hf cipurse aread" },
{ 0, "hf cipurse awrite" },
{ 0, "hf cipurse formatall" },
{ 0, "hf cipurse create" },
{ 0, "hf cipurse delete" }, { 0, "hf cipurse delete" },
{ 0, "hf cipurse default" }, { 0, "hf cipurse default" },
{ 1, "hf cipurse test" }, { 1, "hf cipurse test" },
@ -694,6 +698,7 @@ const static vocabulory_t vocabulory[] = {
{ 1, "script list" }, { 1, "script list" },
{ 1, "script run" }, { 1, "script run" },
{ 1, "trace help" }, { 1, "trace help" },
{ 1, "trace extract" },
{ 1, "trace list" }, { 1, "trace list" },
{ 1, "trace load" }, { 1, "trace load" },
{ 1, "trace save" }, { 1, "trace save" },

View file

@ -4083,7 +4083,7 @@
}, },
"hf mf restore": { "hf mf restore": {
"command": "hf mf restore", "command": "hf mf restore",
"description": "restore mifare classic binary file to tag. the key file and data file will program the card sector trailers. by default we authenticate to card with key b 0xffffffffffff. `--uid` param is used for filename templates `hf-mf-<uid>-dump.bin` and `hf-mf-<uid>-key.bin. if not specified, it will read the card uid instead. `--ka` param you can indicate that the key file should be used for authentication instead. if so we also try both b/a keys", "description": "restore mifare classic dump file to tag. the key file and dump file will program the card sector trailers. by default we authenticate to card with key b 0xffffffffffff. if access rights in dump file is all zeros, it will be replaced with default values `--uid` param is used for filename templates `hf-mf-<uid>-dump.bin` and `hf-mf-<uid>-key.bin. if not specified, it will read the card uid instead. `--ka` param you can indicate that the key file should be used for authentication instead. if so we also try both b/a keys",
"notes": [ "notes": [
"hf mf restore", "hf mf restore",
"hf mf restore --1k --uid 04010203", "hf mf restore --1k --uid 04010203",
@ -4098,7 +4098,7 @@
"--2k mifare classic/plus 2k", "--2k mifare classic/plus 2k",
"--4k mifare classic 4k / s70", "--4k mifare classic 4k / s70",
"-u, --uid <hex> uid, 6 hex bytes", "-u, --uid <hex> uid, 6 hex bytes",
"-f, --file <fn> data filename", "-f, --file <fn> specify dump filename (bin/eml/json)",
"-k, --kfn <fn> key filename", "-k, --kfn <fn> key filename",
"--ka use specified keyfile to authenticate" "--ka use specified keyfile to authenticate"
], ],
@ -4152,24 +4152,24 @@
}, },
"hf mf staticnested": { "hf mf staticnested": {
"command": "hf mf staticnested", "command": "hf mf staticnested",
"description": "execute nested attack against mifare classic card with static nonce for key recovery", "description": "execute nested attack against mifare classic card with static nonce for key recovery. supply a known key from one block to recover all keys",
"notes": [ "notes": [
"hf mf staticnested --mini --blk 0 -a -k ffffffffffff -> key recovery against mifare mini", "hf mf staticnested --mini --blk 0 -a -k ffffffffffff",
"hf mf staticnested --1k --blk 0 -a -k ffffffffffff -> key recovery against mifare classic 1k", "hf mf staticnested --1k --blk 0 -a -k ffffffffffff",
"hf mf staticnested --2k --blk 0 -a -k ffffffffffff -> key recovery against mifare 2k", "hf mf staticnested --2k --blk 0 -a -k ffffffffffff",
"hf mf staticnested --4k --blk 0 -a -k ffffffffffff -> key recovery against mifare 4k" "hf mf staticnested --4k --blk 0 -a -k ffffffffffff"
], ],
"offline": false, "offline": false,
"options": [ "options": [
"-h, --help this help", "-h, --help this help",
"-k, --key <hex> key specified as 12 hex symbols", "-k, --key <hex> known key (12 hex symbols)",
"--mini mifare classic mini / s20", "--mini mifare classic mini / s20",
"--1k mifare classic 1k / s50", "--1k mifare classic 1k / s50",
"--2k mifare classic/plus 2k", "--2k mifare classic/plus 2k",
"--4k mifare classic 4k / s70", "--4k mifare classic 4k / s70",
"--blk <dec> input block number", "--blk <dec> input block number",
"-a input key specified is a key (default)", "-a input key specified is keya (def)",
"-b input key specified is b key", "-b input key specified is keyb",
"-e, --emukeys fill simulator keys from found keys", "-e, --emukeys fill simulator keys from found keys",
"--dumpkeys dump found keys to file" "--dumpkeys dump found keys to file"
], ],
@ -10345,6 +10345,6 @@
"metadata": { "metadata": {
"commands_extracted": 603, "commands_extracted": 603,
"extracted_by": "PM3Help2JSON v1.00", "extracted_by": "PM3Help2JSON v1.00",
"extracted_on": "2022-02-04T13:37:03" "extracted_on": "2022-02-05T11:30:03"
} }
} }

View file

@ -63,19 +63,19 @@ static int decrypt(uint8_t ciphertext[], int ciphertext_len, uint8_t key[], uint
int len; int len;
int plaintext_len; int plaintext_len;
if(!(ctx = EVP_CIPHER_CTX_new())) if (!(ctx = EVP_CIPHER_CTX_new()))
handleErrors(); handleErrors();
if(1 != EVP_DecryptInit_ex(ctx, EVP_aes_128_cbc(), NULL, key, iv)) if (1 != EVP_DecryptInit_ex(ctx, EVP_aes_128_cbc(), NULL, key, iv))
handleErrors(); handleErrors();
EVP_CIPHER_CTX_set_padding(ctx, 0); EVP_CIPHER_CTX_set_padding(ctx, 0);
if(1 != EVP_DecryptUpdate(ctx, plaintext, &len, ciphertext, ciphertext_len)) if (1 != EVP_DecryptUpdate(ctx, plaintext, &len, ciphertext, ciphertext_len))
handleErrors(); handleErrors();
plaintext_len = len; plaintext_len = len;
if(1 != EVP_DecryptFinal_ex(ctx, plaintext + len, &len)) if (1 != EVP_DecryptFinal_ex(ctx, plaintext + len, &len))
handleErrors(); handleErrors();
plaintext_len += len; plaintext_len += len;
@ -89,7 +89,7 @@ static int hexstr_to_byte_array(char hexstr[], uint8_t bytes[], size_t byte_len)
if (hexstr_len % 16) { if (hexstr_len % 16) {
return 1; return 1;
} }
if (byte_len < hexstr_len/2) { if (byte_len < hexstr_len / 2) {
return 2; return 2;
} }
char *pos = &hexstr[0]; char *pos = &hexstr[0];
@ -100,7 +100,7 @@ static int hexstr_to_byte_array(char hexstr[], uint8_t bytes[], size_t byte_len)
return 0; return 0;
} }
int main (int argc, char* argv[]) { int main(int argc, char *argv[]) {
uint8_t iv[16] = {0x00}; uint8_t iv[16] = {0x00};
uint8_t key[16] = {0x00}; uint8_t key[16] = {0x00};
@ -116,10 +116,10 @@ int main (int argc, char* argv[]) {
return 1; return 1;
} }
if(hexstr_to_byte_array(argv[2], tag_challenge, sizeof(tag_challenge))) if (hexstr_to_byte_array(argv[2], tag_challenge, sizeof(tag_challenge)))
return 2; return 2;
if(hexstr_to_byte_array(argv[3], lock_challenge, sizeof(lock_challenge))) if (hexstr_to_byte_array(argv[3], lock_challenge, sizeof(lock_challenge)))
return 3; return 3;
uint64_t start_time = time(NULL); uint64_t start_time = time(NULL);

View file

@ -19,7 +19,7 @@
#define __STDC_FORMAT_MACROS #define __STDC_FORMAT_MACROS
#if !defined(_WIN32) && !defined(__APPLE__) #if !defined(_WIN32) && !defined(__APPLE__)
#define _POSIX_C_SOURCE 200112L // need localtime_r() #define _POSIX_C_SOURCE 200112L // need localtime_r()
#endif #endif
#include <stdio.h> #include <stdio.h>
@ -53,7 +53,7 @@ typedef struct thread_args {
uint64_t starttime; uint64_t starttime;
uint64_t stoptime; uint64_t stoptime;
uint8_t tag[16]; uint8_t tag[16];
uint8_t rdr[32]; uint8_t rdr[32];
} targs; } targs;
static void make_key(uint32_t seed, uint8_t key[]) { static void make_key(uint32_t seed, uint8_t key[]) {
@ -134,9 +134,9 @@ static void print_time(uint64_t at) {
struct tm lt; struct tm lt;
#if defined(_WIN32) #if defined(_WIN32)
(void)localtime_s(&lt, &t); (void)localtime_s(&lt, &t);
#else #else
(void)localtime_r(&t, &lt); (void)localtime_r(&t, &lt);
#endif #endif
char res[32]; char res[32];
@ -151,9 +151,9 @@ static void *brute_thread(void *arguments) {
uint64_t starttime = args->starttime; uint64_t starttime = args->starttime;
uint64_t stoptime = args->stoptime; uint64_t stoptime = args->stoptime;
uint8_t local_tag[16]; uint8_t local_tag[16];
uint8_t local_rdr[32]; uint8_t local_rdr[32];
memcpy(local_tag, args->tag, 16); memcpy(local_tag, args->tag, 16);
memcpy(local_rdr, args->rdr, 32); memcpy(local_rdr, args->rdr, 32);
@ -213,7 +213,7 @@ static void *brute_thread(void *arguments) {
return NULL; return NULL;
} }
static int usage(const char* s) { static int usage(const char *s) {
printf(_YELLOW_("syntax:") "\n"); printf(_YELLOW_("syntax:") "\n");
printf(" %s <unix timestamp> <16 byte tag challenge> <32 byte reader response challenge>\n", s); printf(" %s <unix timestamp> <16 byte tag challenge> <32 byte reader response challenge>\n", s);
printf("\n"); printf("\n");
@ -223,7 +223,7 @@ static int usage(const char* s) {
return 1; return 1;
} }
int main (int argc, char* argv[]) { int main(int argc, char *argv[]) {
printf("\n"); printf("\n");
printf(_CYAN_("Telenot access MIFARE DESFire AES key recovery tool") "\n"); printf(_CYAN_("Telenot access MIFARE DESFire AES key recovery tool") "\n");
@ -252,7 +252,7 @@ int main (int argc, char* argv[]) {
printf("Rdr Resp & Challenge... "); printf("Rdr Resp & Challenge... ");
print_hex(rdr_resp_challenge, sizeof(rdr_resp_challenge)); print_hex(rdr_resp_challenge, sizeof(rdr_resp_challenge));
uint64_t t1 = msclock(); uint64_t t1 = msclock();
#if !defined(_WIN32) || !defined(__WIN32__) #if !defined(_WIN32) || !defined(__WIN32__)
@ -269,7 +269,7 @@ int main (int argc, char* argv[]) {
pthread_mutex_init(&print_lock, NULL); pthread_mutex_init(&print_lock, NULL);
// threads // threads
uint64_t stop_time = time(NULL); uint64_t stop_time = time(NULL);
for (int i = 0; i < thread_count; ++i) { for (int i = 0; i < thread_count; ++i) {
struct thread_args *a = calloc(1, sizeof(struct thread_args)); struct thread_args *a = calloc(1, sizeof(struct thread_args));
a->thread = i; a->thread = i;