cvend
Differences
This shows you the differences between two versions of the page.
| Both sides previous revisionPrevious revisionNext revision | Previous revision | ||
| cvend [2026-03-01 23:52 UTC (4 weeks ago)] – doof | cvend [2026-03-17 20:08 UTC (2 weeks ago)] (current) – [Card reader flow] penguinowl | ||
|---|---|---|---|
| Line 1: | Line 1: | ||
| ====== cVEND NFC Reader ====== | ====== cVEND NFC Reader ====== | ||
| - | |||
| cVEND is the NFC reader on the bottom half of the PM3 | cVEND is the NFC reader on the bottom half of the PM3 | ||
| Line 7: | Line 6: | ||
| The associated serial device appears to be at '' | The associated serial device appears to be at '' | ||
| - | |||
| ===== cVEND protocol notes ===== | ===== cVEND protocol notes ===== | ||
| Line 41: | Line 39: | ||
| | 0x22 | -> | Buzzer | makes the cvend beep; u16 frequency, u16 duration. | | 0x22 | -> | Buzzer | makes the cvend beep; u16 frequency, u16 duration. | ||
| | 0x32 | -> | CardRelease | // registered in ProxCardCtrl:: | | 0x32 | -> | CardRelease | // registered in ProxCardCtrl:: | ||
| - | | 0x46 | -> | | //unknown, | + | | 0x46 | -> | AbortCardHandling |
| | 0x96 | -> | PutFile | | | | 0x96 | -> | PutFile | | | ||
| | 0x97 | <- | PutFileReply | | | | 0x97 | <- | PutFileReply | | | ||
| Line 59: | Line 57: | ||
| | 0xaf | <- | ITSOCtrlReply | | | | 0xaf | <- | ITSOCtrlReply | | | ||
| | 0xb1 | <- | ISORead | sent by reader when ISO14443A card presented, after enabling Iso with 0xe4\\ card UID at offset 2 | | | 0xb1 | <- | ISORead | sent by reader when ISO14443A card presented, after enabling Iso with 0xe4\\ card UID at offset 2 | | ||
| - | | 0xb4 | -> | APDUProx | // | + | | 0xb3 | <- | ISOCardReleased | sent by reader after ISO1443A card released with 0x32 or 0x46 | |
| + | | 0xb4 | -> | APDUProx | CLA, INS, P1, P2, Lc (2 bytes), Data, Le (2 bytes), and 2 other mystery bytes, in some order | | ||
| | 0xb5 | <- | APDUProxReply | | | | 0xb5 | <- | APDUProxReply | | | ||
| | 0xb6 | -> | SAMCtrl | // | | 0xb6 | -> | SAMCtrl | // | ||
| Line 65: | Line 64: | ||
| | 0xb9 | <- | DESFireRead | sent by reader when DESFire card presented, after enabling DESFire with 0xe4 | | | 0xb9 | <- | DESFireRead | sent by reader when DESFire card presented, after enabling DESFire with 0xe4 | | ||
| | 0xba | -> | | //unknown, registered in ProxCardDesfire:: | | 0xba | -> | | //unknown, registered in ProxCardDesfire:: | ||
| - | | 0xbc | -> | | //unknown, registered | + | | 0xbb | <- | DESFireCardRemoved | sent by reader when DESFire card removed from field | |
| + | | 0xbc | -> | DESFireCommand | ||
| + | | 0xbd | <- | DESFireCommandReply | response to command, documented above | | ||
| | 0xbe | <- | UnhandledCard | sent by reader when a card is presented that is not supported by any enabled ProxCardFunction, | | 0xbe | <- | UnhandledCard | sent by reader when a card is presented that is not supported by any enabled ProxCardFunction, | ||
| | 0xce | -> | | //unknown, registered in IppHandling:: | | 0xce | -> | | //unknown, registered in IppHandling:: | ||
| - | | 0xd0 | -> | | //unknown, registered in EmvIppHandler:: | + | | 0xd0 | -> | EMV | first byte selects subcommand |
| - | | 0xd1 | <- | EMVTransactionSuccessUnk | + | | 0xd1 | <- | EMVStatus |
| | 0xd4 | -> | | //unknown, registered in ProxCardUltralightC:: | | 0xd4 | -> | | //unknown, registered in ProxCardUltralightC:: | ||
| | 0xe4 | -> | ProxCardFunction | first 2 bytes specify function (4=VdvKa, 5=MifareClassic, | | 0xe4 | -> | ProxCardFunction | first 2 bytes specify function (4=VdvKa, 5=MifareClassic, | ||
| Line 81: | Line 82: | ||
| -> - Host to Reader\\ | -> - Host to Reader\\ | ||
| <- - Reader to Host | <- - Reader to Host | ||
| + | |||
| + | ==== Sample reader flow ==== | ||
| + | |||
| + | - Host enables desired card type with '' | ||
| + | - Reader acknowledges with '' | ||
| + | - Reader waits for card, seems like it eventually goes to sleep without any stimuli. Might have to keep it awake by sending packets occasionally (e.g. '' | ||
| + | - When card is scanned, reader sends the corresponding read packet if the card type is enabled (e.g. '' | ||
| + | - Card data can then be queried by sending the equivalent command packets. DESFire commands are documented in {{ 0: | ||
| + | - Host sets DESFire application (e.g. packet type '' | ||
| + | - Reader responds with a status code in accordance with the documentation. This comes in the form of a '' | ||
| + | - Host sends read command. To read the full contents of file 0x00, the body is '' | ||
| + | - Reader responds with the status code and file data. | ||
| ==== Reader -> Host ==== | ==== Reader -> Host ==== | ||
cvend.1772409151.txt.gz · Last modified: by doof
