RFID 관련 규격 정리중

 

claude 랑 이야기 하다 보니

type A / type B는 part 2 RF 출력, 신호 인터페이스 관련(modulation 등) 차이이고

mifare / desfire / ntag 등은 type A를 쓴다고 한다.

 

part 4 에서 전송 프로토콜 혐상을 하고 나서 APDU로 통신을 하는 듯.

 

Part 1: Physical characteristics

[링크 : https://cdn.standards.iteh.ai/samples/73596/a466036642d748d5a68e3adf58009141/ISO-IEC-14443-1-2018.pdf]

 

Part 2: Radio frequency power and signal interface

[링크 : https://cdn.standards.iteh.ai/samples/73597/91d41d645abb47b583de0532e74590d6/ISO-IEC-14443-2-2020.pdf]

 

Part 3: Initialization and anticollision

[링크 : https://cdn.standards.iteh.ai/samples/73598/7d90d7e26ed74f22b6ccd16cc3204b7d/ISO-IEC-14443-3-2018.pdf]

 

Part 4: Transmission protocol

[링크 : https://cdn.standards.iteh.ai/samples/73599/78cb3949540b4b7da711f301650caa06/ISO-IEC-14443-4-2018.pdf]

 

Posted by 구차니

MCT 에서도 FF0780 이 기본값인것 같은데

이걸 2진수로 바꾸면 1111 1111 0000 0111 1000 0000(2) 이 된다.

이걸 Access bit에 넣으면

C3_3 만 1이 되는건데

C3_3 에서 _3은 블록구분이니까 sector trailer에 대해서만 C3 = 1로 셋팅된 상황

 

3번은 sector trailer block 이고

0~2번은 data block

 

sector trailer의 C1/C2/C3 = 0/0/1 인 조건은

keyA read(never) / wirte (key A)

keyA read(key A) / wirte (key A)

access bit read(Key A) / write (Key A) 인데 transport configuration 에서는 Key B로도 읽힌다고 한다.

 

data block의 C1/C2/C3 = 0/0/0 인 조건은

read - Key A or B

write - Key A or B

increment - Key A or B

decrement, transfer, restor - Key A or B

즉, A나 B 중에 매칭이 되면 모든 데이터를 읽고 쓸 수 있는 셋팅이다.

 

 

 

 

'하드웨어 > rfid_nfc_smartcard' 카테고리의 다른 글

iso/iec 14443-1/2/3/4  (0) 2026.07.16
MCT(Mifare classic Tool) 앱에서 사용하는 키  (0) 2026.07.16
Proxmark, mfoc, mfcuk  (0) 2026.07.15
mifare classic 1k 구조  (0) 2026.07.15
CUID 복제 안되는 rfid 카드 -_ㅠ  (0) 2025.12.03
Posted by 구차니

앱에서도 나오지만

키를 입력해서 쓸수 있는건 아니고

미리 정의된 사전에서 사용해보는 구조이고

여기서 사용하는 키는 앱에 파일로 저장되어 있는것 같다.

 

근데 특이한게.. D3.. 어쩌구 키는 hotel-std.keys에 속하지 않고

이걸 제외하면 std < hotel < extended 로 전부 포함되어 있다.

 std.keys hotel-std.keys extended-std.keys
# Standard keys

FFFFFFFFFFFF
A0A1A2A3A4A5
D3F7D3F7D3F7
# Keys that are known to
# work for some hotel locks.
# exteded-std.keys might
# have more working keys.

FFFFFFFFFFFF
2A2C13CC242A
8A19D40CF2B5
A0A1A2A3A4A5
B578F38A5C61
0000014B5C31
96A301BCE267
44AB09010845
85FED980EA5A
D3B595E9DD63
AFBECD121004
34B16CD59FF8
BB2C0007D022
58AC17BF3629
B62307B62307
AFBECD120454
842146108088
9EBC3EB37130
34D3C568B348
91FF18E63887
4D8B8B95FDEE
354A787087F1
4A306E62E9B6
135B88A94B8B
# More well known keys
# that can be found publicly

# Standard keys
FFFFFFFFFFFF
A0A1A2A3A4A5
D3F7D3F7D3F7
000000000000

...
# 너무 많아서 생략

 

[링크 : https://github.com/ikarus23/MifareClassicTool/tree/master/Mifare%20Classic%20Tool/app/src/main/assets/key-files]

'하드웨어 > rfid_nfc_smartcard' 카테고리의 다른 글

iso/iec 14443-1/2/3/4  (0) 2026.07.16
mifare classic 1k - access control  (0) 2026.07.16
Proxmark, mfoc, mfcuk  (0) 2026.07.15
mifare classic 1k 구조  (0) 2026.07.15
CUID 복제 안되는 rfid 카드 -_ㅠ  (0) 2025.12.03
Posted by 구차니

 

[링크 : https://proxmark.com/]

[링크 : https://www.proxmarkbuilds.org/]

 

hf search
hf mf chk -*
hf mf nested --1k --blk 0 -a -k ffffffffffff
hf mf chk --dump
hf mf dump
hf mf restore --1k --uid "UID8자리"

[링크 : https://www.clien.net/service/board/lecture/16933467]

[링크 : https://m.blog.naver.com/ndb796/221126191197]

 

$ apt-cache search mfoc
forensics-all - Debian Forensics Environment - essential components (metapackage)
indi-dreamfocuser - INDI driver for DeamFocuser focuser
mfoc - MIFARE Classic offline cracker
python-mdanalysis-doc - analyse molecular dynamics files and trajectories ( documentation)
python3-mdanalysis - analyse molecular dynamics files and trajectories


$ apt-cache search mfcuk
forensics-all - Debian Forensics Environment - essential components (metapackage)
mfcuk - MiFare Classic Universal toolKit
Posted by 구차니

1k 이긴 한데 다 쓸 순 없고

1 block = 16 bytes

1 sector = 4 block

그래서 0~15 sector / 0~63 block 으로 구성

 

 

value block 라는걸로 access bit에 체크하면 increment / decrement / store / transfer 명령으로 잔액이 계산된다고 하는데

trailer 블럭이라고 매 섹터의 마지막 블록에 저장된 값에 의해서 access bit를 설정이 가능한것으로 보인다.

 

주로 쓴건 Read(0x30), Write(0xA0) 인데

0xC0 / 0xC1 / 0xC2 / 0xB0 명령으로 increment / decrement / restore / transfer 가 수행이 가능하다.

[링크 : https://www.nxp.com/docs/en/data-sheet/MF1S50YYX_V1.pdf]

[링크 : https://support.ccs.com.ph/portal/en/kb/articles/mifare-classic-1k-memory-structure]

[링크 : https://www.e2box.co.kr/entry/Mifare®-카드구조]

'하드웨어 > rfid_nfc_smartcard' 카테고리의 다른 글

MCT(Mifare classic Tool) 앱에서 사용하는 키  (0) 2026.07.16
Proxmark, mfoc, mfcuk  (0) 2026.07.15
CUID 복제 안되는 rfid 카드 -_ㅠ  (0) 2025.12.03
출입카드 복제 (CUID)  (0) 2025.03.20
libpcsclite on cpp  (0) 2025.03.18
Posted by 구차니

RFID 변경가능 스티커라고 해서 사봤는데 안드로이드에서 MIFARE classic tool로 시도하는데 안되길래

질문하려고 보니 전용 RFID 복제기가 필요하다고..

 

판매자의 다른글을 보는데 복제기 금액이 궁금해서 보려는데 없다 -_ㅠ

[링크 : https://itempage3.auction.co.kr/DetailView.aspx?ItemNo=C913905797]

 

 

이전에 샀던 카드 타입은 잘되는데

[링크 : https://itempage3.auction.co.kr/DetailView.aspx?ItemNo=C555653752]

 

여기서도 위의 제품과 동일한걸 파는데, "UID의 변경이 불가능한 제품"이라고 명시되어있다. 크흡..

저번에도 이분에게 샀었는데 믿고 이분에게 샀어야 했는데!!!

[링크 : https://itempage3.auction.co.kr/DetailView.aspx?itemno=C402942299]

 

에잇.. 이걸로 사서 다시해봐야지 머..

[링크 : https://itempage3.auction.co.kr/DetailView.aspx?itemno=C712600160]

 

 

'하드웨어 > rfid_nfc_smartcard' 카테고리의 다른 글

Proxmark, mfoc, mfcuk  (0) 2026.07.15
mifare classic 1k 구조  (0) 2026.07.15
출입카드 복제 (CUID)  (0) 2025.03.20
libpcsclite on cpp  (0) 2025.03.18
NDEF 데이터 읽기  (0) 2025.03.17
Posted by 구차니

포인트는 rfid manufacture block 이라는거고

Write Tag / Write Dump (Clone) / Show Options - Advanced : Enable writing to manufacture block

[링크 : https://m.blog.naver.com/widework2/221991484104]

 

block 0은 read only로 되어서 출고되는 일반 카드와

read / write가 가능하게 출고되는 CUID 카드로 구분되는 것으로 보인다.

 

시험삼아 해보니 집 대문의 삼성 꺼는 block 10이 읽을수 없는 것으로 되어있고

그래서 std.keys 가 아닌 extended-std.keys 로 읽으면 읽히지 않는다(혹은 타임아웃이 엄청 길거나?)

단순하게 rfid 카드 인증에 UID 만으로 보는게 아니라 block 내의 값 일치 여부도 보는 듯하다.

 

'하드웨어 > rfid_nfc_smartcard' 카테고리의 다른 글

mifare classic 1k 구조  (0) 2026.07.15
CUID 복제 안되는 rfid 카드 -_ㅠ  (0) 2025.12.03
libpcsclite on cpp  (0) 2025.03.18
NDEF 데이터 읽기  (0) 2025.03.17
ntag 213, 215 그리고 13.25MHz CUID 카드  (0) 2025.03.17
Posted by 구차니

음.. 흐음...

char *의 포인터를 넘겨줘야 하는데 에러가 난다 머지?

char *mszReaders = NULL;
DWORD dwReaderLen = SCARD_AUTOALLOCATE;
rv = SCardListReaders(hContext, (LPCSTR)NULL, &mszReaders, &dwReaderLen);

 

그래서 강제로 하면 이렇게 에러가 나는데

error: cannot convert ‘char**’ to ‘LPSTR’ {aka ‘char*’}
  103 |     rv = SCardListReaders(hContext, (LPCSTR)NULL, &mszReaders, &dwReaderLen);
      |                                                   ^~~~~~~~~~~
      |                                                   |
      |                                                   char**

 

아래처럼 변수를 미리 선언해서 자동할당 하지 않게 하거나

char mszReaders[255];
DWORD dwReaderLen = sizeof(mszReaders); // SCARD_AUTOALLOCATE;
rv = SCardListReaders(hContext, (LPCSTR)NULL, mszReaders, &dwReaderLen);

 

아래 처럼 강제 형변환을 해주어서 2중 포인터가 아닌 것으로 속여주면 된다.

char *mszReaders = NULL;
DWORD dwReaderLen = SCARD_AUTOALLOCATE;
rv = SCardListReaders(hContext, NULL, (char*)&mszReaders, &dwReaderLen);

 

해결은 되었는데 해결책 같은 느낌이 하나도 안드네..

Posted by 구차니

claude로 찾아낸 APDU

 

NDEF application을 선택하고 (고정)

파일을 선택하고 (고정)

파일의 길이를 읽고(고정, 리턴 short)

파일을 읽는다(오프셋short + 길이byte)

읽을때는 읽는 길이 + 2 만큼의 버퍼가 필요하다 (끝의 확인 90 00 때문에)

 

BYTE selectNDEF[] = {0x00, 0xA4, 0x04, 0x00, 0x07, 0xD2, 0x76, 0x00, 0x00, 0x85, 0x01, 0x01, 0x00};
BYTE selectFILE[] = {0x00, 0xA4, 0x00, 0x0C, 0x02, 0xE1, 0x04};
BYTE lengthNDEF[] = {0x00, 0xB0, 0x00, 0x00, 0x02};
BYTE readNDEF[] = {0x00, 0xB0, 오프셋HIGH, 오프셋LOW, 길이BYTE}

 

'하드웨어 > rfid_nfc_smartcard' 카테고리의 다른 글

출입카드 복제 (CUID)  (0) 2025.03.20
libpcsclite on cpp  (0) 2025.03.18
ntag 213, 215 그리고 13.25MHz CUID 카드  (0) 2025.03.17
SCardListReadersA 함수(winscard.h)  (0) 2025.03.17
NTAG  (0) 2025.03.12
Posted by 구차니

NTAG213 / 215는 ATR이 동일하다.

213 쪽은 ic type이 안뜨는 대신 제조사가 뜨네..?

EXTRA에서 213은 Version information이 안뜨다니..

 


NTAG 213

Mon Mar 17 13:59:48 2025
 Reader 0: ACS ACR1252 Dual Reader [ACR1252 Dual Reader PICC] 00 00
  Event number: 5
  Card state: Card inserted, 
  ATR: 3B 8F 80 01 80 4F 0C A0 00 00 03 06 03 00 03 00 00 00 00 68

ATR: 3B 8F 80 01 80 4F 0C A0 00 00 03 06 03 00 03 00 00 00 00 68
+ TS = 3B --> Direct Convention
+ T0 = 8F, Y(1): 1000, K: 15 (historical bytes)
  TD(1) = 80 --> Y(i+1) = 1000, Protocol T = 0 
-----
  TD(2) = 01 --> Y(i+1) = 0000, Protocol T = 1 
-----
+ Historical bytes: 80 4F 0C A0 00 00 03 06 03 00 03 00 00 00 00
  Category indicator byte: 80 (compact TLV data object)
    Tag: 4, len: F (initial access data)
      Initial access data: 0C A0 00 00 03 06 03 00 03 00 00 00 00
+ TCK = 68 (correct checksum)

Possibly identified card (using /usr/share/pcsc/smartcard_list.txt):
3B 8F 80 01 80 4F 0C A0 00 00 03 06 03 00 03 00 00 00 00 68
3B 8F 80 01 80 4F 0C A0 00 00 03 06 .. 00 03 00 00 00 00 ..
MIFARE Ultralight (as per PCSC std part3)
3B 8F 80 01 80 4F 0C A0 00 00 03 06 03 00 03 00 00 00 00 68
3B 8F 80 01 80 4F 0C A0 00 00 03 06 03 .. .. 00 00 00 00 ..
RFID - ISO 14443 Type A Part 3 (as per PCSC std part3)
3B 8F 80 01 80 4F 0C A0 00 00 03 06 03 00 03 00 00 00 00 68
RFID - ISO 14443 Type A - NXP Mifare Ultralight or UltralightC
   
Mon Mar 17 13:59:49 2025
 Reader 0: ACS ACR1252 Dual Reader [ACR1252 Dual Reader PICC] 00 00
  Event number: 6
  Card state: Card removed, 

 

NTAG 215

Mon Mar 17 14:00:34 2025
 Reader 0: ACS ACR1252 Dual Reader [ACR1252 Dual Reader PICC] 00 00
  Event number: 7
  Card state: Card inserted, 
  ATR: 3B 8F 80 01 80 4F 0C A0 00 00 03 06 03 00 03 00 00 00 00 68

ATR: 3B 8F 80 01 80 4F 0C A0 00 00 03 06 03 00 03 00 00 00 00 68
+ TS = 3B --> Direct Convention
+ T0 = 8F, Y(1): 1000, K: 15 (historical bytes)
  TD(1) = 80 --> Y(i+1) = 1000, Protocol T = 0 
-----
  TD(2) = 01 --> Y(i+1) = 0000, Protocol T = 1 
-----
+ Historical bytes: 80 4F 0C A0 00 00 03 06 03 00 03 00 00 00 00
  Category indicator byte: 80 (compact TLV data object)
    Tag: 4, len: F (initial access data)
      Initial access data: 0C A0 00 00 03 06 03 00 03 00 00 00 00
+ TCK = 68 (correct checksum)

Possibly identified card (using /usr/share/pcsc/smartcard_list.txt):
3B 8F 80 01 80 4F 0C A0 00 00 03 06 03 00 03 00 00 00 00 68
3B 8F 80 01 80 4F 0C A0 00 00 03 06 .. 00 03 00 00 00 00 ..
MIFARE Ultralight (as per PCSC std part3)
3B 8F 80 01 80 4F 0C A0 00 00 03 06 03 00 03 00 00 00 00 68
3B 8F 80 01 80 4F 0C A0 00 00 03 06 03 .. .. 00 00 00 00 ..
RFID - ISO 14443 Type A Part 3 (as per PCSC std part3)
3B 8F 80 01 80 4F 0C A0 00 00 03 06 03 00 03 00 00 00 00 68
RFID - ISO 14443 Type A - NXP Mifare Ultralight or UltralightC
   
Mon Mar 17 14:00:35 2025
 Reader 0: ACS ACR1252 Dual Reader [ACR1252 Dual Reader PICC] 00 00
  Event number: 8
  Card state: Card removed, 

 

13.56MHz CUID 카드

Mon Mar 17 14:01:11 2025
 Reader 0: ACS ACR1252 Dual Reader [ACR1252 Dual Reader PICC] 00 00
  Event number: 9
  Card state: Card inserted, 
  ATR: 3B 8F 80 01 80 4F 0C A0 00 00 03 06 03 00 01 00 00 00 00 6A

ATR: 3B 8F 80 01 80 4F 0C A0 00 00 03 06 03 00 01 00 00 00 00 6A
+ TS = 3B --> Direct Convention
+ T0 = 8F, Y(1): 1000, K: 15 (historical bytes)
  TD(1) = 80 --> Y(i+1) = 1000, Protocol T = 0 
-----
  TD(2) = 01 --> Y(i+1) = 0000, Protocol T = 1 
-----
+ Historical bytes: 80 4F 0C A0 00 00 03 06 03 00 01 00 00 00 00
  Category indicator byte: 80 (compact TLV data object)
    Tag: 4, len: F (initial access data)
      Initial access data: 0C A0 00 00 03 06 03 00 01 00 00 00 00
+ TCK = 6A (correct checksum)

Possibly identified card (using /usr/share/pcsc/smartcard_list.txt):
3B 8F 80 01 80 4F 0C A0 00 00 03 06 03 00 01 00 00 00 00 6A
3B 8F 80 01 80 4F 0C A0 00 00 03 06 .. 00 01 00 00 00 00 ..
MIFARE Classic 1K (as per PCSC std part3)
3B 8F 80 01 80 4F 0C A0 00 00 03 06 03 00 01 00 00 00 00 6A
3B 8F 80 01 80 4F 0C A0 00 00 03 06 03 .. .. 00 00 00 00 ..
RFID - ISO 14443 Type A Part 3 (as per PCSC std part3)
3B 8F 80 01 80 4F 0C A0 00 00 03 06 03 00 01 00 00 00 00 6A
NXP/Philips MIFARE Classic 1K (as per PCSC std part3)
http://www.nxp.com/#/pip/pip=[pfp=41863]|pp=[t=pfp,i=41863]
Oyster card - Transport for London (first-gen)
https://en.wikipedia.org/wiki/Oyster_card
ACOS5/1k Mirfare
vivotech ViVOcard Contactless Test Card
Bangkok BTS Sky SmartPass
Mifare Classic 1K (block 0 re-writeable)
Electic vehicle charging card of the German Telekom, acting as EMSP GetCharge
Electic vehicle charging card of the EMSP Stadtwerke Muenchen (SWM), ladenetz.de, Germany
Electic vehicle charging card of the EMSP EinfachStromLaden of Maingau-Energie, Germany
Scouter carsharing customer card in Germany
https://scouter.de/
   
Mon Mar 17 14:01:11 2025
 Reader 0: ACS ACR1252 Dual Reader [ACR1252 Dual Reader PICC] 00 00
  Event number: 10
  Card state: Card removed,

'하드웨어 > rfid_nfc_smartcard' 카테고리의 다른 글

libpcsclite on cpp  (0) 2025.03.18
NDEF 데이터 읽기  (0) 2025.03.17
SCardListReadersA 함수(winscard.h)  (0) 2025.03.17
NTAG  (0) 2025.03.12
NDEF 읽기  (0) 2025.03.11
Posted by 구차니