Emuluj kartę Mifare z Androidem 4.4

Zbadałem Mifare i inne emulacji kart mam bardzo dobrą wiedzę w programowaniu (Nie Android, ale C / C++). Mam proxmark i zrobiłem wiele kodów emulacji dla proxmarka, więc wiem, jak karty się komunikują.

Nie rozumiem obecnie, czy android umożliwia pełną emulację kart. Badałem to przez około 3 dni, a wniosek jest taki, że nie ma jednego stałego wzorca. Niektórzy mówią, że to możliwe, inni, że nie. Przeglądałem android API a emulacja kart oparta na serwerze wydaje się być w stanie to zrobić, ale jak rozumiem jest to nowość w 4.4 Kitkat, czy ktoś ma z tym jakieś doświadczenie?

Aby wszystko było proste, obecnie badam najprostszą emulację Mifare Ultralight. Ta karta to koszmar bezpieczeństwa, nie ma szyfrowania i robi tylko około 10 funkcji. Jestem więc zainteresowany rozpoczęciem badań z tą kartą, ponieważ jest najłatwiejsza do odtworzenia.

Tak jak każdy posiadasz wiedzę na temat emulacji kart na Androida. Może nie używam systemu operacyjnego. Każda rzecz, o której warto wiedzieć, będzie bardzo doceniana.

Dzięki.
Author: Michael Roland, 2013-11-18

4 answers

Z emulacją kart hosta (HCE) w Androidzie 4.4 można emulować tylko protokół ISO / IEC 14443-4. Dokładniej mówiąc, można emulować tylko struktury aplikacji zgodnie z ISO / IEC 7816-4 (dlatego aplikacje emulacji kart muszą być wybrane za pomocą pomocy). Co więcej, API nie daje żadnych środków, aby określić, czy emulacja kart powinna być wykonywana przy użyciu protokołu typu A lub typu B.

Tak więc odnośnie emulacji różnych protokołów MIFARE:

  • MIFARE Protokół Ultralight (i pochodne) działa na podstawie ISO / IEC 14443-3. Nie jest możliwe emulowanie kart przy użyciu protokołów niskowarstwowych przy użyciu systemu Android HCE.
  • protokół Mifare Classic działa częściowo w oparciu o ISO/IEC 14443-3 (z nieco inną ramką). Tak więc, jego również nie można emulować Mifare Classic za pomocą Android HCE.
  • protokoły Mifare DESFire działają na podstawie ISO/IEC 14443-4. Istnieją trzy warianty DESFire "protokół": {]}

    1. natywny protokół: ponieważ protokół ten nie używa APDU zgodnie z ISO/IEC 7816-4, nie można go emulować przy użyciu systemu Android HCE.
    2. owinięty protokół natywny : protokół ten używa APDUs zgodnie z ISO/IEC 7816-4, jednak czytniki zazwyczaj nie wydają polecenia SELECT przy użyciu pomocy DESFire, gdy zaczynają komunikować się z kartą w zawiniętym trybie natywnym. (Uwaga: nowsze implementacje czytnika są bardziej prawdopodobne, aby wydać SELECT polecenie kompatybilne z Androidem HCE, ponieważ jest również wymagane dla niektórych nowszych produktów NXP smartcard z emulacją protokołu DESFire.)
    3. protokół ISO: protokół ten jest oparty na normie ISO/IEC 7816-4 i wykorzystuje selekcję aplikacji za pomocą pomocy. W ten sposób możliwe jest emulowanie tego protokołu przy użyciu systemu Android HCE.

    Niektóre czytniki mogą wymagać pewnych wartości parametrów w niższych warstwach protokołu (takich jak określony poziom kaskady UID, pewien ATQA value, a certain SAK value, or a certain ATS). Android HCE nie ma żadnych środków, aby ustawić te wartości. Zobacz edytowanie funkcji emulacji karty hosta w Androidzie dla możliwego podejścia do modyfikowania tych wartości na niektórych urządzeniach zakorzenionych i moja odpowiedź na emulację karty hosta ze stałym identyfikatorem karty dla strategii programowej zmiany tych wartości w niestandardowej pamięci ROM.

Uwaga na temat funkcji HCE dostępnej w CyanogenMod od wersji 9.1 do Wersja 10.2 : będzie to emulować dowolny protokół oparty na ISO / IEC 14443-4 bez wymogu struktury aplikacji zgodnie z ISO / IEC 7816-4. Możesz nawet wybrać, czy chcesz emulować protokół typu A lub typu B. Powinno być więc możliwe (choć nie testowałem) emulowanie dowolnego z trzech protokołów DESFire. Jednak nawet z funkcją HCE CyanogenMod nie jest możliwe emulowanie ultralekkich lub klasycznych protokołów Mifare. Co więcej, nie można również wpływać na niski poziom parametry protokołu takie jak UID, ATQA, SAK lub ATS.

 50
Author: Michael Roland,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2017-05-23 12:17:55

Spędziłem tygodnie badając ten temat rok temu i mój wniosek oparty na bieżącej realizacji był: Emulacja Mifare Classic jest możliwa, ale tylko poprzez wbudowany bezpieczny Element, element ten jest osadzony w chipie NXP NFC (układ PN65 wbudowany na przykład w Samsung I9300).

Udało mi się w pełni emulować kartę Mifare Classic przy użyciu ukrytych funkcji w bibliotece android_external_libnfc-NXP. Chociaż mogłem tylko odczytać kartę i żeby była przydatne potrzebujesz dostępu do bezpiecznego elementu, gdzie aplet przez NXP istnieje w większości przypadków, ten aplet serwery jako front-end do zarządzania emulowanych kart.

Dobrym sposobem na kontynuowanie tego wyszukiwania byłaby inżynieria odwrotna aplikacji Portfela Google.

 16
Author: Simplect,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2014-01-09 12:33:05

Ultralekki chip Mifare MF0ICU1 (16 stron x 4 bajty każdy) jest rzeczywiście koszmarem, ale nie może być emulowany na żadnych interfejsach NXP, w tym PN53x, ponieważ najpierw UID bajt (UID0) na 0x08, więc oznacza to, że znacznik ma losowy UID (zgodnie ze standardami NXP). Musisz UID0 = 0x04 emulować Mifare Ultralight.

Istniejesamodzielny emulator Mifare Ultralight , który pozwala na dowolną wartość dla UID0, ma resetowalne bity OTP, lock i block-locking. Zobacz też Instrukcja obsługi, aby uzyskać więcej informacji.

 4
Author: nCipher,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2014-11-04 18:19:07

Krótka odpowiedź brzmi tak . Zależy jednak od wielu czynników, takich jak wersja Androida, chip NFC telefonu itp.

Aby dowiedzieć się, czy Twoje urządzenie obsługuje go po prostu pobierz jakąś aplikację, taką jak "NFC Check" przez Tapkey, a poinformuje cię, czy Obsługiwane są Mifare Classic i Mifare Ultralight. Jest też lista aktualna, ale najwyraźniej może być jakaś niedopasowanie: https://www.shopnfc.com/en/content/7-nfc-compatibility

Teraz pytanie brzmi "jak". Mam nie znaleziono jeszcze aplikacji, która używałaby emulacji kart opartych na nowym systemie Android ( HCE) w tym celu (zobacz tutaj): Jak Dobrze Android NFC API obsługuje Mifare Desfire?

W rzeczywistości ostatnio MiFare zasugerował, aby zamiast tego użyć metody "secure element": https://www.mifare.net/support/forum/topic/emulate-mifare-classic-1k/

Wracając do pytania ultralekkiego, główną trudnością jest to, że Android API definiuje jako - dzisiaj wysyłanie losowy UID przy każdym dotknięciu, zgodnie z sugestią poprzedniego użytkownika nCypher: https://developer.android.com/guide/topics/connectivity/nfc/hce

Jako alternatywny dostęp do roota (lub niestandardowe ROMy cyanogen) może pomóc zmodyfikować UID, jak w tym przykładzie: http://osgt7405i.bkt.clouddn.com/help/en/index.html?t=1536931682474

Jednak najnowszy Android API odnosi się bezpośrednio do ultralekkiego obiektu: https://developer.android.com/reference/android/nfc/tech/MifareUltralight

Znam kilka firm, które emulują to przez sim storage. Za używanie telefonu jako karty RFID tych typów MIFARE, MiFare stworzyło już jedno rozwiązanie, w którym firmy mogą ładować karty w chmurze https://www.mifare4mobile.org / powiązane z ich kartą SIM. Istnieje lista oficjalnie certyfikowanych układów NFC, które działają, większość z nich NPX, które są szeroko zawarte w smartfony.

Jednak ich rozwiązaniem jest SDK API (mianowicie TapLinx). Nie ma czystego oprogramowania od NXP dostępnego jak każde oprogramowanie do emulacji telefonu lub rozwiązanie bazowe w chmurze.

Co więcej, forum MiFare mówi o tym: https://www.mifare.net/support/forum/topic/creating-nfc-android-app-to-act-as-mifare-card-to-interact-with-mifare-readers/

 0
Author: JCM,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2018-09-18 16:53:40