mirror of
https://github.com/RfidResearchGroup/proxmark3.git
synced 2025-07-30 11:39:14 -07:00
MOD:: reverse back changes to 14443b.c
ADD: the hid-flasher/usb_cmd.h wasn't up to date with how it's other file /common/usb_cmd.h looks like. ADD: utils.lua 14443v crc inside LUA. ADD: utils.lua ConvertAsciiToHex method and minor adjustments checks.
This commit is contained in:
parent
3b4fa54235
commit
5de79e20f1
6 changed files with 123 additions and 25 deletions
|
@ -1275,7 +1275,7 @@ void RAMFUNC SnoopIso14443b(void)
|
||||||
|
|
||||||
if(!ReaderIsActive) { // no need to try decoding tag data if the reader is sending - and we cannot afford the time
|
if(!ReaderIsActive) { // no need to try decoding tag data if the reader is sending - and we cannot afford the time
|
||||||
// is this | 0x01 the error? & 0xfe in https://github.com/Proxmark/proxmark3/issues/103
|
// is this | 0x01 the error? & 0xfe in https://github.com/Proxmark/proxmark3/issues/103
|
||||||
if(Handle14443bSamplesDemod(ci | 0x01, cq | 0x01)) {
|
if(Handle14443bSamplesDemod(ci & 0xfe, cq & 0xfe)) {
|
||||||
|
|
||||||
//Use samples as a time measurement
|
//Use samples as a time measurement
|
||||||
if(tracing)
|
if(tracing)
|
||||||
|
|
|
@ -34,7 +34,7 @@ int CmdHF14BList(const char *Cmd)
|
||||||
|
|
||||||
int CmdHF14BSim(const char *Cmd)
|
int CmdHF14BSim(const char *Cmd)
|
||||||
{
|
{
|
||||||
UsbCommand c={CMD_SIMULATE_TAG_ISO_14443B};
|
UsbCommand c = {CMD_SIMULATE_TAG_ISO_14443B};
|
||||||
clearCommandBuffer();
|
clearCommandBuffer();
|
||||||
SendCommand(&c);
|
SendCommand(&c);
|
||||||
return 0;
|
return 0;
|
||||||
|
|
|
@ -23,14 +23,24 @@ typedef BYTE uint8_t;
|
||||||
#define PACKED __attribute__((packed))
|
#define PACKED __attribute__((packed))
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
|
#define USB_CMD_DATA_SIZE 512
|
||||||
|
|
||||||
typedef struct {
|
typedef struct {
|
||||||
uint32_t cmd;
|
uint64_t cmd;
|
||||||
uint32_t arg[3];
|
uint64_t arg[3];
|
||||||
union {
|
union {
|
||||||
uint8_t asBytes[48];
|
uint8_t asBytes[USB_CMD_DATA_SIZE];
|
||||||
uint32_t asDwords[12];
|
uint32_t asDwords[USB_CMD_DATA_SIZE/4];
|
||||||
} d;
|
} d;
|
||||||
} PACKED UsbCommand;
|
} PACKED UsbCommand;
|
||||||
|
// A struct used to send sample-configs over USB
|
||||||
|
typedef struct{
|
||||||
|
uint8_t decimation;
|
||||||
|
uint8_t bits_per_sample;
|
||||||
|
bool averaging;
|
||||||
|
int divisor;
|
||||||
|
int trigger_threshold;
|
||||||
|
} sample_config;
|
||||||
|
|
||||||
// For the bootloader
|
// For the bootloader
|
||||||
#define CMD_DEVICE_INFO 0x0000
|
#define CMD_DEVICE_INFO 0x0000
|
||||||
|
@ -53,7 +63,6 @@ typedef struct {
|
||||||
#define CMD_STATUS 0x0108
|
#define CMD_STATUS 0x0108
|
||||||
#define CMD_PING 0x0109
|
#define CMD_PING 0x0109
|
||||||
|
|
||||||
|
|
||||||
// For low-frequency tags
|
// For low-frequency tags
|
||||||
#define CMD_READ_TI_TYPE 0x0202
|
#define CMD_READ_TI_TYPE 0x0202
|
||||||
#define CMD_WRITE_TI_TYPE 0x0203
|
#define CMD_WRITE_TI_TYPE 0x0203
|
||||||
|
@ -83,6 +92,7 @@ typedef struct {
|
||||||
#define CMD_IO_DEMOD_FSK 0x021A
|
#define CMD_IO_DEMOD_FSK 0x021A
|
||||||
#define CMD_IO_CLONE_TAG 0x021B
|
#define CMD_IO_CLONE_TAG 0x021B
|
||||||
#define CMD_EM410X_DEMOD 0x021c
|
#define CMD_EM410X_DEMOD 0x021c
|
||||||
|
// Sampling configuration for LF reader/snooper
|
||||||
#define CMD_SET_LF_SAMPLING_CONFIG 0x021d
|
#define CMD_SET_LF_SAMPLING_CONFIG 0x021d
|
||||||
#define CMD_FSK_SIM_TAG 0x021E
|
#define CMD_FSK_SIM_TAG 0x021E
|
||||||
#define CMD_ASK_SIM_TAG 0x021F
|
#define CMD_ASK_SIM_TAG 0x021F
|
||||||
|
@ -95,6 +105,7 @@ typedef struct {
|
||||||
#define CMD_ACQUIRE_RAW_ADC_SAMPLES_ISO_15693 0x0300
|
#define CMD_ACQUIRE_RAW_ADC_SAMPLES_ISO_15693 0x0300
|
||||||
#define CMD_READ_SRI512_TAG 0x0303
|
#define CMD_READ_SRI512_TAG 0x0303
|
||||||
#define CMD_READ_SRIX4K_TAG 0x0304
|
#define CMD_READ_SRIX4K_TAG 0x0304
|
||||||
|
#define CMD_ISO_14443B_COMMAND 0x0305
|
||||||
#define CMD_READER_ISO_15693 0x0310
|
#define CMD_READER_ISO_15693 0x0310
|
||||||
#define CMD_SIMTAG_ISO_15693 0x0311
|
#define CMD_SIMTAG_ISO_15693 0x0311
|
||||||
#define CMD_RECORD_RAW_ADC_SAMPLES_ISO_15693 0x0312
|
#define CMD_RECORD_RAW_ADC_SAMPLES_ISO_15693 0x0312
|
||||||
|
@ -102,6 +113,7 @@ typedef struct {
|
||||||
#define CMD_ISO_15693_COMMAND_DONE 0x0314
|
#define CMD_ISO_15693_COMMAND_DONE 0x0314
|
||||||
#define CMD_ISO_15693_FIND_AFI 0x0315
|
#define CMD_ISO_15693_FIND_AFI 0x0315
|
||||||
#define CMD_ISO_15693_DEBUG 0x0316
|
#define CMD_ISO_15693_DEBUG 0x0316
|
||||||
|
#define CMD_LF_SNOOP_RAW_ADC_SAMPLES 0x0317
|
||||||
|
|
||||||
// For Hitag2 transponders
|
// For Hitag2 transponders
|
||||||
#define CMD_SNOOP_HITAG 0x0370
|
#define CMD_SNOOP_HITAG 0x0370
|
||||||
|
@ -122,6 +134,9 @@ typedef struct {
|
||||||
#define CMD_SNOOP_ICLASS 0x0392
|
#define CMD_SNOOP_ICLASS 0x0392
|
||||||
#define CMD_SIMULATE_TAG_ICLASS 0x0393
|
#define CMD_SIMULATE_TAG_ICLASS 0x0393
|
||||||
#define CMD_READER_ICLASS 0x0394
|
#define CMD_READER_ICLASS 0x0394
|
||||||
|
#define CMD_READER_ICLASS_REPLAY 0x0395
|
||||||
|
#define CMD_ICLASS_ISO14443A_WRITE 0x0397
|
||||||
|
#define CMD_ICLASS_EML_MEMSET 0x0398
|
||||||
|
|
||||||
// For measurements of the antenna tuning
|
// For measurements of the antenna tuning
|
||||||
#define CMD_MEASURE_ANTENNA_TUNING 0x0400
|
#define CMD_MEASURE_ANTENNA_TUNING 0x0400
|
||||||
|
@ -138,8 +153,11 @@ typedef struct {
|
||||||
#define CMD_MIFARE_EML_MEMSET 0x0602
|
#define CMD_MIFARE_EML_MEMSET 0x0602
|
||||||
#define CMD_MIFARE_EML_MEMGET 0x0603
|
#define CMD_MIFARE_EML_MEMGET 0x0603
|
||||||
#define CMD_MIFARE_EML_CARDLOAD 0x0604
|
#define CMD_MIFARE_EML_CARDLOAD 0x0604
|
||||||
#define CMD_MIFARE_EML_CSETBLOCK 0x0605
|
|
||||||
#define CMD_MIFARE_EML_CGETBLOCK 0x0606
|
// magic chinese card commands
|
||||||
|
#define CMD_MIFARE_CSETBLOCK 0x0605
|
||||||
|
#define CMD_MIFARE_CGETBLOCK 0x0606
|
||||||
|
#define CMD_MIFARE_CIDENT 0x0607
|
||||||
|
|
||||||
#define CMD_SIMULATE_MIFARE_CARD 0x0610
|
#define CMD_SIMULATE_MIFARE_CARD 0x0610
|
||||||
|
|
||||||
|
@ -147,14 +165,53 @@ typedef struct {
|
||||||
#define CMD_MIFARE_NESTED 0x0612
|
#define CMD_MIFARE_NESTED 0x0612
|
||||||
|
|
||||||
#define CMD_MIFARE_READBL 0x0620
|
#define CMD_MIFARE_READBL 0x0620
|
||||||
|
#define CMD_MIFAREU_READBL 0x0720
|
||||||
#define CMD_MIFARE_READSC 0x0621
|
#define CMD_MIFARE_READSC 0x0621
|
||||||
|
#define CMD_MIFAREU_READCARD 0x0721
|
||||||
#define CMD_MIFARE_WRITEBL 0x0622
|
#define CMD_MIFARE_WRITEBL 0x0622
|
||||||
|
#define CMD_MIFAREU_WRITEBL 0x0722
|
||||||
|
#define CMD_MIFAREU_WRITEBL_COMPAT 0x0723
|
||||||
|
|
||||||
#define CMD_MIFARE_CHKKEYS 0x0623
|
#define CMD_MIFARE_CHKKEYS 0x0623
|
||||||
|
|
||||||
#define CMD_MIFARE_SNIFFER 0x0630
|
#define CMD_MIFARE_SNIFFER 0x0630
|
||||||
|
//ultralightC
|
||||||
|
#define CMD_MIFAREUC_AUTH 0x0724
|
||||||
|
//0x0725 and 0x0726 no longer used
|
||||||
|
#define CMD_MIFAREUC_SETPWD 0x0727
|
||||||
|
|
||||||
|
|
||||||
|
// mifare desfire
|
||||||
|
#define CMD_MIFARE_DESFIRE_READBL 0x0728
|
||||||
|
#define CMD_MIFARE_DESFIRE_WRITEBL 0x0729
|
||||||
|
#define CMD_MIFARE_DESFIRE_AUTH1 0x072a
|
||||||
|
#define CMD_MIFARE_DESFIRE_AUTH2 0x072b
|
||||||
|
#define CMD_MIFARE_DES_READER 0x072c
|
||||||
|
#define CMD_MIFARE_DESFIRE_INFO 0x072d
|
||||||
|
#define CMD_MIFARE_DESFIRE 0x072e
|
||||||
|
|
||||||
|
#define CMD_MIFARE_COLLECT_NONCES 0x072f
|
||||||
|
|
||||||
#define CMD_UNKNOWN 0xFFFF
|
#define CMD_UNKNOWN 0xFFFF
|
||||||
|
|
||||||
|
|
||||||
|
//Mifare simulation flags
|
||||||
|
#define FLAG_INTERACTIVE 0x01
|
||||||
|
#define FLAG_4B_UID_IN_DATA 0x02
|
||||||
|
#define FLAG_7B_UID_IN_DATA 0x04
|
||||||
|
#define FLAG_NR_AR_ATTACK 0x08
|
||||||
|
|
||||||
|
|
||||||
|
//Iclass reader flags
|
||||||
|
#define FLAG_ICLASS_READER_ONLY_ONCE 0x01
|
||||||
|
#define FLAG_ICLASS_READER_CC 0x02
|
||||||
|
#define FLAG_ICLASS_READER_CSN 0x04
|
||||||
|
#define FLAG_ICLASS_READER_CONF 0x08
|
||||||
|
#define FLAG_ICLASS_READER_AA 0x10
|
||||||
|
#define FLAG_ICLASS_READER_ONE_TRY 0x20
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
// CMD_DEVICE_INFO response packet has flags in arg[0], flag definitions:
|
// CMD_DEVICE_INFO response packet has flags in arg[0], flag definitions:
|
||||||
/* Whether a bootloader that understands the common_area is present */
|
/* Whether a bootloader that understands the common_area is present */
|
||||||
#define DEVICE_INFO_FLAG_BOOTROM_PRESENT (1<<0)
|
#define DEVICE_INFO_FLAG_BOOTROM_PRESENT (1<<0)
|
||||||
|
|
|
@ -69,6 +69,18 @@ local Utils =
|
||||||
return outResults
|
return outResults
|
||||||
end,
|
end,
|
||||||
|
|
||||||
|
----ISO14443-B CRC
|
||||||
|
Crc14b = function(s)
|
||||||
|
if s == nil then return nil end
|
||||||
|
if #s == 0 then return nil end
|
||||||
|
if type(s) == 'string' then
|
||||||
|
local utils = require('utils')
|
||||||
|
local ascii = utils.ConvertHexToAscii(s)
|
||||||
|
local hashed = core.iso14443b_crc(ascii)
|
||||||
|
return utils.ConvertAsciiToHex(hashed)
|
||||||
|
end
|
||||||
|
return nil
|
||||||
|
end,
|
||||||
|
|
||||||
------------ CRC-16 ccitt checksums
|
------------ CRC-16 ccitt checksums
|
||||||
-- Takes a hex string and calculates a crc16
|
-- Takes a hex string and calculates a crc16
|
||||||
|
@ -181,20 +193,18 @@ local Utils =
|
||||||
---
|
---
|
||||||
-- Convert Byte array to string of hex
|
-- Convert Byte array to string of hex
|
||||||
ConvertBytesToHex = function(bytes)
|
ConvertBytesToHex = function(bytes)
|
||||||
if #bytes == 0 then
|
if bytes == nil then return '' end
|
||||||
return ''
|
if #bytes == 0 then return '' end
|
||||||
end
|
|
||||||
local s={}
|
local s={}
|
||||||
for i = 1, #(bytes) do
|
for i = 1, #bytes do
|
||||||
s[i] = string.format("%02X",bytes[i])
|
s[i] = string.format("%02X",bytes[i])
|
||||||
end
|
end
|
||||||
return table.concat(s)
|
return table.concat(s)
|
||||||
end,
|
end,
|
||||||
-- Convert byte array to string with ascii
|
-- Convert byte array to string with ascii
|
||||||
ConvertBytesToAscii = function(bytes)
|
ConvertBytesToAscii = function(bytes)
|
||||||
if #bytes == 0 then
|
if bytes == nil then return '' end
|
||||||
return ''
|
if #bytes == 0 then return '' end
|
||||||
end
|
|
||||||
local s={}
|
local s={}
|
||||||
for i = 1, #(bytes) do
|
for i = 1, #(bytes) do
|
||||||
s[i] = string.char(bytes[i])
|
s[i] = string.char(bytes[i])
|
||||||
|
@ -233,13 +243,23 @@ local Utils =
|
||||||
end,
|
end,
|
||||||
|
|
||||||
ConvertHexToAscii = function(s)
|
ConvertHexToAscii = function(s)
|
||||||
|
if s == nil then return '' end
|
||||||
|
if #s == 0 then return '' end
|
||||||
local t={}
|
local t={}
|
||||||
if s == nil then return t end
|
|
||||||
if #s == 0 then return t end
|
|
||||||
for k in s:gmatch"(%x%x)" do
|
for k in s:gmatch"(%x%x)" do
|
||||||
table.insert(t, string.char(tonumber(k,16)))
|
table.insert(t, string.char(tonumber(k,16)))
|
||||||
end
|
end
|
||||||
return table.concat(t)
|
return table.concat(t)
|
||||||
|
end,
|
||||||
|
|
||||||
|
ConvertAsciiToHex = function(s)
|
||||||
|
if s == nil then return '' end
|
||||||
|
if #s == 0 then return '' end
|
||||||
|
local t={}
|
||||||
|
for k in s:gmatch"(.)" do
|
||||||
|
table.insert(t, string.format("%02X", string.byte(k)))
|
||||||
|
end
|
||||||
|
return table.concat(t)
|
||||||
end,
|
end,
|
||||||
|
|
||||||
Chars2num = function(s)
|
Chars2num = function(s)
|
||||||
|
|
|
@ -18,6 +18,7 @@
|
||||||
#include "util.h"
|
#include "util.h"
|
||||||
#include "nonce2key/nonce2key.h"
|
#include "nonce2key/nonce2key.h"
|
||||||
#include "../common/iso15693tools.h"
|
#include "../common/iso15693tools.h"
|
||||||
|
#include "iso14443crc.h"
|
||||||
#include "../common/crc16.h"
|
#include "../common/crc16.h"
|
||||||
#include "../common/crc64.h"
|
#include "../common/crc64.h"
|
||||||
#include "../common/sha1.h"
|
#include "../common/sha1.h"
|
||||||
|
@ -52,12 +53,11 @@ static int l_SendCommand(lua_State *L){
|
||||||
const char *data = luaL_checklstring(L, 1, &size);
|
const char *data = luaL_checklstring(L, 1, &size);
|
||||||
if(size != sizeof(UsbCommand))
|
if(size != sizeof(UsbCommand))
|
||||||
{
|
{
|
||||||
printf("Got data size %d, expected %d" , (int) size,(int) sizeof(UsbCommand));
|
printf("Got data size %d, expected %d" , size, sizeof(UsbCommand));
|
||||||
lua_pushstring(L,"Wrong data size");
|
lua_pushstring(L,"Wrong data size");
|
||||||
return 1;
|
return 1;
|
||||||
}
|
}
|
||||||
|
|
||||||
// UsbCommand c = (*data);
|
|
||||||
SendCommand((UsbCommand* )data);
|
SendCommand((UsbCommand* )data);
|
||||||
return 0; // no return values
|
return 0; // no return values
|
||||||
}
|
}
|
||||||
|
@ -100,7 +100,7 @@ static int l_WaitForResponseTimeout(lua_State *L){
|
||||||
if(WaitForResponseTimeout(cmd, &response, ms_timeout))
|
if(WaitForResponseTimeout(cmd, &response, ms_timeout))
|
||||||
{
|
{
|
||||||
//Push it as a string
|
//Push it as a string
|
||||||
lua_pushlstring(L,(const char *)&response,sizeof(UsbCommand));
|
lua_pushlstring(L,(const char *)&response, sizeof(UsbCommand));
|
||||||
|
|
||||||
return 1;// return 1 to signal one return value
|
return 1;// return 1 to signal one return value
|
||||||
}else{
|
}else{
|
||||||
|
@ -229,6 +229,28 @@ static int l_iso15693_crc(lua_State *L)
|
||||||
return 1;
|
return 1;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
static int l_iso14443b_crc(lua_State *L)
|
||||||
|
{
|
||||||
|
/* void ComputeCrc14443(int CrcType,
|
||||||
|
const unsigned char *Data, int Length,
|
||||||
|
unsigned char *TransmitFirst,
|
||||||
|
unsigned char *TransmitSecond)
|
||||||
|
*/
|
||||||
|
unsigned char buf[USB_CMD_DATA_SIZE];
|
||||||
|
size_t len = 0;
|
||||||
|
const char *data = luaL_checklstring(L, 1, &len);
|
||||||
|
if (USB_CMD_DATA_SIZE < len)
|
||||||
|
len = USB_CMD_DATA_SIZE-2;
|
||||||
|
|
||||||
|
for (int i = 0; i < len; i += 2) {
|
||||||
|
sscanf(&data[i], "%02x", (unsigned int *)&buf[i / 2]);
|
||||||
|
}
|
||||||
|
ComputeCrc14443(CRC_14443_B, buf, len, &buf[len], &buf[len+1]);
|
||||||
|
|
||||||
|
lua_pushlstring(L, (const char *)&buf, len+2);
|
||||||
|
return 1;
|
||||||
|
}
|
||||||
|
|
||||||
/*
|
/*
|
||||||
Simple AES 128 cbc hook up to OpenSSL.
|
Simple AES 128 cbc hook up to OpenSSL.
|
||||||
params: key, input
|
params: key, input
|
||||||
|
@ -483,6 +505,7 @@ int set_pm3_libraries(lua_State *L)
|
||||||
{"clearCommandBuffer", l_clearCommandBuffer},
|
{"clearCommandBuffer", l_clearCommandBuffer},
|
||||||
{"console", l_CmdConsole},
|
{"console", l_CmdConsole},
|
||||||
{"iso15693_crc", l_iso15693_crc},
|
{"iso15693_crc", l_iso15693_crc},
|
||||||
|
{"iso14443b_crc", l_iso14443b_crc},
|
||||||
{"aes128_decrypt", l_aes128decrypt_cbc},
|
{"aes128_decrypt", l_aes128decrypt_cbc},
|
||||||
{"aes128_decrypt_ecb", l_aes128decrypt_ecb},
|
{"aes128_decrypt_ecb", l_aes128decrypt_ecb},
|
||||||
{"aes128_encrypt", l_aes128encrypt_cbc},
|
{"aes128_encrypt", l_aes128encrypt_cbc},
|
||||||
|
|
|
@ -155,9 +155,7 @@ end
|
||||||
-- Sends an instruction to do nothing, only disconnect
|
-- Sends an instruction to do nothing, only disconnect
|
||||||
function disconnect()
|
function disconnect()
|
||||||
|
|
||||||
local command = Command:new{cmd = cmds.CMD_READER_ISO_14443a,
|
local command = Command:new{cmd = cmds.CMD_READER_ISO_14443a, arg1 = 0, }
|
||||||
arg1 = 0, -- Nothing
|
|
||||||
}
|
|
||||||
-- We can ignore the response here, no ACK is returned for this command
|
-- We can ignore the response here, no ACK is returned for this command
|
||||||
-- Check /armsrc/iso14443a.c, ReaderIso14443a() for details
|
-- Check /armsrc/iso14443a.c, ReaderIso14443a() for details
|
||||||
return lib14a.sendToDevice(command,true)
|
return lib14a.sendToDevice(command,true)
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue