2014-11-10 16 views
5

Tôi đã tải xuống các phần NFC từ AOSP và tôi đang tìm phương pháp được Android sử dụng để tạo UID ngẫu nhiên được sử dụng bằng mô phỏng thẻ. Mục tiêu của tôi là sửa UID thay vì có một cái khác nhau mỗi lần có một giao tiếp với mục tiêu. Tôi tìm thấy bên trong mô-đun "libnfc-nci" tệp "nfa_ce_act.c" chứa tệp này:Giả lập thẻ NFC Android với UID cố định

void nfa_ce_t3t_generate_rand_nfcid (UINT8 nfcid2[NCI_RF_F_UID_LEN]) 
{ 
UINT32 rand_seed = GKI_get_tick_count(); 

/* For Type-3 tag, nfcid2 starts witn 02:fe */ 
nfcid2[0] = 0x02; 
nfcid2[1] = 0xFE; 

/* The remaining 6 bytes are random */ 
nfcid2[2] = (UINT8) (rand_seed & 0xFF); 
nfcid2[3] = (UINT8) (rand_seed>>8 & 0xFF); 
rand_seed>>=(rand_seed&3); 
nfcid2[4] = (UINT8) (rand_seed & 0xFF); 
nfcid2[5] = (UINT8) (rand_seed>>8 & 0xFF); 
rand_seed>>=(rand_seed&3); 
nfcid2[6] = (UINT8) (rand_seed & 0xFF); 
nfcid2[7] = (UINT8) (rand_seed>>8 & 0xFF); 
} 

Phương thức này tạo UID cho thẻ FeliCa. Tôi không thể tìm thấy một cho thẻ ISO14443 (MIFARE) mà tạo ra một khởi đầu UID với 0x08 theo mặc định. Theo Martijn Coenen, như được giải thích trong G + Post của mình, đó là điều có thể xảy ra.

Xin lỗi, tôi nhận thấy nhiều người muốn điều này, nhưng không thể có trong phiên bản chính thức. (Bạn có thể làm điều đó với một số hack AOSP). Lý do là HCE được thiết kế xung quanh hoạt động nền. Nếu chúng tôi cho phép ứng dụng đặt UID, mọi ứng dụng có thể muốn đặt UID của riêng họ và không có cách nào để giải quyết xung đột. Chúng tôi hy vọng rằng với HCE, cơ sở hạ tầng NFC sẽ chuyển sang các cấp cao hơn của ngăn xếp giao thức để thực hiện xác thực thay vì dựa vào UID (dù sao cũng dễ dàng sao chép). https://plus.google.com/+MartijnCoenen/posts/iX6LLoQmZLZ

Có ai biết cách đạt được điều đó không?

Cảm ơn

+0

Tìm thấy bất kỳ giải pháp nào cho đến nay? –

Trả lời

2

Điều quan trọng cần biết là UID được chuyển ở cấp độ rất thấp của giao thức nfc. Điều này có nghĩa rằng nó được thực hiện độc lập bởi firmware nfc và không nằm trong hệ điều hành android. Chúng tôi đã gặp vấn đề tương tự trong dự án NFCGate của chúng tôi và tìm ra giải pháp cho chip Broadcom BCM20793 như chip trong Nexus4/5 và các thiết bị khác bằng cách viết UID với NFC_SetConfig trực tiếp vào phần mềm chip.

Bạn có thể xem phiên bản hoạt động in our repository on github. Đây là một phiên bản không phải thử nghiệm để hiển thị theo nguyên tắc:

uint8_t cfg[] = { 
    CFG_TYPE_UID, // config type 
    3,   // uid length 
    0x0A,   // uid byte 1 
    0x0B,   // uid byte 2 
    0x0C   // uid byte 3 
}; 
NFC_SetConfig(sizeof(cfg), cfg); 

kiểm tra của chúng tôi cho thấy rằng android đôi khi đặt UID trở lại ngẫu nhiên (chiều dài = 0 nếu tôi nhớ chính xác), vì vậy bạn cần phải tìm một nơi tốt để thiết lập nó khi bạn cần nó hoặc làm một cái gì đó tương tự như chúng tôi đã làm và đánh chặn các cuộc gọi NFC_SetConfig từ Android để thiết lập lại UID của chúng ta.

Các vấn đề liên quan