the data load for long file since we got the extended sniff possibility is hard to see. This commit now shows a comma printed version. It helps me :)

This commit is contained in:
iceman1001 2024-04-03 17:05:34 +02:00
commit 21f25ccd1f
2 changed files with 114 additions and 20 deletions

View file

@ -3,6 +3,7 @@ All notable changes to this project will be documented in this file.
This project uses the changelog in accordance with [keepchangelog](http://keepachangelog.com/). Please use this to write notable changes, which is not the same as git commit log... This project uses the changelog in accordance with [keepchangelog](http://keepachangelog.com/). Please use this to write notable changes, which is not the same as git commit log...
## [unreleased][unreleased] ## [unreleased][unreleased]
- Changed `data load` - now shows loaded number as comma printed. (@iceman1001)
- Updated `/tools/hitag2crack/common/OpenCL-Headers/CL` with latest from KhronosGroup github page (@iceman1001) - Updated `/tools/hitag2crack/common/OpenCL-Headers/CL` with latest from KhronosGroup github page (@iceman1001)
- Fixed `lf hitag list` - improved HITAG2 protocol annotation (@iceman1001) - Fixed `lf hitag list` - improved HITAG2 protocol annotation (@iceman1001)

View file

@ -21,6 +21,7 @@
#include <limits.h> // for CmdNorm INT_MIN && INT_MAX #include <limits.h> // for CmdNorm INT_MIN && INT_MAX
#include <math.h> // pow #include <math.h> // pow
#include <ctype.h> // tolower #include <ctype.h> // tolower
#include <locale.h> // number formatter..
#include "commonutil.h" // ARRAYLEN #include "commonutil.h" // ARRAYLEN
#include "cmdparser.h" // for command_t #include "cmdparser.h" // for command_t
#include "ui.h" // for show graph controls #include "ui.h" // for show graph controls
@ -41,6 +42,7 @@
#include "atrs.h" // ATR lookup #include "atrs.h" // ATR lookup
#include "crypto/libpcrypto.h" // Cryptography #include "crypto/libpcrypto.h" // Cryptography
uint8_t g_DemodBuffer[MAX_DEMOD_BUF_LEN] = { 0x00 }; uint8_t g_DemodBuffer[MAX_DEMOD_BUF_LEN] = { 0x00 };
size_t g_DemodBufferLen = 0; size_t g_DemodBufferLen = 0;
int32_t g_DemodStartIdx = 0; int32_t g_DemodStartIdx = 0;
@ -48,6 +50,47 @@ int g_DemodClock = 0;
static int CmdHelp(const char *Cmd); static int CmdHelp(const char *Cmd);
// https://www.eskimo.com/~scs/c-faq.com/stdio/commaprint.html
static char *commaprint(size_t n) {
static int comma = '\0';
static char retbuf[30];
char *p = &retbuf[sizeof(retbuf)-1];
int i = 0;
if (comma == '\0') {
struct lconv *lcp = localeconv();
if (lcp != NULL) {
if(lcp->thousands_sep != NULL && *lcp->thousands_sep != '\0') {
comma = *lcp->thousands_sep;
} else {
comma = ',';
}
}
}
*p = '\0';
do {
if ( i % 3 == 0 && i != 0 ) {
*--p = comma;
}
*--p = '0' + n % 10;
n /= 10;
i++;
} while (n != 0);
return p;
}
// set the g_DemodBuffer with given array ofq binary (one bit per byte) // set the g_DemodBuffer with given array ofq binary (one bit per byte)
void setDemodBuff(const uint8_t *buff, size_t size, size_t start_idx) { void setDemodBuff(const uint8_t *buff, size_t size, size_t start_idx) {
if (buff == NULL) return; if (buff == NULL) return;
@ -244,12 +287,15 @@ int printDemodBuff(uint8_t offset, bool strip_leading, bool invert, bool print_h
if (strip_leading) { if (strip_leading) {
p = (buf + offset); p = (buf + offset);
if (len > (g_DemodBufferLen - offset)) if (len > (g_DemodBufferLen - offset)) {
len = (g_DemodBufferLen - offset); len = (g_DemodBufferLen - offset);
}
size_t i; size_t i;
for (i = 0; i < len; i++) { for (i = 0; i < len; i++) {
if (p[i] == 1) break; if (p[i] == 1) {
break;
}
} }
offset += i; offset += i;
} }
@ -263,26 +309,31 @@ int printDemodBuff(uint8_t offset, bool strip_leading, bool invert, bool print_h
} }
if (invert) { if (invert) {
p = (buf + offset); p = (buf + offset);
for (size_t i = 0; i < len; i++) { for (size_t i = 0; i < len; i++) {
if (p[i] == 1) if (p[i] == 1) {
p[i] = 0; p[i] = 0;
else { } else {
if (p[i] == 0) if (p[i] == 0) {
p[i] = 1; p[i] = 1;
}
} }
} }
} }
if (print_hex) { if (print_hex) {
p = (buf + offset); p = (buf + offset);
char hex[MAX_DEMODULATION_BITS + 1] = {0x00}; char hex[MAX_DEMODULATION_BITS + 1] = { 0x00 };
int num_bits = binarray_2_hex(hex, sizeof(hex), (char *)p, len); int num_bits = binarray_2_hex(hex, sizeof(hex), (char *)p, len);
if (num_bits == 0) { if (num_bits == 0) {
p = NULL; p = NULL;
free(buf); free(buf);
return PM3_ESOFT; return PM3_ESOFT;
} }
PrintAndLogEx(SUCCESS, "DemodBuffer:\n%s", hex); PrintAndLogEx(SUCCESS, "DemodBuffer:\n%s", hex);
} else { } else {
PrintAndLogEx(SUCCESS, "DemodBuffer:\n%s", sprint_bytebits_bin_break(buf + offset, len, 32)); PrintAndLogEx(SUCCESS, "DemodBuffer:\n%s", sprint_bytebits_bin_break(buf + offset, len, 32));
@ -1979,7 +2030,7 @@ static int CmdLoad(const char *Cmd) {
} }
fclose(f); fclose(f);
PrintAndLogEx(SUCCESS, "loaded " _YELLOW_("%zu") " samples", g_GraphTraceLen); PrintAndLogEx(SUCCESS, "loaded " _YELLOW_("%s") " samples", commaprint(g_GraphTraceLen));
if (nofix == false) { if (nofix == false) {
uint8_t *bits = calloc(g_GraphTraceLen, sizeof(uint8_t)); uint8_t *bits = calloc(g_GraphTraceLen, sizeof(uint8_t));
@ -2006,11 +2057,11 @@ int CmdLtrim(const char *Cmd) {
CLIParserContext *ctx; CLIParserContext *ctx;
CLIParserInit(&ctx, "data ltrim", CLIParserInit(&ctx, "data ltrim",
"Trim samples from left of trace", "Trim samples from left of trace",
"data ltrim -i 300 --> keep 300 - end" "data ltrim -i 300 --> remove from start 0 to index 300"
); );
void *argtable[] = { void *argtable[] = {
arg_param_begin, arg_param_begin,
arg_u64_1("i", "idx", "<dec>", "from index to beginning trace"), arg_u64_1("i", "idx", "<dec>", "index in graph buffer"),
arg_param_end arg_param_end
}; };
CLIExecWithReturn(ctx, Cmd, argtable, false); CLIExecWithReturn(ctx, Cmd, argtable, false);
@ -2023,9 +2074,9 @@ int CmdLtrim(const char *Cmd) {
return PM3_EINVARG; return PM3_EINVARG;
} }
for (uint32_t i = ds; i < g_GraphTraceLen; ++i) for (size_t i = ds; i < g_GraphTraceLen; ++i) {
g_GraphBuffer[i - ds] = g_GraphBuffer[i]; g_GraphBuffer[i - ds] = g_GraphBuffer[i];
}
g_GraphTraceLen -= ds; g_GraphTraceLen -= ds;
g_DemodStartIdx -= ds; g_DemodStartIdx -= ds;
RepaintGraphWindow(); RepaintGraphWindow();
@ -2038,11 +2089,11 @@ static int CmdRtrim(const char *Cmd) {
CLIParserContext *ctx; CLIParserContext *ctx;
CLIParserInit(&ctx, "data rtrim", CLIParserInit(&ctx, "data rtrim",
"Trim samples from right of trace", "Trim samples from right of trace",
"data rtrim -i 4000 --> keep 0 - 4000" "data rtrim -i 4000 --> remove from index 4000 to end of graph buffer"
); );
void *argtable[] = { void *argtable[] = {
arg_param_begin, arg_param_begin,
arg_u64_1("i", "idx", "<dec>", "from index to end trace"), arg_u64_1("i", "idx", "<dec>", "index in graph buffer"),
arg_param_end arg_param_end
}; };
CLIExecWithReturn(ctx, Cmd, argtable, false); CLIExecWithReturn(ctx, Cmd, argtable, false);
@ -2065,8 +2116,11 @@ static int CmdMtrim(const char *Cmd) {
CLIParserContext *ctx; CLIParserContext *ctx;
CLIParserInit(&ctx, "data mtrim", CLIParserInit(&ctx, "data mtrim",
"Trim out samples from the specified start to the specified end point", "Trim out samples from\n"
"data mtrim -s 1000 -e 2000 --> keep between 1000 and 2000" " start 0 to `-s index`\n"
"AND\n"
" from `-e index` to end of graph buffer",
"data mtrim -s 1000 -e 2000 --> keep all between index 1000 and 2000"
); );
void *argtable[] = { void *argtable[] = {
arg_param_begin, arg_param_begin,
@ -2092,6 +2146,8 @@ static int CmdMtrim(const char *Cmd) {
g_GraphBuffer[i] = g_GraphBuffer[start + i]; g_GraphBuffer[i] = g_GraphBuffer[start + i];
} }
g_DemodStartIdx = 0;
RepaintGraphWindow();
return PM3_SUCCESS; return PM3_SUCCESS;
} }
@ -3185,7 +3241,7 @@ static int CmdNumCon(const char *Cmd) {
return PM3_EINVARG; return PM3_EINVARG;
} }
MBEDTLS_MPI_CHK(mbedtls_mpi_read_string(&N, 16, hex)); MBEDTLS_MPI_CHK(mbedtls_mpi_read_string(&N, 16, hex));
PrintAndLogEx(INFO, "Input hex len... %d", hlen); PrintAndLogEx(INFO, "#....... %d", hlen);
} }
// decimal // decimal
@ -3198,7 +3254,7 @@ static int CmdNumCon(const char *Cmd) {
if (blen > 0) { if (blen > 0) {
// should have bianry string check here too // should have bianry string check here too
MBEDTLS_MPI_CHK(mbedtls_mpi_read_string(&N, 2, bin)); MBEDTLS_MPI_CHK(mbedtls_mpi_read_string(&N, 2, bin));
PrintAndLogEx(INFO, "Input bin len... %d", blen); PrintAndLogEx(INFO, "#bits... %d", blen);
} }
mbedtls_mpi base; mbedtls_mpi base;
@ -3212,9 +3268,9 @@ static int CmdNumCon(const char *Cmd) {
} radix_t; } radix_t;
radix_t radix[] = { radix_t radix[] = {
{"dec... ", 10}, {"dec..... ", 10},
{"hex... ", 16}, {"hex..... ", 16},
{"bin... ", 2} {"bin..... ", 2}
}; };
char s[600] = {0}; char s[600] = {0};
@ -3227,6 +3283,18 @@ static int CmdNumCon(const char *Cmd) {
} }
} }
// ascii
MBEDTLS_MPI_CHK(mbedtls_mpi_write_string(&N, 16, s, sizeof(s), &slen));
if (slen) {
size_t n = (slen >> 1);
uint8_t *d = calloc(n, sizeof(uint8_t));
if (d != NULL ) {
hexstr_to_byte_array(s, d, &n);
PrintAndLogEx(SUCCESS, "ascii... " _YELLOW_("%s"), sprint_ascii((const uint8_t*)d, n));
free(d);
}
}
// reverse // reverse
if (shall_reverse) { if (shall_reverse) {
PrintAndLogEx(SUCCESS, _CYAN_("Reversed")); PrintAndLogEx(SUCCESS, _CYAN_("Reversed"));
@ -3239,6 +3307,19 @@ static int CmdNumCon(const char *Cmd) {
PrintAndLogEx(SUCCESS, "%s%s", radix[i].desc, s); PrintAndLogEx(SUCCESS, "%s%s", radix[i].desc, s);
} }
} }
// ascii
MBEDTLS_MPI_CHK(mbedtls_mpi_write_string(&N, 16, s, sizeof(s), &slen));
if (slen) {
str_reverse(s, strlen(s));
size_t n = (slen >> 1);
uint8_t *d = calloc(n, sizeof(uint8_t));
if (d != NULL ) {
hexstr_to_byte_array(s, d, &n);
PrintAndLogEx(SUCCESS, "ascii... " _YELLOW_("%s"), sprint_ascii((const uint8_t*)d, n));
free(d);
}
}
} }
// invert // invert
@ -3266,6 +3347,18 @@ static int CmdNumCon(const char *Cmd) {
break; break;
} }
} }
// ascii
MBEDTLS_MPI_CHK(mbedtls_mpi_write_string(&N, 16, s, sizeof(s), &slen));
if (slen) {
str_inverse_hex(s, strlen(s));
size_t n = (slen >> 1);
uint8_t *d = calloc(n, sizeof(uint8_t));
if (d != NULL ) {
hexstr_to_byte_array(s, d, &n);
PrintAndLogEx(SUCCESS, "ascii... " _YELLOW_("%s"), sprint_ascii((const uint8_t*)d, n));
free(d);
}
}
} }