#include <stdbool.h>
#include <string.h>
#include <stdint.h>
-#include "../common/iso14443crc.h"
+#include "iso14443crc.h"
#include "proxmark3.h"
#include "data.h"
#include "graph.h"
+#include "util.h"
#include "ui.h"
#include "cmdparser.h"
#include "cmdhf14b.h"
UsbCommand resp;
uint8_t *recv;
UsbCommand c = {CMD_ISO_14443B_COMMAND, {0, 0, 0}}; // len,recv?
- uint8_t reply=1;
- uint8_t crc=0;
- uint8_t power=0;
- char buf[5]="";
- int i=0;
- uint8_t data[100];
+ uint8_t reply = 1;
+ uint8_t crc = 0;
+ uint8_t power = 0;
+ char buf[5] = "";
+ int i = 0;
+ uint8_t data[100] = {0x00};
unsigned int datalen=0, temp;
char *hexout;
switch (cmd[i+1]) {
case 'r':
case 'R':
- reply=0;
+ reply = 0;
break;
case 'c':
case 'C':
- crc=1;
+ crc = 1;
break;
case 'p':
case 'P':
- power=1;
+ power = 1;
break;
default:
PrintAndLog("Invalid option");
continue;
}
PrintAndLog("Invalid char on input");
- return 0;
+ return 1;
}
- if (datalen == 0)
- {
+
+ if (datalen == 0) {
PrintAndLog("Missing data input");
- return 0;
+ return 1;
}
- if(crc)
- {
+
+ if(crc) {
uint8_t first, second;
ComputeCrc14443(CRC_14443_B, data, datalen, &first, &second);
data[datalen++] = first;
SendCommand(&c);
if (reply) {
- if (WaitForResponseTimeout(CMD_ACK,&resp,10000)) {
+ if (WaitForResponseTimeout(CMD_ACK,&resp,1000)) {
recv = resp.d.asBytes;
PrintAndLog("received %i octets",resp.arg[0]);
if(!resp.arg[0])
PrintAndLog("Usage: hf 14b write <1|2> <BLOCK> <DATA>");
PrintAndLog(" [1 = SRIX4K]");
PrintAndLog(" [2 = SRI512]");
- PrintAndLog(" [BLOCK number depends on which tag, special block == 255]");
- PrintAndLog(" sample: hf 14b write 1 127 11223344");
- PrintAndLog(" : hf 14b write 1 255 11223344");
+ PrintAndLog(" [BLOCK number depends on tag, special block == FF]");
+ PrintAndLog(" sample: hf 14b write 1 7F 11223344");
+ PrintAndLog(" : hf 14b write 1 FF 11223344");
PrintAndLog(" : hf 14b write 2 15 11223344");
- PrintAndLog(" : hf 14b write 2 255 11223344");
+ PrintAndLog(" : hf 14b write 2 FF 11223344");
return 0;
}
- if ( param_getchar(Cmd, 0) == '2' )
+ if ( cmdp == '2' )
isSrix4k = false;
- blockno = param_get8(Cmd, 1);
+ //blockno = param_get8(Cmd, 1);
+
+ if ( param_gethex(Cmd,1, &blockno, 2) ) {
+ PrintAndLog("Block number must include 2 HEX symbols");
+ return 0;
+ }
if ( isSrix4k ){
if ( blockno > 0x7f && blockno != 0xff ){
}
if ( blockno == 0xff)
- PrintAndLog("Writing to special block %02X [ %s]", blockno, sprint_hex(data,4) );
+ PrintAndLog("[%s] Write special block %02X [ %s ]", (isSrix4k)?"SRIX4K":"SRI512" , blockno, sprint_hex(data,4) );
else
- PrintAndLog("Writing to block %02X [ %s]", blockno, sprint_hex(data,4) );
+ PrintAndLog("[%s] Write block %02X [ %s ]", (isSrix4k)?"SRIX4K":"SRI512", blockno, sprint_hex(data,4) );
- sprintf(str, "-c -p 09 %02x %02x%02x%02x%02x", blockno, data[0], data[1], data[2], data[3]);
+ sprintf(str, "-c 09 %02x %02x%02x%02x%02x", blockno, data[0], data[1], data[2], data[3]);
+
CmdHF14BCmdRaw(str);
return 0;
}