mirror of
https://github.com/Proxmark/proxmark3.git
synced 2025-07-16 02:03:00 -07:00
Add: new option 'd' in 'hf mf ekeyprn' to create dumpkeys.bin from emulator memory (#822)
(and whitespace fixes)
This commit is contained in:
parent
9ebbfd898c
commit
a39af1cb9c
1 changed files with 302 additions and 270 deletions
|
@ -1951,31 +1951,37 @@ int CmdHF14AMfECFill(const char *Cmd)
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
int CmdHF14AMfEKeyPrn(const char *Cmd)
|
int CmdHF14AMfEKeyPrn(const char *Cmd)
|
||||||
{
|
{
|
||||||
int i;
|
int i;
|
||||||
uint8_t numSectors;
|
uint8_t numSectors = 16;
|
||||||
uint8_t data[16];
|
uint8_t data[16];
|
||||||
uint64_t keyA, keyB;
|
uint64_t keyA, keyB;
|
||||||
|
bool createDumpFile = false;
|
||||||
|
|
||||||
if (param_getchar(Cmd, 0) == 'h') {
|
if (param_getchar(Cmd, 0) == 'h') {
|
||||||
PrintAndLog("It prints the keys loaded in the emulator memory");
|
PrintAndLog("It prints the keys loaded in the emulator memory");
|
||||||
PrintAndLog("Usage: hf mf ekeyprn [card memory]");
|
PrintAndLog("Usage: hf mf ekeyprn [card memory] [d]");
|
||||||
PrintAndLog(" [card memory]: 0 = 320 bytes (Mifare Mini), 1 = 1K (default), 2 = 2K, 4 = 4K");
|
PrintAndLog(" [card memory]: 0 = 320 bytes (Mifare Mini), 1 = 1K (default), 2 = 2K, 4 = 4K");
|
||||||
|
PrintAndLog(" [d] : write keys to binary file dumpkeys.bin");
|
||||||
PrintAndLog("");
|
PrintAndLog("");
|
||||||
PrintAndLog(" sample: hf mf ekeyprn 1");
|
PrintAndLog(" sample: hf mf ekeyprn 1");
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
char cmdp = param_getchar(Cmd, 0);
|
uint8_t cmdp = 0;
|
||||||
|
while (param_getchar(Cmd, cmdp) != 0x00) {
|
||||||
switch (cmdp) {
|
switch (param_getchar(Cmd, cmdp)) {
|
||||||
case '0' : numSectors = 5; break;
|
case '0' : numSectors = 5; break;
|
||||||
case '1' :
|
case '1' :
|
||||||
case '\0': numSectors = 16; break;
|
case '\0': numSectors = 16; break;
|
||||||
case '2' : numSectors = 32; break;
|
case '2' : numSectors = 32; break;
|
||||||
case '4' : numSectors = 40; break;
|
case '4' : numSectors = 40; break;
|
||||||
default: numSectors = 16;
|
case 'd' :
|
||||||
|
case 'D' : createDumpFile = true; break;
|
||||||
|
}
|
||||||
|
cmdp++;
|
||||||
}
|
}
|
||||||
|
|
||||||
PrintAndLog("|---|----------------|----------------|");
|
PrintAndLog("|---|----------------|----------------|");
|
||||||
|
@ -1992,9 +1998,35 @@ int CmdHF14AMfEKeyPrn(const char *Cmd)
|
||||||
}
|
}
|
||||||
PrintAndLog("|---|----------------|----------------|");
|
PrintAndLog("|---|----------------|----------------|");
|
||||||
|
|
||||||
|
// Create dump file
|
||||||
|
if (createDumpFile) {
|
||||||
|
FILE *fkeys;
|
||||||
|
if ((fkeys = fopen("dumpkeys.bin","wb")) == NULL) {
|
||||||
|
PrintAndLog("Could not create file dumpkeys.bin");
|
||||||
|
return 1;
|
||||||
|
}
|
||||||
|
PrintAndLog("Printing keys to binary file dumpkeys.bin...");
|
||||||
|
for(i = 0; i < numSectors; i++) {
|
||||||
|
if (mfEmlGetMem(data, FirstBlockOfSector(i) + NumBlocksPerSector(i) - 1, 1)) {
|
||||||
|
PrintAndLog("error get block %d", FirstBlockOfSector(i) + NumBlocksPerSector(i) - 1);
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
fwrite(data+6, 1, 6, fkeys);
|
||||||
|
}
|
||||||
|
for(i = 0; i < numSectors; i++) {
|
||||||
|
if (mfEmlGetMem(data, FirstBlockOfSector(i) + NumBlocksPerSector(i) - 1, 1)) {
|
||||||
|
PrintAndLog("error get block %d", FirstBlockOfSector(i) + NumBlocksPerSector(i) - 1);
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
fwrite(data+10, 1, 6, fkeys);
|
||||||
|
}
|
||||||
|
fclose(fkeys);
|
||||||
|
}
|
||||||
|
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
int CmdHF14AMfCSetUID(const char *Cmd)
|
int CmdHF14AMfCSetUID(const char *Cmd)
|
||||||
{
|
{
|
||||||
uint8_t uid[8] = {0x00};
|
uint8_t uid[8] = {0x00};
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue