make style

This commit is contained in:
Philippe Teuwen 2020-11-02 01:46:47 +01:00
commit 777cb5a8ce
23 changed files with 184 additions and 181 deletions

View file

@ -26,7 +26,7 @@ void ModInfo(void) {
/* This standalone implements four different modes: reading, simulating, dumping, & emulating. /* This standalone implements four different modes: reading, simulating, dumping, & emulating.
* *
* The initial mode is reading with LEDs A & D. * The initial mode is reading with LEDs A & D.
* In this mode, the Proxmark is looking for an ST25TA card like those used by the IKEA Rothult, * In this mode, the Proxmark is looking for an ST25TA card like those used by the IKEA Rothult,
* it will act as reader, and store the UID for simulation. * it will act as reader, and store the UID for simulation.
* *
@ -37,8 +37,8 @@ void ModInfo(void) {
* Once it gets the key, it will switch to dump mode (LEDs C & D) automatically. During this mode the Proxmark * Once it gets the key, it will switch to dump mode (LEDs C & D) automatically. During this mode the Proxmark
* will act as a reader once again, but now we know the Read Protection key to authenticate to the card to dump * will act as a reader once again, but now we know the Read Protection key to authenticate to the card to dump
* it's contents so we can achieve full emulation. * it's contents so we can achieve full emulation.
* *
* Once it dumps the contents of the card, it will switch to emulation mode (LED C) automatically. * Once it dumps the contents of the card, it will switch to emulation mode (LED C) automatically.
* During this mode the Proxmark should function as the original ST25TA IKEA Rothult Master Key * During this mode the Proxmark should function as the original ST25TA IKEA Rothult Master Key
* *
* Keep pressing the button down will quit the standalone cycle. * Keep pressing the button down will quit the standalone cycle.
@ -68,13 +68,13 @@ void RunMod(void) {
// APDUs necessary to dump NDEF // APDUs necessary to dump NDEF
// ---------------------------- // ----------------------------
// Select NDEF Application // Select NDEF Application
uint8_t ndef_app[13] = {0x00, 0xa4, 0x04, 0x00, 0x07, 0xd2, 0x76, 0x00, 0x00, 0x85, 0x01, 0x01, 0x00}; uint8_t ndef_app[13] = {0x00, 0xa4, 0x04, 0x00, 0x07, 0xd2, 0x76, 0x00, 0x00, 0x85, 0x01, 0x01, 0x00};
// Select NDEF File // Select NDEF File
uint8_t ndef_sel[7] = {0x00, 0xa4, 0x00, 0x0c, 0x02, 0x00, 0x01}; uint8_t ndef_sel[7] = {0x00, 0xa4, 0x00, 0x0c, 0x02, 0x00, 0x01};
// Read verification without password // Read verification without password
uint8_t verify[5] = {0x00, 0x20, 0x00, 0x01, 0x00}; uint8_t verify[5] = {0x00, 0x20, 0x00, 0x01, 0x00};
// Read verification with password // Read verification with password
uint8_t verify_pwd[21] = {0x00, 0x20, 0x00, 0x01, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}; uint8_t verify_pwd[21] = {0x00, 0x20, 0x00, 0x01, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00};
// Read NDEF file contents // Read NDEF file contents
uint8_t ndef_read[5] = {0x00, 0xb0, 0x00, 0x00, 0x1d}; uint8_t ndef_read[5] = {0x00, 0xb0, 0x00, 0x00, 0x1d};
@ -173,12 +173,12 @@ void RunMod(void) {
DbpString(_YELLOW_("+") "Found ISO 14443 Type A!"); DbpString(_YELLOW_("+") "Found ISO 14443 Type A!");
if (card_a_info.sak == SAK && card_a_info.atqa[0] == ATQA0 && card_a_info.atqa[1] == ATQA1 && card_a_info.uidlen == 7) { if (card_a_info.sak == SAK && card_a_info.atqa[0] == ATQA0 && card_a_info.atqa[1] == ATQA1 && card_a_info.uidlen == 7) {
DbpString(_YELLOW_("+") "Found ST25TA with UID: "); DbpString(_YELLOW_("+") "Found ST25TA with UID: ");
Dbhexdump(card_a_info.uidlen, card_a_info.uid, 0); Dbhexdump(card_a_info.uidlen, card_a_info.uid, 0);
memcpy(stuid, card_a_info.uid, card_a_info.uidlen); memcpy(stuid, card_a_info.uid, card_a_info.uidlen);
state = STATE_SIM; state = STATE_SIM;
} else { } else {
DbpString("Found non-ST25TA card, ignoring."); DbpString("Found non-ST25TA card, ignoring.");
} }
} }
FpgaWriteConfWord(FPGA_MAJOR_MODE_OFF); FpgaWriteConfWord(FPGA_MAJOR_MODE_OFF);
@ -235,7 +235,7 @@ void RunMod(void) {
p_response = &responses[ATQA]; p_response = &responses[ATQA];
} else if (receivedCmd[0] == ISO14443A_CMD_HALT && len == 4) { // Received a HALT } else if (receivedCmd[0] == ISO14443A_CMD_HALT && len == 4) { // Received a HALT
p_response = NULL; p_response = NULL;
} else if (receivedCmd[0] == ISO14443A_CMD_WUPA && len == 1) { // Received a WAKEUP } else if (receivedCmd[0] == ISO14443A_CMD_WUPA && len == 1) { // Received a WAKEUP
p_response = &responses[ATQA]; p_response = &responses[ATQA];
} else if (receivedCmd[1] == 0x20 && receivedCmd[0] == ISO14443A_CMD_ANTICOLL_OR_SELECT && len == 2) { // Received request for UID (cascade 1) } else if (receivedCmd[1] == 0x20 && receivedCmd[0] == ISO14443A_CMD_ANTICOLL_OR_SELECT && len == 2) { // Received request for UID (cascade 1)
p_response = &responses[UIDC1]; p_response = &responses[UIDC1];
@ -337,7 +337,7 @@ void RunMod(void) {
Dbhexdump(apdulen - 2, apdubuffer, false); Dbhexdump(apdulen - 2, apdubuffer, false);
DbpString("----"); DbpString("----");
if (i == 4) { if (i == 4) {
if (apdubuffer[1] == 0x1b && apdubuffer[2] == 0xd1 && !gotndef) { //Get NDEF Data if (apdubuffer[1] == 0x1b && apdubuffer[2] == 0xd1 && !gotndef) { //Get NDEF Data
gotndef = true; gotndef = true;
@ -345,7 +345,7 @@ void RunMod(void) {
break; break;
} }
} }
} else { } else {
DbpString(_YELLOW_("!!") "Error reading the card"); DbpString(_YELLOW_("!!") "Error reading the card");
} }
@ -416,7 +416,7 @@ void RunMod(void) {
p_response = &responses[ATQA]; p_response = &responses[ATQA];
} else if (receivedCmd[0] == ISO14443A_CMD_HALT && len == 4) { // Received a HALT } else if (receivedCmd[0] == ISO14443A_CMD_HALT && len == 4) { // Received a HALT
p_response = NULL; p_response = NULL;
} else if (receivedCmd[0] == ISO14443A_CMD_WUPA && len == 1) { // Received a WAKEUP } else if (receivedCmd[0] == ISO14443A_CMD_WUPA && len == 1) { // Received a WAKEUP
p_response = &responses[ATQA]; p_response = &responses[ATQA];
} else if (receivedCmd[1] == 0x20 && receivedCmd[0] == ISO14443A_CMD_ANTICOLL_OR_SELECT && len == 2) { // Received request for UID (cascade 1) } else if (receivedCmd[1] == 0x20 && receivedCmd[0] == ISO14443A_CMD_ANTICOLL_OR_SELECT && len == 2) { // Received request for UID (cascade 1)
p_response = &responses[UIDC1]; p_response = &responses[UIDC1];

View file

@ -1644,7 +1644,7 @@ static void PacketReceived(PacketCommandNG *packet) {
struct p *payload = (struct p *)packet->data.asBytes; struct p *payload = (struct p *)packet->data.asBytes;
uint8_t *mem = BigBuf_get_addr(); uint8_t *mem = BigBuf_get_addr();
memcpy(mem + payload->idx, payload->data, payload->bytes_in_packet); memcpy(mem + payload->idx, payload->data, payload->bytes_in_packet);
uint8_t a = 0, b = 0; uint8_t a = 0, b = 0;
compute_crc(CRC_14443_A, mem + payload->idx, payload->bytes_in_packet, &a, &b); compute_crc(CRC_14443_A, mem + payload->idx, payload->bytes_in_packet, &a, &b);
int res = PM3_SUCCESS; int res = PM3_SUCCESS;
@ -1662,14 +1662,14 @@ static void PacketReceived(PacketCommandNG *packet) {
} PACKED; } PACKED;
struct p *payload = (struct p *)packet->data.asBytes; struct p *payload = (struct p *)packet->data.asBytes;
uint8_t *fwdata = BigBuf_get_addr(); uint8_t *fwdata = BigBuf_get_addr();
uint8_t a = 0, b = 0; uint8_t a = 0, b = 0;
compute_crc(CRC_14443_A, fwdata, payload->fw_size, &a, &b); compute_crc(CRC_14443_A, fwdata, payload->fw_size, &a, &b);
if (payload->crc != (a << 8 | b)) { if (payload->crc != (a << 8 | b)) {
Dbprintf("CRC Failed, 0x[%04x] != 0x[%02x%02x]", payload->crc, a, b); Dbprintf("CRC Failed, 0x[%04x] != 0x[%02x%02x]", payload->crc, a, b);
reply_ng(CMD_SMART_UPGRADE, PM3_ESOFT, NULL, 0); reply_ng(CMD_SMART_UPGRADE, PM3_ESOFT, NULL, 0);
} else { } else {
SmartCardUpgrade(payload->fw_size); SmartCardUpgrade(payload->fw_size);
} }
fwdata = NULL; fwdata = NULL;

View file

@ -670,7 +670,7 @@ bool GetATR(smart_card_atr_t *card_ptr, bool verbose) {
// 1byte = 1ms , max frame 256bytes. Should wait 256ms atleast just in case. // 1byte = 1ms , max frame 256bytes. Should wait 256ms atleast just in case.
if (I2C_WaitForSim() == false) if (I2C_WaitForSim() == false)
return false; return false;
// read bytes from module // read bytes from module
uint8_t len = sizeof(card_ptr->atr); uint8_t len = sizeof(card_ptr->atr);
if (sc_rx_bytes(card_ptr->atr, &len) == false) if (sc_rx_bytes(card_ptr->atr, &len) == false)
@ -713,8 +713,8 @@ void SmartCardAtr(void) {
set_tracing(true); set_tracing(true);
I2C_Reset_EnterMainProgram(); I2C_Reset_EnterMainProgram();
smart_card_atr_t card; smart_card_atr_t card;
int res = GetATR(&card, true) ? PM3_SUCCESS : PM3_ETIMEOUT; int res = GetATR(&card, true) ? PM3_SUCCESS : PM3_ETIMEOUT;
reply_ng(CMD_SMART_ATR, res, (uint8_t*)&card, sizeof(smart_card_atr_t)); reply_ng(CMD_SMART_ATR, res, (uint8_t *)&card, sizeof(smart_card_atr_t));
set_tracing(false); set_tracing(false);
LEDsoff(); LEDsoff();
} }
@ -827,7 +827,7 @@ void SmartCardUpgrade(uint64_t arg0) {
length -= size; length -= size;
pos += size; pos += size;
} }
reply_ng(CMD_SMART_UPGRADE, (isOK) ? PM3_SUCCESS : PM3_ESOFT, NULL, 0); reply_ng(CMD_SMART_UPGRADE, (isOK) ? PM3_SUCCESS : PM3_ESOFT, NULL, 0);
LED_C_OFF(); LED_C_OFF();
BigBuf_free(); BigBuf_free();

View file

@ -1633,7 +1633,7 @@ void SimulateIso14443aTag(uint8_t tagType, uint8_t flags, uint8_t *data) {
dynamic_response_info.response[0] = receivedCmd[0]; dynamic_response_info.response[0] = receivedCmd[0];
dynamic_response_info.response[1] = 0x90; dynamic_response_info.response[1] = 0x90;
dynamic_response_info.response[2] = 0x00; dynamic_response_info.response[2] = 0x00;
dynamic_response_info.response_n = 3; dynamic_response_info.response_n = 3;
} else { } else {
dynamic_response_info.response[0] = receivedCmd[0]; dynamic_response_info.response[0] = receivedCmd[0];
dynamic_response_info.response[1] = 0x90; dynamic_response_info.response[1] = 0x90;
@ -2337,7 +2337,7 @@ void iso14443a_antifuzz(uint32_t flags) {
uint8_t *received = BigBuf_malloc(MAX_FRAME_SIZE); uint8_t *received = BigBuf_malloc(MAX_FRAME_SIZE);
uint8_t *receivedPar = BigBuf_malloc(MAX_PARITY_SIZE); uint8_t *receivedPar = BigBuf_malloc(MAX_PARITY_SIZE);
uint8_t *resp = BigBuf_malloc(20); uint8_t *resp = BigBuf_malloc(20);
memset(received, 0x00, MAX_FRAME_SIZE); memset(received, 0x00, MAX_FRAME_SIZE);
memset(received, 0x00, MAX_PARITY_SIZE); memset(received, 0x00, MAX_PARITY_SIZE);
memset(resp, 0xFF, 20); memset(resp, 0xFF, 20);

View file

@ -1541,7 +1541,7 @@ void iso14443b_setup(void) {
// I tried to be systematic and check every answer of the tag, every CRC, etc... // I tried to be systematic and check every answer of the tag, every CRC, etc...
//----------------------------------------------------------------------------- //-----------------------------------------------------------------------------
static int read_srx_block(uint8_t blocknr, uint8_t *block) { static int read_srx_block(uint8_t blocknr, uint8_t *block) {
uint8_t cmd[] = {ISO14443B_READ_BLK, blocknr, 0x00, 0x00}; uint8_t cmd[] = {ISO14443B_READ_BLK, blocknr, 0x00, 0x00};
AddCrc14B(cmd, 2); AddCrc14B(cmd, 2);
@ -1572,10 +1572,10 @@ static int read_srx_block(uint8_t blocknr, uint8_t *block) {
if (DBGLEVEL >= DBG_DEBUG) { if (DBGLEVEL >= DBG_DEBUG) {
Dbprintf("Address=%02x, Contents=%08x, CRC=%04x", Dbprintf("Address=%02x, Contents=%08x, CRC=%04x",
blocknr, blocknr,
(r_block[3] << 24) + (r_block[2] << 16) + (r_block[1] << 8) + r_block[0], (r_block[3] << 24) + (r_block[2] << 16) + (r_block[1] << 8) + r_block[0],
(r_block[4] << 8) + r_block[5] (r_block[4] << 8) + r_block[5]
); );
} }
return PM3_SUCCESS; return PM3_SUCCESS;
@ -1586,7 +1586,7 @@ void ReadSTBlock(uint8_t blocknr) {
iso14b_card_select_t card; iso14b_card_select_t card;
int res = iso14443b_select_srx_card(&card); int res = iso14443b_select_srx_card(&card);
// 0: OK -1 wrong len, -2: attrib fail, -3:crc fail, // 0: OK -1 wrong len, -2: attrib fail, -3:crc fail,
switch(res) { switch (res) {
case -1: case -1:
case -3: { case -3: {
reply_ng(CMD_HF_SRI_READ, PM3_EWRONGANSWER, NULL, 0); reply_ng(CMD_HF_SRI_READ, PM3_EWRONGANSWER, NULL, 0);

View file

@ -2283,7 +2283,7 @@ void MifareCIdent(bool is_mfc) {
ReaderTransmit(rats, sizeof(rats), NULL); ReaderTransmit(rats, sizeof(rats), NULL);
res = ReaderReceive(buf, par); res = ReaderReceive(buf, par);
if (res ) { if (res) {
// test for some MFC gen2 // test for some MFC gen2
if (memcmp(buf, "\x09\x78\x00\x91\x02\xDA\xBC\x19\x10\xF0\x05", 11) == 0) { if (memcmp(buf, "\x09\x78\x00\x91\x02\xDA\xBC\x19\x10\xF0\x05", 11) == 0) {

View file

@ -86,7 +86,7 @@ jint Console(JNIEnv *env, jobject instance, jstring cmd_) {
PrintAndLogEx(NORMAL, ""); PrintAndLogEx(NORMAL, "");
char *cmd = (char *) ((*env)->GetStringUTFChars(env, cmd_, 0)); char *cmd = (char *)((*env)->GetStringUTFChars(env, cmd_, 0));
int ret = CommandReceived(cmd); int ret = CommandReceived(cmd);
if (ret == 99) { if (ret == 99) {
// exit / quit // exit / quit
@ -102,7 +102,7 @@ jint Console(JNIEnv *env, jobject instance, jstring cmd_) {
* Is client running! * Is client running!
* */ * */
jboolean IsClientRunning(JNIEnv *env, jobject instance) { jboolean IsClientRunning(JNIEnv *env, jobject instance) {
return (jboolean) ((jboolean) conn.run); return (jboolean)((jboolean) conn.run);
} }
/* /*
@ -114,7 +114,7 @@ jboolean TestPm3(JNIEnv *env, jobject instance) {
return false; return false;
} }
bool ret = (TestProxmark() == PM3_SUCCESS); bool ret = (TestProxmark() == PM3_SUCCESS);
return (jboolean) (ret); return (jboolean)(ret);
} }
/* /*
@ -141,18 +141,18 @@ JNIEXPORT jint JNI_OnLoad(JavaVM *vm, void *reserved) {
} }
jclass clz_test = (*jniEnv)->FindClass(jniEnv, "cn/rrg/devices/Proxmark3RRGRdv4"); jclass clz_test = (*jniEnv)->FindClass(jniEnv, "cn/rrg/devices/Proxmark3RRGRdv4");
JNINativeMethod methods[] = { JNINativeMethod methods[] = {
{"startExecute", "(Ljava/lang/String;)I", (void *) Console}, {"startExecute", "(Ljava/lang/String;)I", (void *) Console},
{"stopExecute", "()V", (void *) ClosePm3}, {"stopExecute", "()V", (void *) ClosePm3},
{"isExecuting", "()Z", (void *) IsClientRunning} {"isExecuting", "()Z", (void *) IsClientRunning}
}; };
JNINativeMethod methods1[] = { JNINativeMethod methods1[] = {
{"testPm3", "()Z", (void *) TestPm3}, {"testPm3", "()Z", (void *) TestPm3},
{"closePm3", "()V", ClosePm3} {"closePm3", "()V", ClosePm3}
}; };
if ((*jniEnv)->RegisterNatives(jniEnv, clazz, methods, sizeof(methods) / sizeof(methods[0])) != if ((*jniEnv)->RegisterNatives(jniEnv, clazz, methods, sizeof(methods) / sizeof(methods[0])) !=
JNI_OK) { JNI_OK) {
return -1; return -1;
} }

View file

@ -285,7 +285,7 @@ uint64_t arg_get_u64_hexstr_def(CLIParserContext *ctx, uint8_t paramnum, uint64_
} }
} else { } else {
rv = def; rv = def;
} }
return rv; return rv;
} }

View file

@ -312,7 +312,7 @@ int CmdHFSniff(const char *Cmd) {
} }
int handle_hf_plot(void) { int handle_hf_plot(void) {
uint8_t buf[FPGA_TRACE_SIZE]; uint8_t buf[FPGA_TRACE_SIZE];
PacketResponseNG response; PacketResponseNG response;
@ -355,7 +355,7 @@ int CmdHFPlot(const char *Cmd) {
} }
static command_t CommandTable[] = { static command_t CommandTable[] = {
{"--------", CmdHelp, AlwaysAvailable, "----------------------- " _CYAN_("High Frequency") " -----------------------"}, {"--------", CmdHelp, AlwaysAvailable, "----------------------- " _CYAN_("High Frequency") " -----------------------"},
{"14a", CmdHF14A, AlwaysAvailable, "{ ISO14443A RFIDs... }"}, {"14a", CmdHF14A, AlwaysAvailable, "{ ISO14443A RFIDs... }"},
{"14b", CmdHF14B, AlwaysAvailable, "{ ISO14443B RFIDs... }"}, {"14b", CmdHF14B, AlwaysAvailable, "{ ISO14443B RFIDs... }"},
@ -375,7 +375,7 @@ static command_t CommandTable[] = {
{"thinfilm", CmdHFThinfilm, AlwaysAvailable, "{ Thinfilm RFIDs... }"}, {"thinfilm", CmdHFThinfilm, AlwaysAvailable, "{ Thinfilm RFIDs... }"},
{"topaz", CmdHFTopaz, AlwaysAvailable, "{ TOPAZ (NFC Type 1) RFIDs... }"}, {"topaz", CmdHFTopaz, AlwaysAvailable, "{ TOPAZ (NFC Type 1) RFIDs... }"},
{"waveshare", CmdHFWaveshare, AlwaysAvailable, "{ Waveshare NFC ePaper... }"}, {"waveshare", CmdHFWaveshare, AlwaysAvailable, "{ Waveshare NFC ePaper... }"},
{"-----------", CmdHelp, AlwaysAvailable, "--------------------- " _CYAN_("General") " ---------------------"}, {"-----------", CmdHelp, AlwaysAvailable, "--------------------- " _CYAN_("General") " ---------------------"},
{"help", CmdHelp, AlwaysAvailable, "This help"}, {"help", CmdHelp, AlwaysAvailable, "This help"},
{"list", CmdTraceList, AlwaysAvailable, "List protocol data in trace buffer"}, {"list", CmdTraceList, AlwaysAvailable, "List protocol data in trace buffer"},
{"plot", CmdHFPlot, IfPm3Hfplot, "Plot signal"}, {"plot", CmdHFPlot, IfPm3Hfplot, "Plot signal"},

View file

@ -566,7 +566,7 @@ static int CmdHF14AReader(const char *Cmd) {
} }
} }
plot: plot:
if (continuous) { if (continuous) {
res = handle_hf_plot(); res = handle_hf_plot();
if (res != PM3_SUCCESS) { if (res != PM3_SUCCESS) {
break; break;
@ -1442,7 +1442,7 @@ static int CmdHF14AAntiFuzz(const char *Cmd) {
CLIParserFree(ctx); CLIParserFree(ctx);
clearCommandBuffer(); clearCommandBuffer();
SendCommandNG(CMD_HF_ISO14443A_ANTIFUZZ, (uint8_t*)&param, sizeof(param)); SendCommandNG(CMD_HF_ISO14443A_ANTIFUZZ, (uint8_t *)&param, sizeof(param));
return PM3_SUCCESS; return PM3_SUCCESS;
} }
@ -1494,9 +1494,9 @@ typedef enum {
// Based on NXP AN10833 Rev 3.6 and NXP AN10834 Rev 4.1 // Based on NXP AN10833 Rev 3.6 and NXP AN10834 Rev 4.1
static int detect_nxp_card(uint8_t sak, uint16_t atqa, uint64_t select_status) { static int detect_nxp_card(uint8_t sak, uint16_t atqa, uint64_t select_status) {
int type = MTNONE; int type = MTNONE;
PrintAndLogEx(SUCCESS, "Possible types:"); PrintAndLogEx(SUCCESS, "Possible types:");
if ((sak & 0x02) != 0x02) { if ((sak & 0x02) != 0x02) {
if ((sak & 0x19) == 0x19) { if ((sak & 0x19) == 0x19) {
printTag("MIFARE Classic 2K"); printTag("MIFARE Classic 2K");
@ -1515,7 +1515,7 @@ static int detect_nxp_card(uint8_t sak, uint16_t atqa, uint64_t select_status) {
printTag("MIFARE Plus S 4K in SL1"); printTag("MIFARE Plus S 4K in SL1");
printTag("MIFARE Plus X 4K in SL1"); printTag("MIFARE Plus X 4K in SL1");
} }
type |= MTPLUS; type |= MTPLUS;
} else { } else {
if ((atqa & 0x0040) == 0x0040) { if ((atqa & 0x0040) == 0x0040) {
@ -1550,7 +1550,7 @@ static int detect_nxp_card(uint8_t sak, uint16_t atqa, uint64_t select_status) {
printTag("MIFARE Plus X 2K in SL1"); printTag("MIFARE Plus X 2K in SL1");
printTag("MIFARE Plus SE 1K"); printTag("MIFARE Plus SE 1K");
} }
type |= MTPLUS; type |= MTPLUS;
} else { } else {
if ((atqa & 0x0040) == 0x0040) { if ((atqa & 0x0040) == 0x0040) {
@ -1596,7 +1596,7 @@ static int detect_nxp_card(uint8_t sak, uint16_t atqa, uint64_t select_status) {
printTag("MIFARE Plus SE 1K"); printTag("MIFARE Plus SE 1K");
type |= MTPLUS; type |= MTPLUS;
} }
printTag("NTAG 4xx"); printTag("NTAG 4xx");
type |= MTDESFIRE; type |= MTDESFIRE;
} }
@ -1613,7 +1613,7 @@ static int detect_nxp_card(uint8_t sak, uint16_t atqa, uint64_t select_status) {
type |= MTULTRALIGHT; type |= MTULTRALIGHT;
} }
} }
if (type == MTNONE) { if (type == MTNONE) {
PrintAndLogEx(WARNING, " failed to fingerprint"); PrintAndLogEx(WARNING, " failed to fingerprint");
} }

View file

@ -977,33 +977,33 @@ static int CmdHF14BSriRdBl(const char *Cmd) {
int blockno = arg_get_int_def(ctx, 1, -1); int blockno = arg_get_int_def(ctx, 1, -1);
CLIParserFree(ctx); CLIParserFree(ctx);
/* /*
iso14b_card_select_t card; iso14b_card_select_t card;
if (get_14b_UID(&card) == false) { if (get_14b_UID(&card) == false) {
PrintAndLogEx(WARNING, "no tag found"); PrintAndLogEx(WARNING, "no tag found");
return PM3_SUCCESS; return PM3_SUCCESS;
} }
if (card.uidlen != 8) { if (card.uidlen != 8) {
PrintAndLogEx(FAILED, "current read command only work with SRI4K / SRI512 tags"); PrintAndLogEx(FAILED, "current read command only work with SRI4K / SRI512 tags");
return PM3_SUCCESS; return PM3_SUCCESS;
} }
// detect cardsize // detect cardsize
// 1 = 4096 // 1 = 4096
// 2 = 512 // 2 = 512
uint8_t cardtype = get_st_cardsize(card.uid); uint8_t cardtype = get_st_cardsize(card.uid);
uint8_t blocks = (cardtype == 1) ? 0x7F : 0x0F; uint8_t blocks = (cardtype == 1) ? 0x7F : 0x0F;
*/ */
struct { struct {
uint8_t blockno; uint8_t blockno;
} PACKED payload; } PACKED payload;
payload.blockno = blockno; payload.blockno = blockno;
PacketResponseNG resp; PacketResponseNG resp;
clearCommandBuffer(); clearCommandBuffer();
SendCommandNG(CMD_HF_SRI_READ, (uint8_t*)&payload, sizeof(payload)); SendCommandNG(CMD_HF_SRI_READ, (uint8_t *)&payload, sizeof(payload));
if (WaitForResponseTimeout(CMD_HF_SRI_READ, &resp, TIMEOUT) == false) { if (WaitForResponseTimeout(CMD_HF_SRI_READ, &resp, TIMEOUT) == false) {
return PM3_ETIMEOUT; return PM3_ETIMEOUT;
} }

View file

@ -26,10 +26,10 @@
iceman notes iceman notes
We can't dump LTO 5 or 6 tags yet since we don't have a datasheet. We can't dump LTO 5 or 6 tags yet since we don't have a datasheet.
If you have access to datasheet, le me know! If you have access to datasheet, le me know!
LTO w Type info 00 01 has 101 blocks. LTO w Type info 00 01 has 101 blocks.
LTO w Type info 00 03 has 255 blocks. LTO w Type info 00 03 has 255 blocks.
LTO w Type info 00 xx has NN blocks. LTO w Type info 00 xx has NN blocks.
*/ */
#define CM_MEM_MAX_SIZE 0x1FE0 // (32byte/block * 255block = 8160byte) #define CM_MEM_MAX_SIZE 0x1FE0 // (32byte/block * 255block = 8160byte)
@ -194,8 +194,8 @@ static int CmdHfLTOInfo(const char *Cmd) {
return infoLTO(true); return infoLTO(true);
} }
static const char* lto_print_size(uint8_t ti) { static const char *lto_print_size(uint8_t ti) {
switch(ti) { switch (ti) {
case 1: case 1:
return "101 blocks / 3232 bytes"; return "101 blocks / 3232 bytes";
case 3: case 3:

View file

@ -5296,7 +5296,7 @@ static int CmdHf14AMfSuperCard(const char *Cmd) {
if (reset_card) { if (reset_card) {
keep_field_on = false; keep_field_on = false;
uint8_t response[6]; uint8_t response[6];
int resplen = 0; int resplen = 0;
// --------------- RESET CARD ---------------- // --------------- RESET CARD ----------------
@ -5312,7 +5312,7 @@ static int CmdHf14AMfSuperCard(const char *Cmd) {
} }
uint8_t responseA[22]; uint8_t responseA[22];
uint8_t responseB[22]; uint8_t responseB[22];
int respAlen = 0; int respAlen = 0;
int respBlen = 0; int respBlen = 0;
@ -5328,21 +5328,21 @@ static int CmdHf14AMfSuperCard(const char *Cmd) {
// --------------- Second ---------------- // --------------- Second ----------------
activate_field = false; activate_field = false;
keep_field_on = false; keep_field_on = false;
uint8_t aSECOND[] = { 0x00, 0xa6, 0xb0, 0x01, 0x10 }; uint8_t aSECOND[] = { 0x00, 0xa6, 0xb0, 0x01, 0x10 };
res = ExchangeAPDU14a(aSECOND, sizeof(aSECOND), activate_field, keep_field_on, responseB, sizeof(responseB), &respBlen); res = ExchangeAPDU14a(aSECOND, sizeof(aSECOND), activate_field, keep_field_on, responseB, sizeof(responseB), &respBlen);
if (res) { if (res) {
DropField(); DropField();
return res; return res;
} }
// uint8_t inA[] = { 0x72, 0xD7, 0xF4, 0x3E, 0xFD, 0xAB, 0xF2, 0x35, 0xFD, 0x49, 0xEE, 0xDC, 0x44, 0x95, 0x43, 0xC4}; // uint8_t inA[] = { 0x72, 0xD7, 0xF4, 0x3E, 0xFD, 0xAB, 0xF2, 0x35, 0xFD, 0x49, 0xEE, 0xDC, 0x44, 0x95, 0x43, 0xC4};
// uint8_t inB[] = { 0xF0, 0xA2, 0x67, 0x6A, 0x04, 0x6A, 0x72, 0x12, 0x76, 0xA4, 0x1D, 0x02, 0x1F, 0xEA, 0x20, 0x85}; // uint8_t inB[] = { 0xF0, 0xA2, 0x67, 0x6A, 0x04, 0x6A, 0x72, 0x12, 0x76, 0xA4, 0x1D, 0x02, 0x1F, 0xEA, 0x20, 0x85};
uint8_t outA[16] = {0}; uint8_t outA[16] = {0};
uint8_t outB[16] = {0}; uint8_t outB[16] = {0};
uint8_t key[] = {0x11, 0x22, 0x33, 0x44, 0x55, 0x66, 0x77, 0x88}; uint8_t key[] = {0x11, 0x22, 0x33, 0x44, 0x55, 0x66, 0x77, 0x88};
for (uint8_t i = 0; i < 16; i += 8) { for (uint8_t i = 0; i < 16; i += 8) {
des_decrypt(outA + i, responseA + i, key); des_decrypt(outA + i, responseA + i, key);
des_decrypt(outB + i, responseB + i, key); des_decrypt(outB + i, responseB + i, key);
@ -5362,12 +5362,12 @@ static int CmdHf14AMfSuperCard(const char *Cmd) {
if (memcmp(outB, "\x01\x01\x01\x01\x01\x01\x01\x01", 8) == 0) { if (memcmp(outB, "\x01\x01\x01\x01\x01\x01\x01\x01", 8) == 0) {
PrintAndLogEx(INFO, "Only one trace recorded"); PrintAndLogEx(INFO, "Only one trace recorded");
return PM3_SUCCESS; return PM3_SUCCESS;
} }
nonces_t data;
nonces_t data;
// first // first
uint16_t NT0 = (outA[6] << 8) | outA[7]; uint16_t NT0 = (outA[6] << 8) | outA[7];
data.cuid = bytes_to_num(outA, 4); data.cuid = bytes_to_num(outA, 4);
data.nonce = prng_successor(NT0, 31); data.nonce = prng_successor(NT0, 31);
data.nr = bytes_to_num(outA + 8, 4); data.nr = bytes_to_num(outA + 8, 4);
@ -5394,13 +5394,13 @@ static int CmdHf14AMfSuperCard(const char *Cmd) {
uint64_t key64 = -1; uint64_t key64 = -1;
res = mfkey32_moebius(&data, &key64); res = mfkey32_moebius(&data, &key64);
if (res) { if (res) {
PrintAndLogEx(SUCCESS, "UID: %s Sector %02x key %c [ " _GREEN_("%12" PRIX64) " ]" PrintAndLogEx(SUCCESS, "UID: %s Sector %02x key %c [ " _GREEN_("%12" PRIX64) " ]"
, sprint_hex_inrow(outA, 4) , sprint_hex_inrow(outA, 4)
, data.sector , data.sector
, (data.keytype == 0x60) ? 'A' : 'B' , (data.keytype == 0x60) ? 'A' : 'B'
, key64); , key64);
} else { } else {
PrintAndLogEx(FAILED, "failed to recover any key"); PrintAndLogEx(FAILED, "failed to recover any key");
} }

View file

@ -2122,7 +2122,7 @@ static int desfire_authenticate(int cmdAuthMode, int cmdAuthAlgo, uint8_t *aid,
PrintAndLogEx(FAILED, "Crypto algo not valid for the KDF AN10922 algo."); PrintAndLogEx(FAILED, "Crypto algo not valid for the KDF AN10922 algo.");
return PM3_EINVARG; return PM3_EINVARG;
} }
// KDF input arg is ignored as it'll be generated. // KDF input arg is ignored as it'll be generated.
case MFDES_KDF_ALGO_NONE: case MFDES_KDF_ALGO_NONE:
break; break;
default: default:

View file

@ -681,7 +681,7 @@ static int CmdConnect(const char *Cmd) {
} }
static command_t CommandTable[] = { static command_t CommandTable[] = {
{"-------------", CmdHelp, AlwaysAvailable, "----------------------- " _CYAN_("Hardware") " -----------------------"}, {"-------------", CmdHelp, AlwaysAvailable, "----------------------- " _CYAN_("Hardware") " -----------------------"},
{"help", CmdHelp, AlwaysAvailable, "This help"}, {"help", CmdHelp, AlwaysAvailable, "This help"},
{"connect", CmdConnect, AlwaysAvailable, "connect Proxmark3 to serial port"}, {"connect", CmdConnect, AlwaysAvailable, "connect Proxmark3 to serial port"},
{"dbg", CmdDbg, IfPm3Present, "Set Proxmark3 debug level"}, {"dbg", CmdDbg, IfPm3Present, "Set Proxmark3 debug level"},

View file

@ -223,7 +223,7 @@ static bool detectPSK(void) {
// In order to hit the INVERT, we need to demod here // In order to hit the INVERT, we need to demod here
if (DemodBufferLen < 11) { if (DemodBufferLen < 11) {
PrintAndLogEx(INFO," demod buff len less than PREAMBLE lEN"); PrintAndLogEx(INFO, " demod buff len less than PREAMBLE lEN");
} }
size_t size = (11 > DemodBufferLen) ? DemodBufferLen : 11; size_t size = (11 > DemodBufferLen) ? DemodBufferLen : 11;
@ -388,7 +388,7 @@ static bool em4x05_verify_write(uint8_t addr, uint32_t pwd, bool use_pwd, uint32
int res = em4x05_read_word_ext(addr, pwd, use_pwd, &r); int res = em4x05_read_word_ext(addr, pwd, use_pwd, &r);
if (res == PM3_SUCCESS) { if (res == PM3_SUCCESS) {
return (r == data); return (r == data);
} }
return false; return false;
} }
@ -409,7 +409,7 @@ int em4x05_clone_tag(uint32_t *blockdata, uint8_t numblocks, uint32_t pwd, bool
if (i == numblocks - 1) { if (i == numblocks - 1) {
conn.block_after_ACK = false; conn.block_after_ACK = false;
} }
if (i != 0) { if (i != 0) {
blockdata[i] = reflect(blockdata[i], 32); blockdata[i] = reflect(blockdata[i], 32);
} }
@ -910,7 +910,7 @@ int CmdEM4x05Wipe(const char *Cmd) {
static const char *printEM4x05_known(uint32_t word) { static const char *printEM4x05_known(uint32_t word) {
switch(word) { switch (word) {
// case EM4305_DEFAULT_CONFIG_BLOCK: // case EM4305_DEFAULT_CONFIG_BLOCK:
case EM4305_PRESCO_CONFIG_BLOCK: { case EM4305_PRESCO_CONFIG_BLOCK: {
return "EM4305 DEFAULT / PRESCO"; return "EM4305 DEFAULT / PRESCO";
@ -1066,7 +1066,7 @@ static void printEM4x05config(em_tech_type_t card_type, uint32_t wordData) {
PrintAndLogEx(NORMAL, ""); PrintAndLogEx(NORMAL, "");
PrintAndLogEx(INFO, "--- " _CYAN_("Config Information") " ------------------------"); PrintAndLogEx(INFO, "--- " _CYAN_("Config Information") " ------------------------");
PrintAndLogEx(INFO, "ConfigWord: %08X ( " _YELLOW_("%s") " )", wordData, printEM4x05_known(wordData) ); PrintAndLogEx(INFO, "ConfigWord: %08X ( " _YELLOW_("%s") " )", wordData, printEM4x05_known(wordData));
PrintAndLogEx(INFO, " Data Rate: %02u | "_YELLOW_("RF/%u"), wordData & 0x3F, datarate); PrintAndLogEx(INFO, " Data Rate: %02u | "_YELLOW_("RF/%u"), wordData & 0x3F, datarate);
PrintAndLogEx(INFO, " Encoder: %u | " _YELLOW_("%s"), encoder, enc); PrintAndLogEx(INFO, " Encoder: %u | " _YELLOW_("%s"), encoder, enc);
@ -1820,7 +1820,7 @@ int CmdEM4x05Unlock(const char *Cmd) {
return exit_code; return exit_code;
} }
static size_t em4x05_Sniff_GetNextBitStart (size_t idx, size_t sc, int *data, size_t *pulsesamples) { static size_t em4x05_Sniff_GetNextBitStart(size_t idx, size_t sc, int *data, size_t *pulsesamples) {
while ((idx < sc) && (data[idx] <= 10)) // find a going high while ((idx < sc) && (data[idx] <= 10)) // find a going high
idx++; idx++;
@ -1828,7 +1828,7 @@ static size_t em4x05_Sniff_GetNextBitStart (size_t idx, size_t sc, int *data, si
idx++; idx++;
(*pulsesamples) = 0; (*pulsesamples) = 0;
while ((idx < sc) && ((data[idx+1] - data[idx]) < 10 )) { // find "sharp rise" while ((idx < sc) && ((data[idx + 1] - data[idx]) < 10)) { // find "sharp rise"
(*pulsesamples)++; (*pulsesamples)++;
idx++; idx++;
} }
@ -1836,7 +1836,7 @@ static size_t em4x05_Sniff_GetNextBitStart (size_t idx, size_t sc, int *data, si
return idx; return idx;
} }
uint32_t static em4x05_Sniff_GetBlock (char *bits, bool fwd) { uint32_t static em4x05_Sniff_GetBlock(char *bits, bool fwd) {
uint32_t value = 0; uint32_t value = 0;
uint8_t idx; uint8_t idx;
bool parityerror = false; bool parityerror = false;
@ -1882,7 +1882,7 @@ uint32_t static em4x05_Sniff_GetBlock (char *bits, bool fwd) {
if (parity != (bits[35] - '0')) if (parity != (bits[35] - '0'))
parityerror = true; parityerror = true;
if (parityerror) printf ("parity error : "); if (parityerror) printf("parity error : ");
if (!fwd) { if (!fwd) {
uint32_t t1 = value; uint32_t t1 = value;
@ -1923,14 +1923,14 @@ int CmdEM4x05Sniff(const char *Cmd) {
void *argtable[] = { void *argtable[] = {
arg_param_begin, arg_param_begin,
arg_lit0("1", "buf","Use the data in the buffer"), arg_lit0("1", "buf", "Use the data in the buffer"),
arg_lit0("r", "rev", "Reverse the bit order for data blocks"), arg_lit0("r", "rev", "Reverse the bit order for data blocks"),
arg_param_end arg_param_end
}; };
CLIExecWithReturn(ctx, Cmd, argtable, true); CLIExecWithReturn(ctx, Cmd, argtable, true);
sampleData = !arg_get_lit(ctx,1); sampleData = !arg_get_lit(ctx, 1);
fwd = arg_get_lit(ctx,2); fwd = arg_get_lit(ctx, 2);
// setup and sample data from Proxmark // setup and sample data from Proxmark
// if not directed to existing sample/graphbuffer // if not directed to existing sample/graphbuffer
@ -1955,26 +1955,26 @@ int CmdEM4x05Sniff(const char *Cmd) {
haveData = false; haveData = false;
pwd = false; pwd = false;
idx = em4x05_Sniff_GetNextBitStart (idx, GraphTraceLen, GraphBuffer, &pulseSamples); idx = em4x05_Sniff_GetNextBitStart(idx, GraphTraceLen, GraphBuffer, &pulseSamples);
pktOffset = idx; pktOffset = idx;
if (pulseSamples >= 10) { // Should be 18 so a bit less to allow for processing if (pulseSamples >= 10) { // Should be 18 so a bit less to allow for processing
// Use first bit to get "0" bit samples as a reference // Use first bit to get "0" bit samples as a reference
ZeroWidth = idx; ZeroWidth = idx;
idx = em4x05_Sniff_GetNextBitStart (idx, GraphTraceLen, GraphBuffer, &pulseSamples); idx = em4x05_Sniff_GetNextBitStart(idx, GraphTraceLen, GraphBuffer, &pulseSamples);
ZeroWidth = idx - ZeroWidth; ZeroWidth = idx - ZeroWidth;
if (ZeroWidth <= 50) { if (ZeroWidth <= 50) {
pktOffset -= ZeroWidth; pktOffset -= ZeroWidth;
memset(bits,0x00,sizeof(bits)); memset(bits, 0x00, sizeof(bits));
bitidx = 0; bitidx = 0;
while ((idx < GraphTraceLen) && !eop) { while ((idx < GraphTraceLen) && !eop) {
CycleWidth = idx; CycleWidth = idx;
idx = em4x05_Sniff_GetNextBitStart (idx, GraphTraceLen, GraphBuffer, &pulseSamples); idx = em4x05_Sniff_GetNextBitStart(idx, GraphTraceLen, GraphBuffer, &pulseSamples);
CycleWidth = idx - CycleWidth; CycleWidth = idx - CycleWidth;
if ((CycleWidth > 300) || (CycleWidth < (ZeroWidth-5))) { // to long or too short if ((CycleWidth > 300) || (CycleWidth < (ZeroWidth - 5))) { // to long or too short
eop = true; eop = true;
bits[bitidx++] = '0'; // Append last zero from the last bit find bits[bitidx++] = '0'; // Append last zero from the last bit find
cmdText[0] = 0; cmdText[0] = 0;
@ -1988,70 +1988,70 @@ int CmdEM4x05Sniff(const char *Cmd) {
// -> disable 1010 11111111 0 11111111 0 11111111 0 11111111 0 00000000 0 // -> disable 1010 11111111 0 11111111 0 11111111 0 11111111 0 00000000 0
// Check to see if we got the leading 0 // Check to see if we got the leading 0
if (((strncmp (bits,"00011",5) == 0)&& (bitidx == 50)) || if (((strncmp(bits, "00011", 5) == 0) && (bitidx == 50)) ||
((strncmp (bits,"00101",5) == 0)&& (bitidx == 57)) || ((strncmp(bits, "00101", 5) == 0) && (bitidx == 57)) ||
((strncmp (bits,"01001",5) == 0)&& (bitidx == 12)) || ((strncmp(bits, "01001", 5) == 0) && (bitidx == 12)) ||
((strncmp (bits,"01100",5) == 0)&& (bitidx == 50)) || ((strncmp(bits, "01100", 5) == 0) && (bitidx == 50)) ||
((strncmp (bits,"01010",5) == 0)&& (bitidx == 50))) { ((strncmp(bits, "01010", 5) == 0) && (bitidx == 50))) {
memcpy (bits,&bits[1],bitidx-1); memcpy(bits, &bits[1], bitidx - 1);
bitidx--; bitidx--;
printf ("Trim leading 0\n"); printf("Trim leading 0\n");
} }
bits[bitidx] = 0; bits[bitidx] = 0;
// printf ("==> %s\n",bits); // printf ("==> %s\n",bits);
// logon // logon
if ((strncmp (bits,"0011",4) == 0) && (bitidx == 49)) { if ((strncmp(bits, "0011", 4) == 0) && (bitidx == 49)) {
haveData = true; haveData = true;
pwd = true; pwd = true;
sprintf (cmdText,"Logon"); sprintf(cmdText, "Logon");
sprintf (blkAddr," "); sprintf(blkAddr, " ");
tmpValue = em4x05_Sniff_GetBlock (&bits[4], fwd); tmpValue = em4x05_Sniff_GetBlock(&bits[4], fwd);
sprintf (dataText,"%08X",tmpValue); sprintf(dataText, "%08X", tmpValue);
} }
// write // write
if ((strncmp (bits,"0101",4) == 0) && (bitidx == 56)) { if ((strncmp(bits, "0101", 4) == 0) && (bitidx == 56)) {
haveData = true; haveData = true;
sprintf (cmdText,"Write"); sprintf(cmdText, "Write");
tmpValue = (bits[4] - '0') + ((bits[5] - '0') << 1) + ((bits[6] - '0') << 2) + ((bits[7] - '0') << 3); tmpValue = (bits[4] - '0') + ((bits[5] - '0') << 1) + ((bits[6] - '0') << 2) + ((bits[7] - '0') << 3);
sprintf (blkAddr,"%d",tmpValue); sprintf(blkAddr, "%d", tmpValue);
if (tmpValue == 2) if (tmpValue == 2)
pwd = true; pwd = true;
tmpValue = em4x05_Sniff_GetBlock (&bits[11], fwd); tmpValue = em4x05_Sniff_GetBlock(&bits[11], fwd);
sprintf (dataText,"%08X",tmpValue); sprintf(dataText, "%08X", tmpValue);
} }
// read // read
if ((strncmp (bits,"1001",4) == 0) && (bitidx == 11)) { if ((strncmp(bits, "1001", 4) == 0) && (bitidx == 11)) {
haveData = true; haveData = true;
pwd = false; pwd = false;
sprintf (cmdText,"Read"); sprintf(cmdText, "Read");
tmpValue = (bits[4] - '0') + ((bits[5] - '0') << 1) + ((bits[6] - '0') << 2) + ((bits[7] - '0') << 3); tmpValue = (bits[4] - '0') + ((bits[5] - '0') << 1) + ((bits[6] - '0') << 2) + ((bits[7] - '0') << 3);
sprintf (blkAddr,"%d",tmpValue); sprintf(blkAddr, "%d", tmpValue);
sprintf (dataText," "); sprintf(dataText, " ");
} }
// protect // protect
if ((strncmp (bits,"1100",4) == 0) && (bitidx == 49)) { if ((strncmp(bits, "1100", 4) == 0) && (bitidx == 49)) {
haveData = true; haveData = true;
pwd = false; pwd = false;
sprintf (cmdText,"Protect"); sprintf(cmdText, "Protect");
sprintf (blkAddr," "); sprintf(blkAddr, " ");
tmpValue = em4x05_Sniff_GetBlock (&bits[11], fwd); tmpValue = em4x05_Sniff_GetBlock(&bits[11], fwd);
sprintf (dataText,"%08X",tmpValue); sprintf(dataText, "%08X", tmpValue);
} }
// disable // disable
if ((strncmp (bits,"1010",4) == 0) && (bitidx == 49)) { if ((strncmp(bits, "1010", 4) == 0) && (bitidx == 49)) {
haveData = true; haveData = true;
pwd = false; pwd = false;
sprintf (cmdText,"Disable"); sprintf(cmdText, "Disable");
sprintf (blkAddr," "); sprintf(blkAddr, " ");
tmpValue = em4x05_Sniff_GetBlock (&bits[11], fwd); tmpValue = em4x05_Sniff_GetBlock(&bits[11], fwd);
sprintf (dataText,"%08X",tmpValue); sprintf(dataText, "%08X", tmpValue);
} }
// bits[bitidx] = 0; // bits[bitidx] = 0;
} else { } else {
i = (CycleWidth - ZeroWidth) / 28; i = (CycleWidth - ZeroWidth) / 28;
bits[bitidx++] = '0'; bits[bitidx++] = '0';

View file

@ -442,7 +442,7 @@ static int CmdHIDBrute(const char *Cmd) {
} }
CLIParserFree(ctx); CLIParserFree(ctx);
if (verbose) { if (verbose) {
PrintAndLogEx(INFO, "Wiegand format#.. %i", format_idx); PrintAndLogEx(INFO, "Wiegand format#.. %i", format_idx);
PrintAndLogEx(INFO, "OEM#............. %u", cn_hi.OEM); PrintAndLogEx(INFO, "OEM#............. %u", cn_hi.OEM);

View file

@ -22,7 +22,7 @@
#include "protocols.h" // for T55xx config register definitions #include "protocols.h" // for T55xx config register definitions
#include "lfdemod.h" // preamble test #include "lfdemod.h" // preamble test
#include "cmdlft55xx.h" // verifywrite #include "cmdlft55xx.h" // verifywrite
#include "cmdlfem4x05.h" // #include "cmdlfem4x05.h" //
static int CmdHelp(const char *Cmd); static int CmdHelp(const char *Cmd);
typedef enum {Scramble = 0, Descramble = 1} KeriMSScramble_t; typedef enum {Scramble = 0, Descramble = 1} KeriMSScramble_t;
@ -154,7 +154,7 @@ int demodKeri(bool verbose) {
raw1 = bytebits_to_byte(DemodBuffer, 32); raw1 = bytebits_to_byte(DemodBuffer, 32);
raw2 = bytebits_to_byte(DemodBuffer + 32, 32); raw2 = bytebits_to_byte(DemodBuffer + 32, 32);
CmdPrintDemodBuff("x"); CmdPrintDemodBuff("x");
} }
@ -166,7 +166,7 @@ int demodKeri(bool verbose) {
ID &= 0x7FFFFFFF; ID &= 0x7FFFFFFF;
PrintAndLogEx(SUCCESS, "KERI - Internal ID: " _GREEN_("%u") ", Raw: %08X%08X", ID, raw1, raw2); PrintAndLogEx(SUCCESS, "KERI - Internal ID: " _GREEN_("%u") ", Raw: %08X%08X", ID, raw1, raw2);
// Just need to the low 32 bits without the 111 trailer // Just need to the low 32 bits without the 111 trailer
CmdKeriMSScramble(Descramble, &fc, &cardid, &raw2); CmdKeriMSScramble(Descramble, &fc, &cardid, &raw2);
@ -227,12 +227,12 @@ static int CmdKeriClone(const char *Cmd) {
char cardtype[16] = {"T55x7"}; char cardtype[16] = {"T55x7"};
if (arg_get_lit(ctx, 1)) { if (arg_get_lit(ctx, 1)) {
blocks[0] = T5555_FIXED | T5555_MODULATION_PSK1 | T5555_SET_BITRATE(32) | T5555_PSK_RF_2 | 2 << T5555_MAXBLOCK_SHIFT; blocks[0] = T5555_FIXED | T5555_MODULATION_PSK1 | T5555_SET_BITRATE(32) | T5555_PSK_RF_2 | 2 << T5555_MAXBLOCK_SHIFT;
snprintf(cardtype, sizeof(cardtype) ,"Q5/T5555"); snprintf(cardtype, sizeof(cardtype), "Q5/T5555");
q5 = true; q5 = true;
} }
if (arg_get_lit(ctx, 5)) { if (arg_get_lit(ctx, 5)) {
blocks[0] = EM4305_KERI_CONFIG_BLOCK; blocks[0] = EM4305_KERI_CONFIG_BLOCK;
snprintf(cardtype, sizeof(cardtype) ,"EM4305/4469"); snprintf(cardtype, sizeof(cardtype), "EM4305/4469");
em = true; em = true;
} }
@ -242,7 +242,7 @@ static int CmdKeriClone(const char *Cmd) {
fc = arg_get_int_def(ctx, 3, 0); fc = arg_get_int_def(ctx, 3, 0);
cid = arg_get_int_def(ctx, 4, 0); cid = arg_get_int_def(ctx, 4, 0);
CLIParserFree(ctx); CLIParserFree(ctx);
if (q5 && em) { if (q5 && em) {
PrintAndLogEx(FAILED, "Can't specify both Q5 and EM4305 at the same time"); PrintAndLogEx(FAILED, "Can't specify both Q5 and EM4305 at the same time");
return PM3_EINVARG; return PM3_EINVARG;
@ -278,7 +278,7 @@ static int CmdKeriClone(const char *Cmd) {
} else { } else {
res = clone_t55xx_tag(blocks, ARRAYLEN(blocks)); res = clone_t55xx_tag(blocks, ARRAYLEN(blocks));
} }
PrintAndLogEx(SUCCESS, "Done"); PrintAndLogEx(SUCCESS, "Done");
PrintAndLogEx(HINT, "Hint: try " _YELLOW_("`lf keri read`") " to verify"); PrintAndLogEx(HINT, "Hint: try " _YELLOW_("`lf keri read`") " to verify");
return res; return res;

View file

@ -3041,8 +3041,8 @@ static int CmdT55xxChkPwds(const char *Cmd) {
} }
if (errors) return usage_t55xx_chk(); if (errors) return usage_t55xx_chk();
if (strlen(filename) == 0){ if (strlen(filename) == 0) {
snprintf(filename, sizeof(filename), "t55xx_default_pwds"); snprintf(filename, sizeof(filename), "t55xx_default_pwds");
use_pwd_file = true; use_pwd_file = true;
} }
@ -3133,9 +3133,9 @@ static int CmdT55xxChkPwds(const char *Cmd) {
return PM3_ESOFT; return PM3_ESOFT;
} }
PrintAndLogEx(INFO, "press " _YELLOW_("'enter'") " to cancel the command"); PrintAndLogEx(INFO, "press " _YELLOW_("'enter'") " to cancel the command");
for (uint32_t c = 0; c < keycount; ++c) { for (uint32_t c = 0; c < keycount; ++c) {
if (!session.pm3_present) { if (!session.pm3_present) {

View file

@ -187,21 +187,21 @@ static int CmdVisa2kClone(const char *Cmd) {
bool q5 = tolower(param_getchar(Cmd, 1)) == 'q'; bool q5 = tolower(param_getchar(Cmd, 1)) == 'q';
if (q5) { if (q5) {
blocks[0] = T5555_FIXED | T5555_MODULATION_MANCHESTER | T5555_SET_BITRATE(64) | T5555_ST_TERMINATOR | 3 << T5555_MAXBLOCK_SHIFT; blocks[0] = T5555_FIXED | T5555_MODULATION_MANCHESTER | T5555_SET_BITRATE(64) | T5555_ST_TERMINATOR | 3 << T5555_MAXBLOCK_SHIFT;
snprintf(cardtype, sizeof(cardtype) ,"Q5/T5555"); snprintf(cardtype, sizeof(cardtype), "Q5/T5555");
} }
// EM4305 // EM4305
bool em = tolower(param_getchar(Cmd, 1)) == 'e'; bool em = tolower(param_getchar(Cmd, 1)) == 'e';
if (em) { if (em) {
blocks[0] = EM4305_VISA2000_CONFIG_BLOCK; blocks[0] = EM4305_VISA2000_CONFIG_BLOCK;
snprintf(cardtype, sizeof(cardtype) ,"EM4305/4469"); snprintf(cardtype, sizeof(cardtype), "EM4305/4469");
} }
if (q5 && em) { if (q5 && em) {
PrintAndLogEx(FAILED, "Can't specify both Q5 and EM4305 at the same time"); PrintAndLogEx(FAILED, "Can't specify both Q5 and EM4305 at the same time");
return PM3_EINVARG; return PM3_EINVARG;
} }
blocks[2] = id; blocks[2] = id;
blocks[3] = (visa_parity(id) << 4) | visa_chksum(id); blocks[3] = (visa_parity(id) << 4) | visa_chksum(id);

View file

@ -633,24 +633,24 @@ static int CmdSmartUpgrade(const char *Cmd) {
uint32_t bytes_remaining = firmware_size; uint32_t bytes_remaining = firmware_size;
while (bytes_remaining > 0) { while (bytes_remaining > 0) {
struct { struct {
uint32_t idx; uint32_t idx;
uint32_t bytes_in_packet; uint32_t bytes_in_packet;
uint16_t crc; uint16_t crc;
uint8_t data[400]; uint8_t data[400];
} PACKED upload; } PACKED upload;
uint32_t bytes_in_packet = MIN(sizeof(upload.data), bytes_remaining); uint32_t bytes_in_packet = MIN(sizeof(upload.data), bytes_remaining);
upload.idx = index + bytes_sent; upload.idx = index + bytes_sent;
upload.bytes_in_packet = bytes_in_packet; upload.bytes_in_packet = bytes_in_packet;
memcpy(upload.data, firmware + bytes_sent, bytes_in_packet); memcpy(upload.data, firmware + bytes_sent, bytes_in_packet);
uint8_t a = 0, b = 0; uint8_t a = 0, b = 0;
compute_crc(CRC_14443_A, upload.data, bytes_in_packet, &a, &b); compute_crc(CRC_14443_A, upload.data, bytes_in_packet, &a, &b);
upload.crc = (a << 8 | b); upload.crc = (a << 8 | b);
clearCommandBuffer(); clearCommandBuffer();
SendCommandNG(CMD_SMART_UPLOAD, (uint8_t *)&upload, sizeof(upload)); SendCommandNG(CMD_SMART_UPLOAD, (uint8_t *)&upload, sizeof(upload));
if (!WaitForResponseTimeout(CMD_SMART_UPLOAD, &resp, 2000)) { if (!WaitForResponseTimeout(CMD_SMART_UPLOAD, &resp, 2000)) {
@ -658,7 +658,7 @@ static int CmdSmartUpgrade(const char *Cmd) {
free(firmware); free(firmware);
return PM3_ETIMEOUT; return PM3_ETIMEOUT;
} }
if (resp.status != PM3_SUCCESS) { if (resp.status != PM3_SUCCESS) {
PrintAndLogEx(WARNING, "uploading to device failed"); PrintAndLogEx(WARNING, "uploading to device failed");
free(firmware); free(firmware);
@ -671,25 +671,25 @@ static int CmdSmartUpgrade(const char *Cmd) {
PrintAndLogEx(NORMAL, ""); PrintAndLogEx(NORMAL, "");
PrintAndLogEx(SUCCESS, "Sim module firmware updating, don\'t turn off your PM3!"); PrintAndLogEx(SUCCESS, "Sim module firmware updating, don\'t turn off your PM3!");
// trigger the firmware upgrade // trigger the firmware upgrade
clearCommandBuffer(); clearCommandBuffer();
struct { struct {
uint16_t fw_size; uint16_t fw_size;
uint16_t crc; uint16_t crc;
} PACKED payload; } PACKED payload;
payload.fw_size = firmware_size; payload.fw_size = firmware_size;
uint8_t a = 0, b = 0; uint8_t a = 0, b = 0;
compute_crc(CRC_14443_A, firmware, firmware_size, &a, &b); compute_crc(CRC_14443_A, firmware, firmware_size, &a, &b);
payload.crc = (a << 8 | b); payload.crc = (a << 8 | b);
free(firmware); free(firmware);
SendCommandNG(CMD_SMART_UPGRADE, (uint8_t *)&payload, sizeof(payload)); SendCommandNG(CMD_SMART_UPGRADE, (uint8_t *)&payload, sizeof(payload));
if (!WaitForResponseTimeout(CMD_SMART_UPGRADE, &resp, 2500)) { if (!WaitForResponseTimeout(CMD_SMART_UPGRADE, &resp, 2500)) {
PrintAndLogEx(WARNING, "timeout while waiting for reply."); PrintAndLogEx(WARNING, "timeout while waiting for reply.");
return PM3_ETIMEOUT; return PM3_ETIMEOUT;
} }
if (resp.status == PM3_SUCCESS) { if (resp.status == PM3_SUCCESS) {
PrintAndLogEx(SUCCESS, "Sim module firmware upgrade " _GREEN_("successful")); PrintAndLogEx(SUCCESS, "Sim module firmware upgrade " _GREEN_("successful"));
PrintAndLogEx(HINT, "run " _YELLOW_("`hw status`") " to validate the fw version "); PrintAndLogEx(HINT, "run " _YELLOW_("`hw status`") " to validate the fw version ");
@ -843,7 +843,7 @@ static int CmdSmartSetClock(const char *Cmd) {
payload.new_clk = new_clk; payload.new_clk = new_clk;
clearCommandBuffer(); clearCommandBuffer();
SendCommandNG(CMD_SMART_SETCLOCK, (uint8_t*)&payload, sizeof(payload)); SendCommandNG(CMD_SMART_SETCLOCK, (uint8_t *)&payload, sizeof(payload));
PacketResponseNG resp; PacketResponseNG resp;
if (!WaitForResponseTimeout(CMD_SMART_SETCLOCK, &resp, 2500)) { if (!WaitForResponseTimeout(CMD_SMART_SETCLOCK, &resp, 2500)) {
PrintAndLogEx(WARNING, "smart card select failed"); PrintAndLogEx(WARNING, "smart card select failed");

View file

@ -618,7 +618,7 @@ static bool Pack_Optus(wiegand_card_t *card, wiegand_message_t *packed) {
packed->Length = 34; // Set number of bits packed->Length = 34; // Set number of bits
set_linear_field(packed, card->CardNumber, 1, 16); set_linear_field(packed, card->CardNumber, 1, 16);
set_linear_field(packed, card->FacilityCode, 22, 11); set_linear_field(packed, card->FacilityCode, 22, 11);
return add_HID_header(packed); return add_HID_header(packed);
} }
@ -673,14 +673,14 @@ static bool Pack_bqt(wiegand_card_t *card, wiegand_message_t *packed) {
set_linear_field(packed, card->FacilityCode, 1, 8); set_linear_field(packed, card->FacilityCode, 1, 8);
set_linear_field(packed, card->CardNumber, 9, 24); set_linear_field(packed, card->CardNumber, 9, 24);
set_bit_by_position(packed, set_bit_by_position(packed,
evenparity32(get_linear_field(packed, 1, 16)) evenparity32(get_linear_field(packed, 1, 16))
, 0); , 0);
set_bit_by_position(packed, set_bit_by_position(packed,
oddparity32(get_linear_field(packed, 17, 16)) oddparity32(get_linear_field(packed, 17, 16))
, 33); , 33);
return add_HID_header(packed); return add_HID_header(packed);
} }
@ -691,7 +691,7 @@ static bool Unpack_bqt(wiegand_message_t *packed, wiegand_card_t *card) {
card->FacilityCode = get_linear_field(packed, 1, 8); card->FacilityCode = get_linear_field(packed, 1, 8);
card->CardNumber = get_linear_field(packed, 9, 24); card->CardNumber = get_linear_field(packed, 9, 24);
card->ParityValid = card->ParityValid =
(get_bit_by_position(packed, 0) == evenparity32(get_linear_field(packed, 1, 16))) && (get_bit_by_position(packed, 0) == evenparity32(get_linear_field(packed, 1, 16))) &&
(get_bit_by_position(packed, 33) == oddparity32(get_linear_field(packed, 17, 16))); (get_bit_by_position(packed, 33) == oddparity32(get_linear_field(packed, 17, 16)));
@ -707,9 +707,9 @@ static const cardformat_t FormatTable[] = {
{"Kastle", Pack_Kastle, Unpack_Kastle, "Kastle 32-bit", {1, 1, 1, 0, 1}}, // from @xilni; PR #23 on RfidResearchGroup/proxmark3 {"Kastle", Pack_Kastle, Unpack_Kastle, "Kastle 32-bit", {1, 1, 1, 0, 1}}, // from @xilni; PR #23 on RfidResearchGroup/proxmark3
{"D10202", Pack_D10202, Unpack_D10202, "HID D10202 33-bit", {1, 1, 0, 0, 1}}, // from cardinfo.barkweb.com.au {"D10202", Pack_D10202, Unpack_D10202, "HID D10202 33-bit", {1, 1, 0, 0, 1}}, // from cardinfo.barkweb.com.au
{"H10306", Pack_H10306, Unpack_H10306, "HID H10306 34-bit", {1, 1, 0, 0, 1}}, // imported from old pack/unpack {"H10306", Pack_H10306, Unpack_H10306, "HID H10306 34-bit", {1, 1, 0, 0, 1}}, // imported from old pack/unpack
{"N10002", Pack_N10002, Unpack_N10002, "HID N10002 34-bit", {1, 1, 0, 0, 0}}, // from cardinfo.barkweb.com.au {"N10002", Pack_N10002, Unpack_N10002, "HID N10002 34-bit", {1, 1, 0, 0, 0}}, // from cardinfo.barkweb.com.au
{"Optus34", Pack_Optus, Unpack_Optus, "Indala Optus 34-bit", {1, 1, 0, 0, 0}}, // from cardinfo.barkweb.com.au {"Optus34", Pack_Optus, Unpack_Optus, "Indala Optus 34-bit", {1, 1, 0, 0, 0}}, // from cardinfo.barkweb.com.au
{"Smartpass", Pack_Smartpass, Unpack_Smartpass, "Cardkey Smartpass 34-bit", {1, 1, 1, 0, 0}}, // from cardinfo.barkweb.com.au {"Smartpass", Pack_Smartpass, Unpack_Smartpass, "Cardkey Smartpass 34-bit", {1, 1, 1, 0, 0}}, // from cardinfo.barkweb.com.au
{"BQT", Pack_bqt, Unpack_bqt, "BQT 34-bit", {1, 1, 0, 0, 1}}, // from cardinfo.barkweb.com.au {"BQT", Pack_bqt, Unpack_bqt, "BQT 34-bit", {1, 1, 0, 0, 1}}, // from cardinfo.barkweb.com.au
{"C1k35s", Pack_C1k35s, Unpack_C1k35s, "HID Corporate 1000 35-bit standard layout", {1, 1, 0, 0, 1}}, // imported from old pack/unpack {"C1k35s", Pack_C1k35s, Unpack_C1k35s, "HID Corporate 1000 35-bit standard layout", {1, 1, 0, 0, 1}}, // imported from old pack/unpack
{"C15001", Pack_C15001, Unpack_C15001, "HID KeyScan 36-bit", {1, 1, 0, 1, 1}}, // from Proxmark forums {"C15001", Pack_C15001, Unpack_C15001, "HID KeyScan 36-bit", {1, 1, 0, 1, 1}}, // from Proxmark forums

View file

@ -160,7 +160,7 @@ Check column "offline" for their availability.
|`hf 14b reader `|N |`Act as a 14443B reader to identify a tag` |`hf 14b reader `|N |`Act as a 14443B reader to identify a tag`
|`hf 14b sim `|N |`Fake ISO 14443B tag` |`hf 14b sim `|N |`Fake ISO 14443B tag`
|`hf 14b sniff `|N |`Eavesdrop ISO 14443B` |`hf 14b sniff `|N |`Eavesdrop ISO 14443B`
|`hf 14b sriread `|N |`Read contents of a SRI512 | SRIX4K tag` |`hf 14b rdbl `|N |`Read SRI512/SRIX4x block`
|`hf 14b sriwrite `|N |`Write data to a SRI512 | SRIX4K tag` |`hf 14b sriwrite `|N |`Write data to a SRI512 | SRIX4K tag`
@ -203,7 +203,7 @@ Check column "offline" for their availability.
### hf felica ### hf felica
{ ISO18092 / Felica RFIDs... } { ISO18092 / FeliCa RFIDs... }
|command |offline |description |command |offline |description
|------- |------- |----------- |------- |------- |-----------
@ -325,6 +325,7 @@ Check column "offline" for their availability.
|`hf mf chk `|N |`Check keys` |`hf mf chk `|N |`Check keys`
|`hf mf fchk `|N |`Check keys fast, targets all keys on card` |`hf mf fchk `|N |`Check keys fast, targets all keys on card`
|`hf mf decrypt `|Y |`[nt] [ar_enc] [at_enc] [data] - to decrypt sniff or trace` |`hf mf decrypt `|Y |`[nt] [ar_enc] [at_enc] [data] - to decrypt sniff or trace`
|`hf mf supercard `|N |`Extract info from a `super card``
|`hf mf auth4 `|N |`ISO14443-4 AES authentication` |`hf mf auth4 `|N |`ISO14443-4 AES authentication`
|`hf mf dump `|N |`Dump MIFARE Classic tag to binary file` |`hf mf dump `|N |`Dump MIFARE Classic tag to binary file`
|`hf mf mad `|N |`Checks and prints MAD` |`hf mf mad `|N |`Checks and prints MAD`
@ -591,10 +592,12 @@ Check column "offline" for their availability.
|`lf em 4x05_read `|N |`read word data from EM4x05/EM4x69` |`lf em 4x05_read `|N |`read word data from EM4x05/EM4x69`
|`lf em 4x05_write `|N |`write word data to EM4x05/EM4x69` |`lf em 4x05_write `|N |`write word data to EM4x05/EM4x69`
|`lf em 4x05_unlock `|N |`execute tear off against EM4x05/EM4x69` |`lf em 4x05_unlock `|N |`execute tear off against EM4x05/EM4x69`
|`lf em 4x05_sniff `|Y |`Attempt to recover em4x05 commands from sample buffer`
|`lf em 4x05_brute `|N |`Bruteforce password`
|`lf em 4x50_dump `|N |`dump EM4x50 tag` |`lf em 4x50_dump `|N |`dump EM4x50 tag`
|`lf em 4x50_info `|N |`tag information EM4x50` |`lf em 4x50_info `|N |`tag information EM4x50`
|`lf em 4x50_write `|N |`write word data to EM4x50` |`lf em 4x50_write `|N |`write word data to EM4x50`
|`lf em 4x50_write_password`|N |`change passwword of EM4x50 tag` |`lf em 4x50_write_password`|N |`change password of EM4x50 tag`
|`lf em 4x50_read `|N |`read word data from EM4x50` |`lf em 4x50_read `|N |`read word data from EM4x50`
|`lf em 4x50_wipe `|N |`wipe data from EM4x50` |`lf em 4x50_wipe `|N |`wipe data from EM4x50`