mirror of
https://github.com/RfidResearchGroup/proxmark3.git
synced 2026-05-12 11:18:11 -07:00
added: mem spiffs view - to view a file on SPIFFS\n mem spiffs dump - now uses cliparser and NG
This commit is contained in:
@@ -39,7 +39,7 @@
|
||||
*
|
||||
* To delete a dump file from flash:
|
||||
*
|
||||
* 1. mem spiffs remove hf-legic-XXYYZZWW-dump.bin
|
||||
* 1. mem spiffs remove -f hf-legic-XXYYZZWW-dump.bin
|
||||
*
|
||||
*/
|
||||
|
||||
|
||||
@@ -48,7 +48,7 @@
|
||||
*
|
||||
* To delete the log file from flash:
|
||||
*
|
||||
* 1. mem spiffs remove lf_hidcollect.log
|
||||
* 1. mem spiffs remove -f lf_hidcollect.log
|
||||
*/
|
||||
|
||||
#define LF_HIDCOLLECT_LOGFILE "lf_hidcollect.log"
|
||||
|
||||
@@ -42,7 +42,7 @@
|
||||
* - LED D: unmounting/sync'ing flash (normally < 100ms)
|
||||
*
|
||||
* To upload input file (eml format) to flash:
|
||||
* - mem spiffs load f <filename> o lf_em4x50_simulate.eml
|
||||
* - mem spiffs upload -s <filename> -d lf_em4x50_simulate.eml
|
||||
*
|
||||
* To retrieve password file from flash:
|
||||
* - mem spiffs dump o lf_em4x50_passwords.log f <filename>
|
||||
@@ -54,13 +54,13 @@
|
||||
* the lab connected to PM3 client before taking it into the field.
|
||||
*
|
||||
* To delete the input file from flash:
|
||||
* - mem spiffs remove lf_em4x50_simulate.eml
|
||||
* - mem spiffs remove -f lf_em4x50_simulate.eml
|
||||
*
|
||||
* To delete the log file from flash:
|
||||
* - mem spiffs remove lf_em4x50_passwords.log
|
||||
* - mem spiffs remove -f lf_em4x50_passwords.log
|
||||
*
|
||||
* To delete the log file from flash:
|
||||
* - mem spiffs remove lf_em4x50_collect.log
|
||||
* - mem spiffs remove -f lf_em4x50_collect.log
|
||||
*/
|
||||
|
||||
#define STATE_SIM 0
|
||||
@@ -77,7 +77,7 @@ static void LoadDataInstructions(const char *inputfile) {
|
||||
Dbprintf("To load datafile to flash and display it:");
|
||||
Dbprintf("1. edit input file %s", inputfile);
|
||||
Dbprintf("2. start proxmark3 client");
|
||||
Dbprintf("3. mem spiffs load f <filename> o %s", inputfile);
|
||||
Dbprintf("3. mem spiffs upload -f <filename> o %s", inputfile);
|
||||
Dbprintf("4. start standalone mode");
|
||||
}
|
||||
|
||||
|
||||
+37
-31
@@ -2078,7 +2078,7 @@ static void PacketReceived(PacketCommandNG *packet) {
|
||||
Dbprintf("transfer to client failed :: | bytes between %d - %d (%d) | result: %d", i, i + len, len, result);
|
||||
}
|
||||
// Trigger a finish downloading signal with an ACK frame
|
||||
reply_mix(CMD_ACK, 1, 0, 0, 0, 0);
|
||||
reply_ng(CMD_SPIFFS_DOWNLOAD, PM3_SUCCESS, NULL, 0);
|
||||
LED_B_OFF();
|
||||
break;
|
||||
}
|
||||
@@ -2087,11 +2087,17 @@ static void PacketReceived(PacketCommandNG *packet) {
|
||||
uint8_t filename[32];
|
||||
uint8_t *pfilename = packet->data.asBytes;
|
||||
memcpy(filename, pfilename, SPIFFS_OBJ_NAME_LEN);
|
||||
if (DBGLEVEL >= DBG_DEBUG) Dbprintf("Filename received for spiffs STAT : %s", filename);
|
||||
if (DBGLEVEL >= DBG_DEBUG) {
|
||||
Dbprintf("Filename received for spiffs STAT : %s", filename);
|
||||
}
|
||||
|
||||
int changed = rdv40_spiffs_lazy_mount();
|
||||
uint32_t size = size_in_spiffs((char *)filename);
|
||||
if (changed) rdv40_spiffs_lazy_unmount();
|
||||
reply_mix(CMD_ACK, size, 0, 0, 0, 0);
|
||||
if (changed) {
|
||||
rdv40_spiffs_lazy_unmount();
|
||||
}
|
||||
|
||||
reply_ng(CMD_SPIFFS_STAT, PM3_SUCCESS, (uint8_t *)&size, sizeof(uint32_t));
|
||||
LED_B_OFF();
|
||||
break;
|
||||
}
|
||||
@@ -2121,12 +2127,12 @@ static void PacketReceived(PacketCommandNG *packet) {
|
||||
uint8_t dlen;
|
||||
uint8_t dest[32];
|
||||
} PACKED;
|
||||
|
||||
struct p *payload = (struct p *) packet->data.asBytes;
|
||||
|
||||
if (DBGLEVEL >= DBG_DEBUG) {
|
||||
Dbprintf("Filename received as source for spiffs RENAME : %s", payload->src);
|
||||
Dbprintf("Filename received as destination for spiffs RENAME : %s", payload->dest);
|
||||
Dbprintf("SPIFFS RENAME");
|
||||
Dbprintf("Source........ %s", payload->src);
|
||||
Dbprintf("Destination... %s", payload->dest);
|
||||
}
|
||||
rdv40_spiffs_rename((char *)payload->src, (char *)payload->dest, RDV40_SPIFFS_SAFETY_SAFE);
|
||||
reply_ng(CMD_SPIFFS_RENAME, PM3_SUCCESS, NULL, 0);
|
||||
@@ -2135,40 +2141,40 @@ static void PacketReceived(PacketCommandNG *packet) {
|
||||
}
|
||||
case CMD_SPIFFS_COPY: {
|
||||
LED_B_ON();
|
||||
uint8_t src[32];
|
||||
uint8_t dest[32];
|
||||
uint8_t *pfilename = packet->data.asBytes;
|
||||
char *token;
|
||||
token = strtok((char *)pfilename, ",");
|
||||
strncpy((char *)src, token, sizeof(src) - 1);
|
||||
token = strtok(NULL, ",");
|
||||
strncpy((char *)dest, token, sizeof(dest) - 1);
|
||||
struct p {
|
||||
uint8_t slen;
|
||||
uint8_t src[32];
|
||||
uint8_t dlen;
|
||||
uint8_t dest[32];
|
||||
} PACKED;
|
||||
struct p *payload = (struct p *) packet->data.asBytes;
|
||||
|
||||
if (DBGLEVEL >= DBG_DEBUG) {
|
||||
Dbprintf("Filename received as source for spiffs COPY : %s", src);
|
||||
Dbprintf("Filename received as destination for spiffs COPY : %s", dest);
|
||||
Dbprintf("SPIFFS COPY");
|
||||
Dbprintf("Source........ %s", payload->src);
|
||||
Dbprintf("Destination... %s", payload->dest);
|
||||
}
|
||||
rdv40_spiffs_copy((char *) src, (char *)dest, RDV40_SPIFFS_SAFETY_SAFE);
|
||||
rdv40_spiffs_copy((char *)payload->src, (char *)payload->dest, RDV40_SPIFFS_SAFETY_SAFE);
|
||||
reply_ng(CMD_SPIFFS_COPY, PM3_SUCCESS, NULL, 0);
|
||||
LED_B_OFF();
|
||||
break;
|
||||
}
|
||||
case CMD_SPIFFS_WRITE: {
|
||||
LED_B_ON();
|
||||
uint8_t filename[32];
|
||||
uint32_t append = packet->oldarg[0];
|
||||
uint32_t size = packet->oldarg[1];
|
||||
uint8_t *data = packet->data.asBytes;
|
||||
uint8_t *pfilename = packet->data.asBytes;
|
||||
memcpy(filename, pfilename, SPIFFS_OBJ_NAME_LEN);
|
||||
data += SPIFFS_OBJ_NAME_LEN;
|
||||
|
||||
if (DBGLEVEL >= DBG_DEBUG) Dbprintf("> Filename received for spiffs WRITE : %s with APPEND SET TO : %d", filename, append);
|
||||
flashmem_write_t *payload = (flashmem_write_t *)packet->data.asBytes;
|
||||
|
||||
if (!append) {
|
||||
rdv40_spiffs_write((char *) filename, (uint8_t *)data, size, RDV40_SPIFFS_SAFETY_SAFE);
|
||||
} else {
|
||||
rdv40_spiffs_append((char *) filename, (uint8_t *)data, size, RDV40_SPIFFS_SAFETY_SAFE);
|
||||
if (DBGLEVEL >= DBG_DEBUG) {
|
||||
Dbprintf("SPIFFS WRITE, dest `%s` with APPEND set to: %c", payload->fn, payload->append ? 'Y' : 'N');
|
||||
}
|
||||
reply_mix(CMD_ACK, 1, 0, 0, 0, 0);
|
||||
|
||||
if (payload->append) {
|
||||
rdv40_spiffs_append((char *) payload->fn, payload->data, payload->bytes_in_packet, RDV40_SPIFFS_SAFETY_SAFE);
|
||||
} else {
|
||||
rdv40_spiffs_write((char *) payload->fn, payload->data, payload->bytes_in_packet, RDV40_SPIFFS_SAFETY_SAFE);
|
||||
}
|
||||
|
||||
reply_ng(CMD_SPIFFS_WRITE, PM3_SUCCESS, NULL, 0);
|
||||
LED_B_OFF();
|
||||
break;
|
||||
}
|
||||
|
||||
@@ -76,7 +76,7 @@ local function main(args)
|
||||
|
||||
if removeflag then
|
||||
print('Deleting file '..filename.. ' from SPIFFS if exists')
|
||||
core.console("mem spiffs remove " ..filename)
|
||||
core.console("mem spiffs remove -f " ..filename)
|
||||
return
|
||||
end
|
||||
|
||||
|
||||
+201
-228
File diff suppressed because it is too large
Load Diff
@@ -14,6 +14,6 @@
|
||||
#include "common.h"
|
||||
|
||||
int CmdFlashMemSpiFFS(const char *Cmd);
|
||||
int flashmem_spiffs_load(uint8_t *destfn, uint8_t *data, size_t datalen);
|
||||
int flashmem_spiffs_load(char *destfn, uint8_t *data, size_t datalen);
|
||||
|
||||
#endif
|
||||
|
||||
@@ -471,7 +471,7 @@ int CmdEM4x50Chk(const char *Cmd) {
|
||||
|
||||
// upload to flash.
|
||||
datalen = MIN(bytes_remaining, keyblock);
|
||||
res = flashmem_spiffs_load(destfn, keys, datalen);
|
||||
res = flashmem_spiffs_load((char*)destfn, keys, datalen);
|
||||
if (res != PM3_SUCCESS) {
|
||||
PrintAndLogEx(WARNING, "SPIFFS upload failed");
|
||||
return res;
|
||||
|
||||
@@ -839,6 +839,9 @@ static bool dl_it(uint8_t *dest, uint32_t bytes, PacketResponseNG *response, siz
|
||||
|
||||
if (response->cmd == CMD_ACK)
|
||||
return true;
|
||||
// Spiffs download is converted to NG,
|
||||
if (response->cmd == CMD_SPIFFS_DOWNLOAD)
|
||||
return true;
|
||||
|
||||
// sample_buf is a array pointer, located in data.c
|
||||
// arg0 = offset in transfer. Startindex of this chunk
|
||||
|
||||
@@ -695,7 +695,7 @@ int mfStaticNested(uint8_t blockNo, uint8_t keyType, uint8_t *key, uint8_t trgBl
|
||||
mem[4] = (chunk & 0xFF);
|
||||
|
||||
// upload to flash.
|
||||
res = flashmem_spiffs_load(destfn, mem, 5 + (chunk * 6));
|
||||
res = flashmem_spiffs_load((char*)destfn, mem, 5 + (chunk * 6));
|
||||
if (res != PM3_SUCCESS) {
|
||||
PrintAndLogEx(WARNING, "\nSPIFFS upload failed");
|
||||
free(mem);
|
||||
|
||||
@@ -384,6 +384,15 @@ typedef struct {
|
||||
bool off;
|
||||
} PACKED tearoff_params_t;
|
||||
|
||||
// when writing to SPIFFS
|
||||
typedef struct {
|
||||
bool append : 1;
|
||||
uint16_t bytes_in_packet : 15;
|
||||
uint8_t fnlen;
|
||||
uint8_t fn[32];
|
||||
uint8_t data[];
|
||||
} PACKED flashmem_write_t;
|
||||
|
||||
// For the bootloader
|
||||
#define CMD_DEVICE_INFO 0x0000
|
||||
//#define CMD_SETUP_WRITE 0x0001
|
||||
@@ -565,6 +574,8 @@ typedef struct {
|
||||
#define CMD_LF_HITAGS_READ 0x0373
|
||||
#define CMD_LF_HITAGS_WRITE 0x0375
|
||||
|
||||
#define CMD_LF_HITAG_ELOAD 0x0376
|
||||
|
||||
#define CMD_HF_ISO14443A_ANTIFUZZ 0x0380
|
||||
#define CMD_HF_ISO14443B_SIMULATE 0x0381
|
||||
#define CMD_HF_ISO14443B_SNIFF 0x0382
|
||||
|
||||
Reference in New Issue
Block a user