簡體   English   中英

具有固定UID的Android NFC卡仿真

[英]Android NFC Card emulation with fixed UID

我從AOSP下載了NFC部件,我正在尋找Android使用的方法來生成卡仿真使用的隨機UID。 我的目標是在每次與目標進行通信時修復UID而不是使用不同的UID。 我在“libnfc-nci”模塊中找到了包含以下內容的文件“nfa_ce_act.c”:

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);
}

此方法為FeliCa標記生成UID。 我無法找到ISO14443卡(MIFARE)的卡,它默認生成一個以0x08開頭的UID。 根據Martijn Coenen的說法,正如他在G + Post中所解釋的那樣,這是可能的。

對不起,我意識到很多人都想要這個,但在正式版中是不可能的。 (你當然可以通過一些AOSP黑客來做)。 原因是HCE是圍繞后台操作設計的。 如果我們允許應用程序設置UID,則每個應用程序都可能想要設置自己的UID,並且無法解決沖突。 我們希望通過HCE,NFC基礎設施將轉移到更高級別的協議棧進行身份驗證,而不是依賴於UID(無論如何都很容易克隆)。 https://plus.google.com/+MartijnCoenen/posts/iX6LLoQmZLZ

有誰知道如何實現它?

謝謝

需要知道的一件重要事情是UID轉換到nfc協議的非常低的水平。 這意味着它由nfc固件獨立完成,而不是在Android操作系統中完成。 我們在NFCGate項目中遇到了同樣的問題,並通過將UID與NFC_SetConfig直接寫入芯片固件,找到了與Nexus4 / 5和其他芯片類似的Broadcom BCM20793芯片的解決方案。

您可以在github上的我們的存儲庫中看到一個可用的版本。 這是一個未經測試的版本,以顯示原理:

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);

我們的測試顯示android有時會將UID設置為隨機(如果我沒記錯的話,長度= 0),所以你需要找到一個好的地方來設置它,當你需要它或做類似我們做的事情並攔截來自android的NFC_SetConfig調用重新設置我們自己的UID。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM