mirror of
https://github.com/RfidResearchGroup/proxmark3.git
synced 2025-03-18 03:00:58 +08:00
fix. 'lf io demod' - removed stange size check.
fix: 'lf io sim' - now uses the clock variable correct fix: 'lf io clone' - Q5 now has correct clock 64 instead of 50
This commit is contained in:
parent
7b050e9afe
commit
117003bdb2
1 changed files with 26 additions and 29 deletions
|
@ -98,9 +98,9 @@ int CmdIOProxDemod(const char *Cmd) {
|
||||||
int waveIdx = 0;
|
int waveIdx = 0;
|
||||||
//get binary from fsk wave
|
//get binary from fsk wave
|
||||||
idx = detectIOProx(BitStream, &bitlen, &waveIdx);
|
idx = detectIOProx(BitStream, &bitlen, &waveIdx);
|
||||||
if (idx<0){
|
if (idx < 0){
|
||||||
if (g_debugMode){
|
if (g_debugMode){
|
||||||
if (idx==-1){
|
if (idx == -1){
|
||||||
PrintAndLog("DEBUG: Error - IO prox just noise detected");
|
PrintAndLog("DEBUG: Error - IO prox just noise detected");
|
||||||
} else if (idx == -2) {
|
} else if (idx == -2) {
|
||||||
PrintAndLog("DEBUG: Error - IO prox not enough samples");
|
PrintAndLog("DEBUG: Error - IO prox not enough samples");
|
||||||
|
@ -123,19 +123,14 @@ int CmdIOProxDemod(const char *Cmd) {
|
||||||
}
|
}
|
||||||
return retval;
|
return retval;
|
||||||
}
|
}
|
||||||
//Index map
|
//Index map
|
||||||
//0 10 20 30 40 50 60
|
//0 10 20 30 40 50 60
|
||||||
//| | | | | | |
|
//| | | | | | |
|
||||||
//01234567 8 90123456 7 89012345 6 78901234 5 67890123 4 56789012 3 45678901 23
|
//01234567 8 90123456 7 89012345 6 78901234 5 67890123 4 56789012 3 45678901 23
|
||||||
//-----------------------------------------------------------------------------
|
//-----------------------------------------------------------------------------
|
||||||
//00000000 0 11110000 1 facility 1 version* 1 code*one 1 code*two 1 ???????? 11
|
//00000000 0 11110000 1 facility 1 version* 1 code*one 1 code*two 1 ???????? 11
|
||||||
//
|
//
|
||||||
//XSF(version)facility:codeone+codetwo (raw)
|
//XSF(version)facility:codeone+codetwo (raw)
|
||||||
//Handle the data
|
|
||||||
if (idx + 64 > bitlen) {
|
|
||||||
if (g_debugMode) PrintAndLog("DEBUG: Error - IO prox not enough bits found - bitlen: %d", bitlen);
|
|
||||||
return retval;
|
|
||||||
}
|
|
||||||
|
|
||||||
if (g_debugMode) {
|
if (g_debugMode) {
|
||||||
PrintAndLog("%d%d%d%d%d%d%d%d %d", BitStream[idx], BitStream[idx+1], BitStream[idx+2], BitStream[idx+3], BitStream[idx+4], BitStream[idx+5], BitStream[idx+6], BitStream[idx+7], BitStream[idx+8]);
|
PrintAndLog("%d%d%d%d%d%d%d%d %d", BitStream[idx], BitStream[idx+1], BitStream[idx+2], BitStream[idx+3], BitStream[idx+4], BitStream[idx+5], BitStream[idx+6], BitStream[idx+7], BitStream[idx+8]);
|
||||||
|
@ -171,8 +166,8 @@ int CmdIOProxDemod(const char *Cmd) {
|
||||||
retval = 0;
|
retval = 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
PrintAndLog("IO Prox XSF(%02d)%02x:%05d (%08x%08x) [crc %s]",version,facilitycode,number,code,code2, crcStr);
|
PrintAndLog("IO Prox XSF(%02d)%02x:%05d (%08x%08x) [crc %s]", version, facilitycode, number, code, code2, crcStr);
|
||||||
setDemodBuf(BitStream,64,idx);
|
setDemodBuf(BitStream, 64, idx);
|
||||||
if (g_debugMode){
|
if (g_debugMode){
|
||||||
PrintAndLog("DEBUG: IO prox idx: %d, Len: %d, Printing demod buffer:", idx, 64);
|
PrintAndLog("DEBUG: IO prox idx: %d, Len: %d, Printing demod buffer:", idx, 64);
|
||||||
printDemodBuff();
|
printDemodBuff();
|
||||||
|
@ -188,7 +183,7 @@ int CmdIOProxDemod(const char *Cmd) {
|
||||||
//00000000 0 11110000 1 facility 1 version* 1 code*one 1 code*two 1 ???????? 11
|
//00000000 0 11110000 1 facility 1 version* 1 code*one 1 code*two 1 ???????? 11
|
||||||
//XSF(version)facility:codeone+codetwo (raw)
|
//XSF(version)facility:codeone+codetwo (raw)
|
||||||
int getIOProxBits(uint8_t version, uint8_t fc, uint16_t cn, uint8_t *bits) {
|
int getIOProxBits(uint8_t version, uint8_t fc, uint16_t cn, uint8_t *bits) {
|
||||||
#define SEPARATOR 1
|
#define SEPARATOR 1
|
||||||
uint8_t pos=0;
|
uint8_t pos=0;
|
||||||
// the return bits, preamble 0000 0000 0
|
// the return bits, preamble 0000 0000 0
|
||||||
uint8_t pre[64];
|
uint8_t pre[64];
|
||||||
|
@ -249,13 +244,9 @@ int CmdIOProxSim(const char *Cmd) {
|
||||||
uint16_t cn = 0;
|
uint16_t cn = 0;
|
||||||
uint8_t version = 0, fc = 0;
|
uint8_t version = 0, fc = 0;
|
||||||
uint8_t bits[64];
|
uint8_t bits[64];
|
||||||
uint8_t *bs = bits;
|
|
||||||
size_t size = sizeof(bits);
|
size_t size = sizeof(bits);
|
||||||
memset(bs, 0x00, size);
|
memset(bits, 0x00, size);
|
||||||
|
|
||||||
uint64_t arg1 = ( 10 << 8 ) + 8; // fcHigh = 10, fcLow = 8
|
|
||||||
uint64_t arg2 = (64 << 8)| + 1; // clk RF/64 invert=1
|
|
||||||
|
|
||||||
char cmdp = param_getchar(Cmd, 0);
|
char cmdp = param_getchar(Cmd, 0);
|
||||||
if (strlen(Cmd) == 0 || cmdp == 'h' || cmdp == 'H') return usage_lf_io_sim();
|
if (strlen(Cmd) == 0 || cmdp == 'h' || cmdp == 'H') return usage_lf_io_sim();
|
||||||
|
|
||||||
|
@ -270,19 +261,25 @@ int CmdIOProxSim(const char *Cmd) {
|
||||||
PrintAndLog("Card Number Truncated to 16-bits (IOProx): %u", cn);
|
PrintAndLog("Card Number Truncated to 16-bits (IOProx): %u", cn);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// clock 64, FSK2a fcHIGH 10 | fcLOW 8
|
||||||
|
uint8_t clk = 64, invert = 1, high = 10, low = 8;
|
||||||
|
uint16_t arg1, arg2;
|
||||||
|
arg1 = high << 8 | low;
|
||||||
|
arg2 = invert << 8 | clk;
|
||||||
|
|
||||||
PrintAndLog("Emulating IOProx Version: %u FC: %u; CN: %u\n", version, fc, cn);
|
PrintAndLog("Emulating IOProx Version: %u FC: %u; CN: %u\n", version, fc, cn);
|
||||||
PrintAndLog("Press pm3-button to abort simulation or run another command");
|
PrintAndLog("Press pm3-button to abort simulation or run another command");
|
||||||
|
|
||||||
if ( !getIOProxBits(version, fc, cn, bs)) {
|
if ( !getIOProxBits(version, fc, cn, bits)) {
|
||||||
PrintAndLog("Error with tag bitstream generation.");
|
PrintAndLog("Error with tag bitstream generation.");
|
||||||
return 1;
|
return 1;
|
||||||
}
|
}
|
||||||
// IOProx uses: fcHigh: 10, fcLow: 8, clk: 64, invert: 1
|
// IOProx uses: fcHigh: 10, fcLow: 8, clk: 64, invert: 1
|
||||||
// arg1 --- fcHigh<<8 + fcLow
|
// arg1 --- fcHigh<<8 + fcLow
|
||||||
// arg2 --- Inversion and clk setting
|
// arg2 --- Invert and clk setting
|
||||||
// 64 --- Bitstream length: 64-bits == 8 bytes
|
// size --- 64 bits == 8 bytes
|
||||||
UsbCommand c = {CMD_FSK_SIM_TAG, {arg1, arg2, size}};
|
UsbCommand c = {CMD_FSK_SIM_TAG, {arg1, arg2, size}};
|
||||||
memcpy(c.d.asBytes, bs, size);
|
memcpy(c.d.asBytes, bits, size);
|
||||||
clearCommandBuffer();
|
clearCommandBuffer();
|
||||||
SendCommand(&c);
|
SendCommand(&c);
|
||||||
return 0;
|
return 0;
|
||||||
|
@ -312,7 +309,7 @@ int CmdIOProxClone(const char *Cmd) {
|
||||||
}
|
}
|
||||||
|
|
||||||
if (param_getchar(Cmd, 3) == 'Q' || param_getchar(Cmd, 3) == 'q')
|
if (param_getchar(Cmd, 3) == 'Q' || param_getchar(Cmd, 3) == 'q')
|
||||||
blocks[0] = T5555_MODULATION_FSK2 | T5555_INVERT_OUTPUT | T5555_SET_BITRATE(50) | 2 << T5555_MAXBLOCK_SHIFT;
|
blocks[0] = T5555_MODULATION_FSK2 | T5555_INVERT_OUTPUT | T5555_SET_BITRATE(64) | 2 << T5555_MAXBLOCK_SHIFT;
|
||||||
|
|
||||||
if ( !getIOProxBits(version, fc, cn, bs)) {
|
if ( !getIOProxBits(version, fc, cn, bs)) {
|
||||||
PrintAndLog("Error with tag bitstream generation.");
|
PrintAndLog("Error with tag bitstream generation.");
|
||||||
|
|
Loading…
Reference in a new issue