micolous / pcprox

Library for pcProx USB RFID reader
GNU Lesser General Public License v3.0
21 stars 2 forks source link

Tested with Imprivata branded pcProx Plus #4

Open hackerb9 opened 2 years ago

hackerb9 commented 2 years ago

I tested an Imprivata HDW-IMP-80, which appears to be a rebadged RF IDeas pcProx Plus (dual band 125kHz, 13.56MHz).

It is able to read some of 13.56MHz HID cards I had laying around (although I have not checked the data yet).

I also tried a public transit stored value card (MIFARE DESFire), which partially worked. The usbtest.py script is able to read the card ID, but did not show further information. For example, the NFC sensor on my phone can read the most recent public transit trip, but usbtest.py only shows 56 bits of data. I presume there's some extra protocol required for MIFARE.

``` $ ./usbtest.py / tsIDBitCnts iLeadParityBitCnt = 0 iTrailParityBitCnt = 0 iIDBitCnt = 16 iTotalBitCnt = 26 / tsCfgFlags bFixLenDsp = 0 bFrcBitCntEx = 0 bStripFac = 1 bSndFac = 0 bUseDelFac2Id = 0 bNoUseELChar = 0 bSndOnRx = 0 bHaltKBSnd = 1 / tsIDDispParms iFACIDDelim = 179 iELDelim = 40 iIDDispLen = 5 iFACDispLen = 3 / tsTimeParms iBitStrmTO = 80 iIDHoldTO = 2000 iIDLockOutTm = 1000 iUSBKeyPrsTm = 20 iUSBKeyRlsTm = 20 / tsCfgFlags2 bUseLeadChrs = 0 bDspHex = 0 bWiegInvData = 1 bUseInvDataF = 1 bRevWiegBits = 0 bBeepID = 1 bRevBytes = 0 / tsCfgFlags3 bUseNumKP = 0 bSndSFON = 0 bSndSFFC = 0 bSndSFID = 0 bPrxProEm = 0 bUse64Bit = 0 / tsIDDispParms2 iLeadChrCnt = 0 iLeadChr0 = 0 iLeadChr1 = 0 iLeadChr2 = 0 iCrdGnChr0 = 0 iCrdGnChr1 = 0 / tsIDDispParms3 iTrailChrCnt = 0 / tsLEDCtrl bAppCtrlsLED = 0 iRedLEDState = 0 iGrnLEDState = 0 / tsBprRlyCtrl iBeeperState = 0 iRelayState = 0 Waiting for a card... (red light should pulse) ``` ``` Tag data: 04 68 11 52 8a 5c 80 Bit length: 56 We got a card! (blinking lights) ```
micolous commented 2 years ago

Thanks for the report!

I don't have a 13.56 MHz reader, so I've never tested that. From the looks of it, "bit length 56" is probably sending the UID-7 of the card.

Reading the manual, it sounds like to a read file on a MIFARE DESFire, you'd need to specifically configure the reader (page 74) with the application ID, file ID, and any encryption keys to the reader.

Practically speaking, this means you could set it up to read a single file on a single type of transit card, but it may not give any feedback about the wrong card. A card with a single free-read file would work well for this (eg: Sydney's Opal card), but anything with more than one file wouldn't (eg: Adelaide's Metrocard).

I'm curious about what it does when that's properly set up, and if there's some extra config pages that this needs to read / write.