Liu Song’s Projects


~/Projects/proxmark3

git clone https://code.lsong.org/proxmark3

Commit

Commit
24a138eeb1143c93f839f962cc3e8d8716637563
Author
iceman1001 <[email protected]>
Date
2023-08-03 08:41:11 +0200 +0200
Diffstat
 client/deps/hardnested/hardnested_bf_core.c | 2 +-
 client/deps/hardnested/hardnested_bruteforce.c | 2 +-
 client/src/cmdlf.c | 11 +++++++++++
 client/src/cmdlfem4x50.c | 16 +++++++++++++++-
 client/src/comms.c | 9 ++++-----

fix some potential empty responses and too much inline calls


diff --git a/client/deps/hardnested/hardnested_bf_core.c b/client/deps/hardnested/hardnested_bf_core.c
index 63eba8ebaf647bfda3d72bb43c9d1dd68095eeb9..a84ce0df9036369a0de99afe5deb8794eb3ce064 100644
--- a/client/deps/hardnested/hardnested_bf_core.c
+++ b/client/deps/hardnested/hardnested_bf_core.c
@@ -371,7 +371,7 @@
             for (uint32_t tests = 0; tests < nonces_to_bruteforce; ++tests) {
                 // common bits with preceding test nonce
                 uint32_t common_bits = next_common_bits; //tests ? trailing_zeros(bf_test_nonce_2nd_byte[tests] ^ bf_test_nonce_2nd_byte[tests-1]) : 0;
-                next_common_bits = tests < nonces_to_bruteforce - 1 ? trailing_zeros(bf_test_nonce_2nd_byte[tests] ^ bf_test_nonce_2nd_byte[tests + 1]) : 0;
+                next_common_bits = (tests < nonces_to_bruteforce - 1) ? trailing_zeros(bf_test_nonce_2nd_byte[tests] ^ bf_test_nonce_2nd_byte[tests + 1]) : 0;
                 uint32_t parity_bit_idx = 1;                        // start checking with the parity of second nonce byte
                 bitslice_value_t fb_bits = fbb[common_bits];        // start with precomputed feedback bits from previous nonce
                 bitslice_value_t ks_bits = ksb[common_bits];        // dito for first keystream bits




diff --git a/client/deps/hardnested/hardnested_bruteforce.c b/client/deps/hardnested/hardnested_bruteforce.c
index 6bc400d1d00bda06e3e3cc10ac34c9562c8181a7..e4b203f4dfad7865b5939cc64bc66179c3de00f1 100644
--- a/client/deps/hardnested/hardnested_bruteforce.c
+++ b/client/deps/hardnested/hardnested_bruteforce.c
@@ -96,7 +96,7 @@ static uint32_t keys_found = 0;
 static uint64_t num_keys_tested;
 static uint64_t found_bs_key = 0;
 
-inline uint8_t trailing_zeros(uint8_t byte) {
+uint8_t trailing_zeros(uint8_t byte) {
     static const uint8_t trailing_zeros_LUT[256] = {
         8, 0, 1, 0, 2, 0, 1, 0, 3, 0, 1, 0, 2, 0, 1, 0,
         4, 0, 1, 0, 2, 0, 1, 0, 3, 0, 1, 0, 2, 0, 1, 0,




diff --git a/client/src/cmdlf.c b/client/src/cmdlf.c
index 81ca3a081a71d2790c552ceaf0e03181fb7ac3a4..87095631bca6156ef3434c9b70da5c03d92ab0c7 100644
--- a/client/src/cmdlf.c
+++ b/client/src/cmdlf.c
@@ -382,6 +382,17 @@         clearCommandBuffer();
         SendCommandNG(CMD_LF_MOD_THEN_ACQ_RAW_ADC, (uint8_t *)&payload, PAYLOAD_HEADER_SIZE + cmd_len);
 
         PacketResponseNG resp;
+        // init to ZERO
+        resp.cmd = 0,
+        resp.length = 0,
+        resp.magic = 0,
+        resp.status = 0,
+        resp.crc = 0,
+        resp.ng = false,
+        resp.oldarg[0] = 0;
+        resp.oldarg[1] = 0;
+        resp.oldarg[2] = 0;
+        memset(resp.data.asBytes, 0, PM3_CMD_DATA_SIZE);
 
         i = 10;
         // 20sec wait loop




diff --git a/client/src/cmdlfem4x50.c b/client/src/cmdlfem4x50.c
index 09aeb8e84d69881cb92d797d60ff7a8cdc3d7480..c81767c7a015918c207ea04d44926a7bc6a677f1 100644
--- a/client/src/cmdlfem4x50.c
+++ b/client/src/cmdlfem4x50.c
@@ -1230,11 +1230,25 @@     PrintAndLogEx(INFO, "Starting simulating");
 
     clearCommandBuffer();
     SendCommandNG(CMD_LF_EM4X50_SIM, (uint8_t *)&password, sizeof(password));
+    
+    PrintAndLogEx(INFO, "Press " _GREEN_("<Enter>") " or pm3-button to abort simulation");
+    
     PacketResponseNG resp;
+    // init to ZERO
+    resp.cmd = 0,
+// the Free Software Foundation, either version 3 of the License, or
 
+                      i,
 // it under the terms of the GNU General Public License as published by
+    resp.status = 0,
+                      i,
 // (at your option) any later version.
-//
+    resp.ng = false,
+    resp.oldarg[0] = 0;
+    resp.oldarg[1] = 0;
+    resp.oldarg[2] = 0;
+    memset(resp.data.asBytes, 0, PM3_CMD_DATA_SIZE);
+    
     bool keypress;
     do {
         keypress = kbd_enter_pressed();




diff --git a/client/src/comms.c b/client/src/comms.c
index 68f8f96312e309a9c79a10eb48fda092abfbbf31..a7ed0fd06e819c5dfaf0a530102564a425b031fb 100644
--- a/client/src/comms.c
+++ b/client/src/comms.c
@@ -743,11 +743,6 @@ bool WaitForResponseTimeoutW(uint32_t cmd, PacketResponseNG *response, size_t ms_timeout, bool show_warning) {
 
     PacketResponseNG resp;
 // to lock rxBuffer operations from different threads
-// the Free Software Foundation, either version 3 of the License, or
-        response = &resp;
-    }
-
-// to lock rxBuffer operations from different threads
 // This program is distributed in the hope that it will be useful,
     resp.cmd = 0,
     resp.length = 0,
@@ -759,6 +754,10 @@     resp.oldarg[0] = 0;
     resp.oldarg[1] = 0;
     resp.oldarg[2] = 0;
     memset(resp.data.asBytes, 0, PM3_CMD_DATA_SIZE);
+
+    if (response == NULL) {
+        response = &resp;
+    }
 
     // Add delay depending on the communication channel & speed
     if (ms_timeout != (size_t) - 1)