make style

This commit is contained in:
Grayson Martin 2023-07-11 15:42:30 -05:00
commit 8af75cb220
No known key found for this signature in database
GPG key ID: 4914C62F2696A273
4 changed files with 128 additions and 127 deletions

View file

@ -1151,43 +1151,43 @@ static int CmdSmartBruteforceSFI(const char *Cmd) {
} }
static void atsToEmulatedAtr(uint8_t *ats, uint8_t *atr, int *atrLen) { static void atsToEmulatedAtr(uint8_t *ats, uint8_t *atr, int *atrLen) {
int historicalLen = 0; int historicalLen = 0;
int offset = 2; int offset = 2;
if (ats[0] < 2) { if (ats[0] < 2) {
historicalLen = 0; historicalLen = 0;
} else { } else {
if ((ats[1] & 64) != 0) { if ((ats[1] & 64) != 0) {
offset++; offset++;
} }
if ((ats[1] & 32) != 0) { if ((ats[1] & 32) != 0) {
offset++; offset++;
} }
if ((ats[1] & 16) != 0) { if ((ats[1] & 16) != 0) {
offset++; offset++;
} }
if (offset >= ats[0]) { if (offset >= ats[0]) {
historicalLen = 0; historicalLen = 0;
} else { } else {
historicalLen = ats[0] - offset; historicalLen = ats[0] - offset;
} }
} }
atr[0] = 0x3B; atr[0] = 0x3B;
atr[1] = 0x80 | historicalLen; atr[1] = 0x80 | historicalLen;
atr[2] = 0x80; atr[2] = 0x80;
atr[3] = 0x01; atr[3] = 0x01;
uint8_t tck = 0; uint8_t tck = 0;
for (int i = 0; i < historicalLen; ++i) { for (int i = 0; i < historicalLen; ++i) {
atr[4 + i] = ats[offset + i]; atr[4 + i] = ats[offset + i];
tck = tck ^ ats[offset + i]; tck = tck ^ ats[offset + i];
} }
atr[4 + historicalLen] = tck; atr[4 + historicalLen] = tck;
*atrLen = 5 + historicalLen; *atrLen = 5 + historicalLen;
} }
static int CmdRelay(const char *Cmd) { static int CmdRelay(const char *Cmd) {
@ -1199,113 +1199,113 @@ static int CmdRelay(const char *Cmd) {
void *argtable[] = { void *argtable[] = {
arg_param_begin, arg_param_begin,
arg_str0(NULL, "host", "<str>", "vpcd socket host (default: localhost)"), arg_str0(NULL, "host", "<str>", "vpcd socket host (default: localhost)"),
arg_str0("p", "port", "<int>", "vpcd socket port (default: 35963)"), arg_str0("p", "port", "<int>", "vpcd socket port (default: 35963)"),
arg_lit0("v", "verbose", "display APDU transactions between OS and card"), arg_lit0("v", "verbose", "display APDU transactions between OS and card"),
arg_param_end arg_param_end
}; };
CLIExecWithReturn(ctx, Cmd, argtable, true); CLIExecWithReturn(ctx, Cmd, argtable, true);
uint8_t host[100] = {0}; uint8_t host[100] = {0};
int hostLen = sizeof(host); int hostLen = sizeof(host);
CLIGetStrWithReturn(ctx, 1, host, &hostLen); CLIGetStrWithReturn(ctx, 1, host, &hostLen);
if (hostLen == 0) { if (hostLen == 0) {
strcpy((char *) host, "localhost"); strcpy((char *) host, "localhost");
} }
uint8_t port[6] = {0}; uint8_t port[6] = {0};
int portLen = sizeof(port); int portLen = sizeof(port);
CLIGetStrWithReturn(ctx, 2, port, &portLen); CLIGetStrWithReturn(ctx, 2, port, &portLen);
if (portLen == 0) { if (portLen == 0) {
strcpy((char *) port, "35963"); strcpy((char *) port, "35963");
} }
bool verbose = arg_get_lit(ctx, 3); bool verbose = arg_get_lit(ctx, 3);
CLIParserFree(ctx); CLIParserFree(ctx);
mbedtls_net_context netCtx; mbedtls_net_context netCtx;
mbedtls_net_init(&netCtx); mbedtls_net_init(&netCtx);
PrintAndLogEx(INFO, "Relaying pm3 to host OS pcsc daemon. Press " _GREEN_("Enter") " to exit"); PrintAndLogEx(INFO, "Relaying pm3 to host OS pcsc daemon. Press " _GREEN_("Enter") " to exit");
uint8_t cmdbuf[512] = {0}; uint8_t cmdbuf[512] = {0};
bool haveCard = false; bool haveCard = false;
iso14a_card_select_t selectedCard; iso14a_card_select_t selectedCard;
do { do {
if (haveCard) { if (haveCard) {
int bytesRead = mbedtls_net_recv_timeout(&netCtx, cmdbuf, sizeof(cmdbuf), 100); int bytesRead = mbedtls_net_recv_timeout(&netCtx, cmdbuf, sizeof(cmdbuf), 100);
if (bytesRead == MBEDTLS_ERR_SSL_TIMEOUT || bytesRead == MBEDTLS_ERR_SSL_WANT_READ) { if (bytesRead == MBEDTLS_ERR_SSL_TIMEOUT || bytesRead == MBEDTLS_ERR_SSL_WANT_READ) {
continue; continue;
} }
if (bytesRead > 0) { if (bytesRead > 0) {
if (cmdbuf[1] == 0x01 && cmdbuf[2] == 0x04) { // vpcd GET ATR if (cmdbuf[1] == 0x01 && cmdbuf[2] == 0x04) { // vpcd GET ATR
uint8_t atr[20] = {0}; uint8_t atr[20] = {0};
int atrLen = 0; int atrLen = 0;
atsToEmulatedAtr(selectedCard.ats, atr, &atrLen); atsToEmulatedAtr(selectedCard.ats, atr, &atrLen);
uint8_t res[22] = {0}; uint8_t res[22] = {0};
res[1] = atrLen; res[1] = atrLen;
memcpy(res + 2, atr, atrLen); memcpy(res + 2, atr, atrLen);
mbedtls_net_send(&netCtx, res, 2 + atrLen); mbedtls_net_send(&netCtx, res, 2 + atrLen);
} else if (cmdbuf[1] != 0x01) { // vpcd APDU } else if (cmdbuf[1] != 0x01) { // vpcd APDU
int apduLen = (cmdbuf[0] << 8) + cmdbuf[1]; int apduLen = (cmdbuf[0] << 8) + cmdbuf[1];
uint8_t apduRes[APDU_RES_LEN] = {0}; uint8_t apduRes[APDU_RES_LEN] = {0};
int apduResLen = 0; int apduResLen = 0;
if (verbose) { if (verbose) {
PrintAndLogEx(INFO, ">> %s", sprint_hex(cmdbuf + 2, apduLen)); PrintAndLogEx(INFO, ">> %s", sprint_hex(cmdbuf + 2, apduLen));
} }
if (ExchangeAPDU14a(cmdbuf + 2, apduLen, true, true, apduRes, sizeof(apduRes), &apduResLen) != PM3_SUCCESS) { if (ExchangeAPDU14a(cmdbuf + 2, apduLen, true, true, apduRes, sizeof(apduRes), &apduResLen) != PM3_SUCCESS) {
haveCard = false; haveCard = false;
mbedtls_net_close(&netCtx); mbedtls_net_close(&netCtx);
continue; continue;
} }
if (verbose) { if (verbose) {
PrintAndLogEx(INFO, "<< %s", sprint_hex(apduRes, apduResLen)); PrintAndLogEx(INFO, "<< %s", sprint_hex(apduRes, apduResLen));
} }
uint8_t res[APDU_RES_LEN + 2] = {0}; uint8_t res[APDU_RES_LEN + 2] = {0};
res[0] = (apduResLen >> 8) & 0xFF; res[0] = (apduResLen >> 8) & 0xFF;
res[1] = apduResLen & 0xFF; res[1] = apduResLen & 0xFF;
memcpy(res + 2, apduRes, apduResLen); memcpy(res + 2, apduRes, apduResLen);
mbedtls_net_send(&netCtx, res, 2 + apduResLen); mbedtls_net_send(&netCtx, res, 2 + apduResLen);
} }
} }
} else { } else {
if (SelectCard14443A_4(false, false, &selectedCard) == PM3_SUCCESS) { if (SelectCard14443A_4(false, false, &selectedCard) == PM3_SUCCESS) {
if (mbedtls_net_connect(&netCtx, (char *) host, (char *) port, MBEDTLS_NET_PROTO_TCP)) { if (mbedtls_net_connect(&netCtx, (char *) host, (char *) port, MBEDTLS_NET_PROTO_TCP)) {
PrintAndLogEx(FAILED, "Failed to connect to vpcd socket. Ensure you have vpcd installed and running"); PrintAndLogEx(FAILED, "Failed to connect to vpcd socket. Ensure you have vpcd installed and running");
mbedtls_net_close(&netCtx); mbedtls_net_close(&netCtx);
mbedtls_net_free(&netCtx); mbedtls_net_free(&netCtx);
DropField(); DropField();
return PM3_EINVARG; return PM3_EINVARG;
} }
haveCard = true; haveCard = true;
} }
msleep(300); msleep(300);
} }
} while (!kbd_enter_pressed()); } while (!kbd_enter_pressed());
mbedtls_net_close(&netCtx); mbedtls_net_close(&netCtx);
mbedtls_net_free(&netCtx); mbedtls_net_free(&netCtx);
DropField(); DropField();
return PM3_SUCCESS; return PM3_SUCCESS;
} }
static command_t CommandTable[] = { static command_t CommandTable[] = {
{"help", CmdHelp, AlwaysAvailable, "This help"}, {"help", CmdHelp, AlwaysAvailable, "This help"},
{"list", CmdSmartList, AlwaysAvailable, "List ISO 7816 history"}, {"list", CmdSmartList, AlwaysAvailable, "List ISO 7816 history"},
{"info", CmdSmartInfo, IfPm3Smartcard, "Tag information"}, {"info", CmdSmartInfo, IfPm3Smartcard, "Tag information"},
{"relay", CmdRelay, IfPm3Iso14443a, "Turn pm3 into pcsc reader and relay to host OS via vpcd"}, {"relay", CmdRelay, IfPm3Iso14443a, "Turn pm3 into pcsc reader and relay to host OS via vpcd"},
{"reader", CmdSmartReader, IfPm3Smartcard, "Act like an IS07816 reader"}, {"reader", CmdSmartReader, IfPm3Smartcard, "Act like an IS07816 reader"},
{"raw", CmdSmartRaw, IfPm3Smartcard, "Send raw hex data to tag"}, {"raw", CmdSmartRaw, IfPm3Smartcard, "Send raw hex data to tag"},
{"upgrade", CmdSmartUpgrade, AlwaysAvailable, "Upgrade sim module firmware"}, {"upgrade", CmdSmartUpgrade, AlwaysAvailable, "Upgrade sim module firmware"},

View file

@ -75,7 +75,7 @@ static void PrintChannel(Iso7816CommandChannel channel) {
} }
} }
static int emv_parse_track1(const uint8_t *d, size_t n, bool verbose){ static int emv_parse_track1(const uint8_t *d, size_t n, bool verbose) {
if (d == NULL || n < 10) { if (d == NULL || n < 10) {
return PM3_EINVARG; return PM3_EINVARG;
} }
@ -89,20 +89,20 @@ static int emv_parse_track1(const uint8_t *d, size_t n, bool verbose){
} }
// decoder // decoder
char *tmp = str_ndup((const char*)d, n); char *tmp = str_ndup((const char *)d, n);
uint8_t i = 0; uint8_t i = 0;
char delim[2] = "^"; char delim[2] = "^";
char *token = strtok(tmp, delim); char *token = strtok(tmp, delim);
while (token != NULL) { while (token != NULL) {
switch(i) { switch (i) {
case 0: case 0:
PrintAndLogEx(INFO, "PAN...................... %c%c%c%c %c%c%c%c %c%c%c%c %c%c%c%c", PrintAndLogEx(INFO, "PAN...................... %c%c%c%c %c%c%c%c %c%c%c%c %c%c%c%c",
token[1], token[2],token[3], token[4], token[1], token[2], token[3], token[4],
token[5], token[6],token[7], token[8], token[5], token[6], token[7], token[8],
token[9], token[10],token[11], token[12], token[9], token[10], token[11], token[12],
token[13], token[14],token[15], token[16] token[13], token[14], token[15], token[16]
); );
break; break;
case 1: case 1:
PrintAndLogEx(INFO, "CardHolder............... %s", token); PrintAndLogEx(INFO, "CardHolder............... %s", token);
@ -121,7 +121,7 @@ static int emv_parse_track1(const uint8_t *d, size_t n, bool verbose){
token += 4; token += 4;
PrintAndLogEx(INFO, "CVV / iCvv............... %.*s", 3, token); PrintAndLogEx(INFO, "CVV / iCvv............... %.*s", 3, token);
token +=3; token += 3;
PrintAndLogEx(INFO, "Trailing................. %s", token); PrintAndLogEx(INFO, "Trailing................. %s", token);
break; break;
@ -152,11 +152,11 @@ static int emv_parse_track2(const uint8_t *d, size_t n, bool verbose) {
tmp++; tmp++;
PrintAndLogEx(INFO, "PAN...................... %c%c%c%c %c%c%c%c %c%c%c%c %c%c%c%c", PrintAndLogEx(INFO, "PAN...................... %c%c%c%c %c%c%c%c %c%c%c%c %c%c%c%c",
tmp[0], tmp[1], tmp[2],tmp[3], tmp[0], tmp[1], tmp[2], tmp[3],
tmp[4], tmp[5], tmp[6],tmp[7], tmp[4], tmp[5], tmp[6], tmp[7],
tmp[8], tmp[9], tmp[10],tmp[11], tmp[8], tmp[9], tmp[10], tmp[11],
tmp[12],tmp[13], tmp[14],tmp[15] tmp[12], tmp[13], tmp[14], tmp[15]
); );
tmp += 16; tmp += 16;
if (tmp[0] == '=' || tmp[0] == 'D') if (tmp[0] == '=' || tmp[0] == 'D')
@ -172,7 +172,7 @@ static int emv_parse_track2(const uint8_t *d, size_t n, bool verbose) {
tmp += 4; tmp += 4;
PrintAndLogEx(INFO, "CVV / iCvv............... %.*s", 3, tmp); PrintAndLogEx(INFO, "CVV / iCvv............... %.*s", 3, tmp);
tmp +=3; tmp += 3;
PrintAndLogEx(INFO, "Trailing................. %s", tmp); PrintAndLogEx(INFO, "Trailing................. %s", tmp);

View file

@ -1050,7 +1050,7 @@ static int ndefDecodePayload(NDEFHeader_t *ndef, bool verbose) {
if (str_startswith(begin, NDEF_BLUEAPPL_EP)) { if (str_startswith(begin, NDEF_BLUEAPPL_EP)) {
ndefDecodeMime_bt(ndef); ndefDecodeMime_bt(ndef);
} }
if (str_startswith(begin, NDEF_BLUEAPPL_SECURE_LE)) { if (str_startswith(begin, NDEF_BLUEAPPL_SECURE_LE)) {
ndefDecodeMime_bt_secure_le_oob(ndef); ndefDecodeMime_bt_secure_le_oob(ndef);

View file

@ -771,6 +771,7 @@ const static vocabulory_t vocabulory[] = {
{ 1, "smart help" }, { 1, "smart help" },
{ 1, "smart list" }, { 1, "smart list" },
{ 0, "smart info" }, { 0, "smart info" },
{ 0, "smart relay" },
{ 0, "smart reader" }, { 0, "smart reader" },
{ 0, "smart raw" }, { 0, "smart raw" },
{ 1, "smart upgrade" }, { 1, "smart upgrade" },