mirror of
https://github.com/Proxmark/proxmark3.git
synced 2024-09-21 15:26:35 +08:00
LF HID & IO prox demod translation addons
lf hid fskdemod - add bit format length, facility code and card numbers for different formats
This commit is contained in:
parent
f4bad97d92
commit
4860172789
|
@ -755,22 +755,71 @@ void CmdHIDdemodFSK(int findone, int *high, int *low, int ledcontrol)
|
||||||
else // 0 1
|
else // 0 1
|
||||||
lo=(lo<<1)|
|
lo=(lo<<1)|
|
||||||
1;
|
1;
|
||||||
numshifts ++;
|
numshifts++;
|
||||||
idx += 2;
|
idx += 2;
|
||||||
}
|
}
|
||||||
|
|
||||||
//Dbprintf("Num shifts: %d ", numshifts);
|
//Dbprintf("Num shifts: %d ", numshifts);
|
||||||
// Hopefully, we read a tag and hit upon the next frame marker
|
// Hopefully, we read a tag and hit upon the next frame marker
|
||||||
if(idx + sizeof(frame_marker_mask) < size)
|
if(idx + sizeof(frame_marker_mask) < size)
|
||||||
{
|
{
|
||||||
if ( memcmp(dest+idx, frame_marker_mask, sizeof(frame_marker_mask)) == 0)
|
if ( memcmp(dest+idx, frame_marker_mask, sizeof(frame_marker_mask)) == 0)
|
||||||
{
|
{
|
||||||
if (hi2 != 0){
|
if (hi2 != 0){ //should be large enough for the largest HID tags
|
||||||
Dbprintf("TAG ID: %x%08x%08x (%d)",
|
Dbprintf("TAG ID: %x%08x%08x (%d)",
|
||||||
(unsigned int) hi2, (unsigned int) hi, (unsigned int) lo, (unsigned int) (lo>>1) & 0xFFFF);
|
(unsigned int) hi2, (unsigned int) hi, (unsigned int) lo, (unsigned int) (lo>>1) & 0xFFFF);
|
||||||
}
|
}
|
||||||
else {
|
else { //standard bits
|
||||||
Dbprintf("TAG ID: %x%08x (%d)",
|
//Dbprintf("TAG ID: %x%08x (%d)",
|
||||||
(unsigned int) hi, (unsigned int) lo, (unsigned int) (lo>>1) & 0xFFFF);
|
// (unsigned int) hi, (unsigned int) lo, (unsigned int) (lo>>1) & 0xFFFF);
|
||||||
|
uint8_t bitlen = 0;
|
||||||
|
uint32_t fc = 0;
|
||||||
|
uint32_t cardnum = 0;
|
||||||
|
|
||||||
|
if (((hi>>5)&1)==1){//if bit 38 is set then < 37 bit format is used
|
||||||
|
uint32_t lo2=0;
|
||||||
|
lo2=(((hi & 31) << 12) | (lo>>20)); //get bits 21-37 to check for format len bit
|
||||||
|
uint8_t idx3 = 1;
|
||||||
|
while(lo2>1){ //find last bit set to 1 (format len bit)
|
||||||
|
lo2=lo2>>1;
|
||||||
|
idx3++;
|
||||||
|
}
|
||||||
|
bitlen =idx3+19;
|
||||||
|
fc =0;
|
||||||
|
cardnum=0;
|
||||||
|
if(bitlen==26){
|
||||||
|
cardnum = (lo>>1)&0xFFFF;
|
||||||
|
fc = (lo>>17)&0xFF;
|
||||||
|
}
|
||||||
|
if(bitlen==37){
|
||||||
|
cardnum = (lo>>1)&0x7FFFF;
|
||||||
|
fc = ((hi&0xF)<<12)|(lo>>20);
|
||||||
|
}
|
||||||
|
if(bitlen==34){
|
||||||
|
cardnum = (lo>>1)&0xFFFF;
|
||||||
|
fc= ((hi&1)<<15)|(lo>>17);
|
||||||
|
}
|
||||||
|
if(bitlen==35){
|
||||||
|
cardnum = (lo>>1)&0xFFFFF;
|
||||||
|
fc = ((hi&1)<<11)|(lo>>21);
|
||||||
|
}
|
||||||
|
//Dbprintf("Format Len: %d bit - FC: %d - Card: %d",(unsigned int) bitlen, (unsigned int) fc, (unsigned int) cardnum);
|
||||||
|
}
|
||||||
|
else { //if bit 38 is not set then 37 bit format is used
|
||||||
|
bitlen= 37;
|
||||||
|
fc =0;
|
||||||
|
cardnum=0;
|
||||||
|
if(bitlen==37){
|
||||||
|
cardnum = (lo>>1)&0x7FFFF;
|
||||||
|
fc = ((hi&0xF)<<12)|(lo>>20);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
//Dbprintf("TAG ID: %x%08x (%d)",
|
||||||
|
// (unsigned int) hi, (unsigned int) lo, (unsigned int) (lo>>1) & 0xFFFF);
|
||||||
|
|
||||||
|
Dbprintf("TAG ID: %x%08x (%d) - Format Len: %dbit - FC: %d - Card: %d",
|
||||||
|
(unsigned int) hi, (unsigned int) lo, (unsigned int) (lo>>1) & 0xFFFF,
|
||||||
|
(unsigned int) bitlen, (unsigned int) fc, (unsigned int) cardnum);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -837,7 +886,7 @@ void CmdIOdemodFSK(int findone, int *high, int *low, int ledcontrol)
|
||||||
for( idx=0; idx < size - 64; idx++) {
|
for( idx=0; idx < size - 64; idx++) {
|
||||||
|
|
||||||
if ( memcmp(dest + idx, mask, sizeof(mask)) ) continue;
|
if ( memcmp(dest + idx, mask, sizeof(mask)) ) continue;
|
||||||
|
Dbprintf("%b",bytebits_to_byte(dest+idx,32));
|
||||||
Dbprintf("%d%d%d%d%d%d%d%d",dest[idx], dest[idx+1], dest[idx+2],dest[idx+3],dest[idx+4],dest[idx+5],dest[idx+6],dest[idx+7]);
|
Dbprintf("%d%d%d%d%d%d%d%d",dest[idx], dest[idx+1], dest[idx+2],dest[idx+3],dest[idx+4],dest[idx+5],dest[idx+6],dest[idx+7]);
|
||||||
Dbprintf("%d%d%d%d%d%d%d%d",dest[idx+8], dest[idx+9], dest[idx+10],dest[idx+11],dest[idx+12],dest[idx+13],dest[idx+14],dest[idx+15]);
|
Dbprintf("%d%d%d%d%d%d%d%d",dest[idx+8], dest[idx+9], dest[idx+10],dest[idx+11],dest[idx+12],dest[idx+13],dest[idx+14],dest[idx+15]);
|
||||||
Dbprintf("%d%d%d%d%d%d%d%d",dest[idx+16],dest[idx+17],dest[idx+18],dest[idx+19],dest[idx+20],dest[idx+21],dest[idx+22],dest[idx+23]);
|
Dbprintf("%d%d%d%d%d%d%d%d",dest[idx+16],dest[idx+17],dest[idx+18],dest[idx+19],dest[idx+20],dest[idx+21],dest[idx+22],dest[idx+23]);
|
||||||
|
@ -850,11 +899,11 @@ void CmdIOdemodFSK(int findone, int *high, int *low, int ledcontrol)
|
||||||
code = bytebits_to_byte(dest+idx,32);
|
code = bytebits_to_byte(dest+idx,32);
|
||||||
code2 = bytebits_to_byte(dest+idx+32,32);
|
code2 = bytebits_to_byte(dest+idx+32,32);
|
||||||
|
|
||||||
short version = bytebits_to_byte(dest+idx+14,4);
|
short version = bytebits_to_byte(dest+idx+28,8); //14,4
|
||||||
char unknown = bytebits_to_byte(dest+idx+19,8) ;
|
char facilitycode = bytebits_to_byte(dest+idx+19,8) ;
|
||||||
uint16_t number = bytebits_to_byte(dest+idx+36,9);
|
uint16_t number = (bytebits_to_byte(dest+idx+37,8)<<8)|(bytebits_to_byte(dest+idx+46,8)); //36,9
|
||||||
|
|
||||||
Dbprintf("XSF(%02d)%02x:%d (%08x%08x)",version,unknown,number,code,code2);
|
Dbprintf("XSF(%02d)%02x:%d (%08x%08x)",version,facilitycode,number,code,code2);
|
||||||
if (ledcontrol) LED_D_OFF();
|
if (ledcontrol) LED_D_OFF();
|
||||||
|
|
||||||
// if we're only looking for one tag
|
// if we're only looking for one tag
|
||||||
|
@ -950,7 +999,8 @@ void T55xxWriteBit(int bit)
|
||||||
// Write one card block in page 0, no lock
|
// Write one card block in page 0, no lock
|
||||||
void T55xxWriteBlock(uint32_t Data, uint32_t Block, uint32_t Pwd, uint8_t PwdMode)
|
void T55xxWriteBlock(uint32_t Data, uint32_t Block, uint32_t Pwd, uint8_t PwdMode)
|
||||||
{
|
{
|
||||||
unsigned int i;
|
//unsigned int i; //enio adjustment 12/10/14
|
||||||
|
uint32_t i;
|
||||||
|
|
||||||
FpgaDownloadAndGo(FPGA_BITSTREAM_LF);
|
FpgaDownloadAndGo(FPGA_BITSTREAM_LF);
|
||||||
FpgaSendCommand(FPGA_CMD_SET_DIVISOR, 95); //125Khz
|
FpgaSendCommand(FPGA_CMD_SET_DIVISOR, 95); //125Khz
|
||||||
|
@ -995,8 +1045,8 @@ void T55xxWriteBlock(uint32_t Data, uint32_t Block, uint32_t Pwd, uint8_t PwdMod
|
||||||
void T55xxReadBlock(uint32_t Block, uint32_t Pwd, uint8_t PwdMode)
|
void T55xxReadBlock(uint32_t Block, uint32_t Pwd, uint8_t PwdMode)
|
||||||
{
|
{
|
||||||
uint8_t *dest = (uint8_t *)BigBuf;
|
uint8_t *dest = (uint8_t *)BigBuf;
|
||||||
int m=0, i=0;
|
//int m=0, i=0; //enio adjustment 12/10/14
|
||||||
|
uint32_t m=0, i=0;
|
||||||
FpgaDownloadAndGo(FPGA_BITSTREAM_LF);
|
FpgaDownloadAndGo(FPGA_BITSTREAM_LF);
|
||||||
m = sizeof(BigBuf);
|
m = sizeof(BigBuf);
|
||||||
// Clear destination buffer before sending the command
|
// Clear destination buffer before sending the command
|
||||||
|
|
Loading…
Reference in a new issue