2014-11-10 23 views
5

NFC parçalarını AOSP'den indirdim ve Android tarafından kullanılan ve kart emülasyonu tarafından kullanılan rastgele UID'yi oluşturmak için kullanılan yöntemi arıyorum. Amacım, hedefle bir iletişim olduğunda her zaman başka bir tanesine sahip olmak yerine UID'yi düzeltmektir.Android NFC Kart öykünmesi sabit UID

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

Bu yöntem FeliCa etiketleri için bir UID oluşturmak: Bu içeren dosya "nfa_ce_act.c" modülü "-nci libnfc" içeride buldum. Varsayılan olarak 0x08 ile başlayan bir UID oluşturan ISO14443 kartları (MIFARE) için bulamıyorum. Martijn Coenen'e göre, G + Postasında açıklandığı gibi, bu bir şey olabilir.

Üzgünüm, birçok kişi bu istediğini fark, ancak resmi sürümünde mümkün değildir. (Tabii ki bazı AOSP korsanlığı ile yapabilirsiniz). Bunun nedeni, HCE'nin arka plan çalışması etrafında tasarlanmasıdır. Uygulamaların UID'yi ayarlamasına izin verirsek, her uygulama muhtemelen kendi UID'lerini ayarlamak ister ve çakışmayı çözmenin bir yolu yoktur. Umuyoruz ki, HCE ile NFC altyapısı, UID'ye güvenmek yerine (ki bu zaten kolayca klonlanmış) yerine, kimlik doğrulaması yapmak için protokol yığınının daha yüksek seviyelerine geçecektir. https://plus.google.com/+MartijnCoenen/posts/iX6LLoQmZLZ

herkes bunu başarmak için nasıl biliyor mu?

Teşekkür

+0

Şimdiye kadar herhangi bir çözüm buldunuz mu? –

cevap

2

biri bilmek önemli şey UID nfc protokolün çok düşük seviyede transfer olmasıdır. Bu, android işletim sisteminde değil, nfc firmware tarafından bağımsız olarak yapıldığı anlamına gelir. NFCGate projemizde de aynı sorunla karşılaştık ve Nexus4/5'teki gibi Broadcom BCM20793 çipleri ve UID ile NFC_SetConfig'i doğrudan çip bellenimi üzerine yazarak bir çözüm bulduk.

Çalışan bir sürümü in our repository on github görebilirsiniz. Eğer iyi bir yer bulmalıyız böylece

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

Testlerimiz android bazen rasgele (eğer doğru geri çağırmak uzunluğu = 0) geri UID ayarlar ortaya koydu: İşte ilkesini göstermek için olmayan bir test versiyonu İhtiyacınız olduğunda ayarlayın veya yaptığımıza benzer bir şey yapın ve kendi UID'yi yeniden ayarlamak için NFC_SetConfig çağrılarını durdurun.

İlgili konular