Protocoder – schnell mal eine Android App coden

Protocoder IDE
Protocoder IDE

Protocoder ist eine App, welche mich seit langem mal wieder sehr fasziniert hat. Der Name sagt schon alles über sie aus: Proto(type)coder. Denn genau dazu ist sie da: um sehr einfache Prototypen zu erstellen. Hierzu bringt die App ein völlig neues Konzept mit: eine IDE, welche direkt über den Browser eines PCs zu erreichen ist. Dazu wird nach App-Start ein Webserver auf Port 8585 bereitgestellt. Alternativ kann das Gerät auch per USB an einen PC angeschlossen und die Verbindung (mit dem adb Tool aus dem Android SDK) getunnelt werden:

$ ./adb forward tcp:8585 tcp:8585
$ ./adb forward tcp:8587 tcp:8587

Somit ist die IDE auch ohne Wifi via lokalem Webserver unter http://localhost:8585/ erreichbar.

Funktionsumfang

Nach dem Start der App können sofort die mitgelieferten Beispiele gestartet werden und man versteht recht schnell welchen Funktionsumfang die App in etwa bietet:

Screenshot Protocoder Examples  Protocoder MyProjects
Version 0.8 kommt mit folgenden Beispielen:

  • AccelerometerPlots (Beschleunigungssensorgrafisch darstellen)
  • Camera (Bild mit der Kamera aufnehmen und abspeichern)
  • Canvas (Kreise auf einen Canvas anhand von Beschleunigungssendordaten malen)
  • Dashboard (Plots auf dem Dashboard anzeigen)
  • FileIO (Daten in Datei schreiben)
  • GPS (Positionsdaten ausgeben)
  • KeyEvents (
  • NFC (NFC Tag lesen, bzw beschreiben)
  • OSC (OSC networking protocol Beispiel)
  • OpenStreetMaps (Teil der OpenStreetMaps anzeigen)
  • PureData (PureData Patch ausführen)
  • Sensors (Sensordaten anzeigen)
  • Sound (OGG-Datei sbspielen)
  • TextToSpeech (Text per Sprache ausgeben)
  • UBoard_IOIO (Ansteuerung des IOIO-Boards)
  • UBoard_MAKR (Ansteuerung des MAKR Boards)
  • UI (Bedienelemente anzeigen)
  • Video (m4v-Video abspielen)
  • VoiceRecognition (Spracherkennung und anschliessende Ausgabe)
  • Webview (HTML-Anzeige)
  • timer (wiederkehrende Funktionsaufrufe mit Timer)

Java/Android API via Javascript

Codiert werden die Prototypen in JavaScript, das zur Laufzeit interpretiert wird. Hierfür wird die Android API für einfache Funktionsaufrufe gewrappt.
Ein Beispiel: mit folgendem Skript wird ein NFC-Tag ausgelesen, bzw bei Betätigen des Knopfes beschrieben.

var nfcinfo = ui.addLabel("tap to get NFC id and content", 20, 20, 500, 100);

//when tapping on a nfc the id and content will be displayed
//on the label
sensors.onNFC(function (id, data) {
console.log(„the nfc id is: “ + id, data);
nfcinfo.setHTMLText(„id: “ + id + “
data: “ + data);
});

//when we click
//the next touched nfc will be written with the data
ui.addButton(„Write to NFC“, 0, 200, 500, 100, function(){
sensors.writeNFC(„this is a test“, function() {
nfcinfo.setText(„data written“);
});
});

Abzüge in der B-Note

Der API-Funktionsumfang ist zZt noch recht überschaubar. Viele Funktionen habe ich vermisst bzw sind noch in der Entwicklung. Wenn irgendwelche Android-API Klassen fehlen muss man sich die App wohl selber erweitern und kompilieren.
Eine typische Schwachstelle bei der App ist – wie bei vielen kostenlosen Programmen – die fehlende Doku. Wäre sie in ausreichender Form vorhanden hätte man innerhalb von Minuten den ersten Prototypen fertig gestellt.
Und ja, Protocoder ist noch nicht ganz fertig / Bug-frei: Protocoder_Crash

Weitere Infos

Werbeanzeigen

List of HCE (Host Card Emulation) Apps

host-based-card
I like lists and I like NFC therefore here comes a list of Android apps that emulate contactless smartcards on an Android Phone >=4.4 with HCE (Host-based Card Emulation):

Update: 2018-07-13
WeChat
* AID ??? (MicroMsg.HCEService ?)
* Play Store https://play.google.com/store/apps/details?id=com.tencent.mm

Update: 2018-07-05
SALTO JustIN Mobile
* AID A000000743CC843413925E20C59B0100
* https://play.google.com/store/apps/details?id=com.saltosystems.justin
* SALTO JustIN Mobile Zutrittskontrolle für elektronische Zylinder (Mifare DESFire EV1-Karte mit AES-128-Bit-Verschlüsselung

Google Pay
* AID 4F53452E5641532E3031 (‚OSE.VAS.01‘), A000000476D0000101, A000000476D0000111, A00000039656434103F1216000000000 (NXP MIFARE 2GO?)
* Google Pay App  com.google.android.apps.walletnfcrel

Fidor Pay
* AID 325041592E5359532E4444463031 (PPSE ‚2PAY.SYS.DDF01‘), A0000000041010 (MasterCard), A0000000042203 (MasterCard U.S. Maestro), A0000000043060 (Mastercard Maestro Debit)
* Fidor Smart Banking App https://play.google.com/store/apps/details?id=com.fidor.fsw

Sparkasse – digitale Geldbörse
* AID 325041592E5359532E4444463031 (PPSE), A0000000041010 (Mastercard), A0000000043060 (Mastercard), A00000002501 (Amex), A000000025011001 (Amex), A0000000031010 (Visa), A00000005945430100 (girocard), A0000003591010028001 (girocard), D27600002547410100 (girocard), A00000052445500100 (rupay), A0000005241010 (rupay)
* Mobiles Bezahlen App https://play.google.com/store/apps/details?id=com.s_payment.mobiles_bezahlen

VR Banking
* AID 325041592E5359532E4444463031 (PPSE), D27600002547410100 (girocard_atm), A0000003591010028001 (girocard_eaps), A0000000041010 (Mastercard), A0000000031010 (Visa)
* Digitale Karten App https://play.google.com/store/apps/details?id=de.fiduciagad.android.vrwallet

Update: 2017-06-12
Backwerk
* AID A0000007220001
* https://play.google.com/store/apps/details?id=de.backwerk.app
* Backwerk Kundenkarte https://www.back-werk.de/kundenkarte/

Nordsee
* AID A0000007220000
* https://play.google.com/store/apps/details?id=com.nordsee.de.app
* Nordsee Gutscheinkarte http://www.nordsee.com/de/gutscheinkarte.html

Host-based Card Emulation
* Android API Guide https://developer.android.com/guide/topics/connectivity/nfc/hce.html

Android Host-based Card Emulation connected to ACR122U
* AID F0010203040506, F0394148148100
* Blog http://blog.opendatalab.de/hack/2013/11/07/android-host-card-emulation-with-acr122/
* Source Code https://github.com/grundid/host-card-emulation-sample

SEQR/Glase
* AIDs A0000000041010 (MasterCard), A0000000043060 (Mastercard Maestro Debit)
* App https://play.google.com/store/apps/details?id=com.seamless.seqr

boon
* AIDs A0000000041010 (MasterCard), A0000000043060 (Mastercard Maestro Debit)
* App https://play.google.com/store/apps/details?id=de.wirecard.boon

Shakepay
* AIDs A0000000031010 (Visa)
* App https://play.google.com/store/apps/details?id=com.shakepay.shake

tap-it
* AIDs F0394148148100
* App https://play.google.com/store/apps/details?id=ch.sandpiper.mwallet.tap_it

ByblosPay
* AIDs A0000000041010 (MasterCard), A0000000031010 (Visa International), A0000000980840 (Visa US Common Debit), F101010101
* App https://play.google.com/store/apps/details?id=mobi.foo.byblospay

PeoPay
* AIDs A0000006181010 (???), A0000000031010 (Visa), A0000000041010 (MasterCard)
* App https://play.google.com/store/apps/details?id=softax.pekao.powerpay

Payback
* AIDs D2760001670001 (PAYBACKPAY), D2760001670002 (PAYBACKCOLLECT), D2760001670003 (PBPAYCOLLECT)
* App https://play.google.com/store/apps/details?id=de.payback.client.android

ING Mobile Payments
* AIDs A0000000043060 (Mastercard Maestro Debit)
* App https://play.google.com/store/apps/details?id=com.ing.mobilepayments

MobilePay
* AIDs A0000000031010 (Visa), A0000000032010 (VISA Electron Debit)
* App https://play.google.com/store/apps/details?id=sk.tb.mp.tatraandroid

NAB (National Australia Bank)
* AIDs A0000000031010 (Visa), A0000000980840 (Visa US Common Debit)
* App https://play.google.com/store/apps/details?id=au.com.nab.mobile

La tua banca per Android
* AIDs A0000000041010 (MasterCard), A0000000032010 (VISA Electron Debit), A0000000031010 (Visa)
* App https://play.google.com/store/apps/details?id=com.latuabancaperandroid

Virtual PKI Smart Card
* AID A0000000010101
* Blog http://nelenkov.blogspot.de/2012/10/emulating-pki-smart-card-with-cm91.html
* Source Code https://github.com/nelenkov/virtual-pki-card/tree/master/hce-pki

SwipeYours
* AID A0000000031010 (Visa)
* Blog http://blog.simplytapp.com/2014/01/host-card-emulation-series-swipeyours.html
* App Download https://play.google.com/store/apps/details?id=to.noc.android.swipeyours
* Source Code https://github.com/dimalinux/SwipeYours
* also available as JavaCard Applet https://github.com/SimplyTapp/CardExamples/tree/master/CardApplet-VisaMSD-SwipeYours

TechBooster / C85-Android-4.4-Sample: NdefCard
* AID D2760000850101 (NXP Semiconductors, NDEF Tag Application V2.0)
* Source Code https://github.com/TechBooster/C85-Android-4.4-Sample/tree/master/chapter08

Google Wallet
* AID F0F00777FF5511
* App https://play.google.com/store/apps/details?id=com.google.android.apps.walletnfcrel

Tapp
* AID A0000000041010 (MasterCard), A0000000031010 (Visa), A0000002771010 (Interac)
* App https://play.google.com/store/apps/details?id=com.tapp
* SimplyTapp https://www.simplytapp.com/

Mobile Bitcoin Payment Solution
* AID F0F00777FF5511
* Mensa an Uni Züri akzeptiert Bitcoins http://www.netzwoche.ch/de-CH/News/2014/02/12/Mensa-an-Uni-Zueri-akzeptiert-Bitcoins.aspx?exURL=http://bitcoin.csg.uzh.ch/
* Download http://bitcoin.csg.uzh.ch/downloads/ or Google Play https://play.google.com/store/apps/details?id=ch.uzh.csg.mbps.client

LiqPay (Ukraine’s PrivatBank)
* AID A0000000041010 (MasterCard), 325041592E5359532E4444463031 (PPSE ‚2PAY.SYS.DDF01‘)
* App https://play.google.com/store/apps/details?id=ua.privatbank.liqpay
* Website http://old.privatbank.ua/en.html

NFC Spy
* AID F04E4643535059 (nfcspy xposed mod), F04E66E75C02D8 (androcheck’s xposed mod (xda)), …many many other / all
* App https://play.google.com/store/apps/details?id=com.sinpo.nfcspy
* Source Code https://code.google.com/p/nfcspy/

Module for NFC Host-Card-Emulation (HCE) Catch-All Routing
* AIDs: receive all APDUs packets for ANY AID
* Website/Info http://repo.xposed.info/module/at.zweng.xposed.modifyaidrouting
* XDA-Forum Thread:
[DEV] Xposed module: KitKat Card-Emulation catch-all AID Routing http://forum.xda-developers.com/showthread.php?t=2573430
* Source Code https://github.com/johnzweng/XposedModifyAidRouting

VirtualJavaScriptCard – Host-based Card Emulation with JavaScript
* AIDs: A000000151000000, A000000003000000, A0000000031010, A0000000041010, A000000167413000ff, 315041592e5359532e4444463031
* Source Code https://github.com/rena2019/VirtualJavaScriptCard

EMVemulator – Android app collects Mag-Stripe data and CVC3 codes from PayPass cards and emulates that informations
* AIDs: A0000000041010 (MasterCard), 325041592E5359532E4444463031 (PPSE ‚2PAY.SYS.DDF01‘)
* Source Code https://github.com/MatusKysel/EMVemulator

NFC-Matric-System-Demo – demo application for the Mobile Matric Card project for the National University of Singapore
* AIDs: F0010203040506, F0394148148100
* Source Code https://github.com/ryandao/NFC-Matric-System-Demo

CUA redi2PAY
* CUA (Credit Union Australia) redi2PAY payment app https://play.google.com/store/apps/details?id=au.com.cuscal.redi2pay.hcelite.cua001
* Homepage http://www.cua.com.au/

BBVA Wallet
* BBVA launches the first commercial solution for Visa cloud-based mobile payments http://vision.visaeurope.com/article/bbva-launches-the-first-commercial-solution-for-visa-cloud-based-mobile-payments/1cc552c76a9d06e567c113995e4ad784
* Google Play Store https://play.google.com/store/apps/details?id=com.bbva.bbvawallet

Announcements
* Wirecard erweitert Mobile Wallet Plattform um HCE-Technologie http://www.wirecard.de/newsroom/pressemeldungen/newsdetail/wirecard-erweitert-mobile-wallet-plattform-um-hce-technologie/
* Proxama and Cryptomathic: EMV Tokenised Transaction (EMV-TT) http://proxama.com/news/proxama-and-cryptomathic-create-mobile-contactless-payment-solution-leveraging-nfc-host-card-emulation/
* Visa to Enable Secure, Cloud-Based Mobile Payments http://pressreleases.visa.com/phoenix.zhtml?c=215693&p=irol-newsarticlePR&ID=1901153
* MasterCard to Use Host Card Emulation (HCE) for NFC-Based Mobile Payments http://newsroom.mastercard.com/press-releases/mastercard-to-use-host-card-emulation-hce-for-nfc-based-mobile-payments/
* SecureKey briidge.net Connect Authentication Service Supports Google Android HCE http://securekey.com/securekey-briidge-net-connect-authentication-service-supports-google-android-hce/
* Banco Sabadell picks Carta for HCE payments trial http://www.nfcworld.com/2014/03/04/328162/banco-sabadell-picks-carta-hce-payments-trial/
* Sberbank, Biggest Bank So Far to Adopt Host Card Emulation, Aims for 3 Million Users http://www.digitaltransactions.net/news/story/Sberbank_-Biggest-Bank-So-Far-to-Adopt-Host-Card-Emulation_-Aims-for-3-Million-Users

Liste von Arduino-/ARM-/ATtiny-/Eval-Boards unter 15EUR

Hier einfach mal eine Liste von Arduino-, ATtiny-, ARM-, Eval-Boards, die unter 15EUR kosten – für Projekte, wo einfach nur ein günstiges, fertiges Board (bzw Kit) erforderlich ist und das Rad nicht erst neu erfunden werden muss bzw der PCB-Service bemüht werden muss. Am Interessantesten finde ich den DigiSpark in Stick Form, welcher direkt an den USB-Port angeschlossen werden kann. Allerdings hat das Boards auch die geringste Performance und kann wohl auch nur zum Betreiben einer LED oder als Eingabe-/Ausgabe-Leitungen (zB zur Ansteuerung, Einlesen von Sensor) genutzt werden. Die leistungsstärkeren ARM-Boards verfügen teils auch gleich über Peripherie On-board.

Freescale FRDM-KL05Z

Freescale_FRDM-KL05Z
Freescale ARM Cortex-M0+ MCU, 32 KB flash, 4 KB SRAM, 48 MHz
+ 3-axis digital accelerometer, capacitive touch slider, RGB LED
10.17EUR (+5.95EUR Versand) http://de.farnell.com/freescale-semiconductor/frdm-kl05z/eval-kinetis-l-freedom-cortex-m0/dp/2254491?Ntt=2254491

Freescale FRDM-KL25Z ARM Cortex-M0+ Development Board

Freescale FRDM-KL25Z
Freescale ARM Cortex-M0+ MCU, 128KB flash, 16KB SRAM, 8 MHz
+ USB
12,95 EUR (+3.50EUR DHL Paket) exp-tech.de
https://mbed.org/handbook/mbed-FRDM-KL25Z

LPC800/LPC812 MAX Board

LPC800_LPC812_MAX_Board
NXP LPC812 Cortex-M0+, 16 kB Flash, 4 kB RAM, 12 MHz
15EUR (+7.60 EUR First Class Mail) embeddedartists.com

LPC-P1114 Development prototype board for LPC1114 CORTEX M0 ARM microcontroller

LPC-P1114_Development_prototype_board
LPC1114 Cortex-M0, up to 50 Mhz, 32 kB Flash, 8kB SRAM
11.95 EUR (+5.50EUR Airmail Europe) olimex.com

STM32VL Discovery

STM32LV_Discovery
STM32F100RB ARM Cortex-M3 Microcontroller, 128 KB Flash, 8 KB RAM
12,14 EUR (+3.50EUR Versand) watterott.com

TI LM4F120 Stellaris LaunchPad

med_ek-lm4f120xl_stellarislaunchpad_tool
TI ARM Cortex-M4F, 256KB Flash, 32 kB SRAM
+ USB, RGB LED
12,35 EUR (+3.50EUR Versand) watterott.com

Adafruit Trinket

adafruit_products_trinket_clear_products_1500_ORIG
Atmel ATtiny85, 8K Flash, 512 Byte SRAM, 512 Byte EEPROM
7,39 EUR (+3.50EUR Versand) watterott.com

OLIMEXINO-85-ASM

OLIMEXINO-85-1
The smallest Olimex Arduino-inspired board
Atmel ATtiny85, 8K Flash, 512 Byte SRAM, 512 Byte EEPROM
6EUR (+5.50EUR Airmail Europe) olimex.com

OLIMEXINO-85-KIT

OLIMEXINO-85-KIT
Arduino OLIMEXINO-85 in DO-IT-YOURSELF (DYI)
Atmel ATtiny85, 8K Flash, 512 Byte SRAM, 512 Byte EEPROM
4EUR (+5.50EUR Airmail Europe) olimex.com

OLIMEXINO-85S
OLIMEXINO-85S-1

ATtiny85-SU microcontroller with pre-loaded „micronucleus tiny85“ bootloader, World’s smallest Arduino-compatible board
5EUR (+5.50EUR Airmail Europe) olimex.com

OLIMEXINO-85BC
OLIMEXINO-85BC

ATtiny85, Two LEDs – power and status, Reset button
7EUR (+5.50EUR Airmail Europe) olimex.com

DFRobot Cheapduino

DFRobot_Cheapduino
Atmel AVR ATmega8, 8Kbytes Flash, 1KB SRAM, 512K EEPROM
3,40EUR (+5EUR Versand) www.lipoly.de
Hersteller Wiki www.dfrobot.com

Digispark USB Development Board

Digispark_USB_Development_Board
Atmel ATtiny85, 8Kbytes Flash, 512 Byte SRAM, 512 Byte EEPROM
8.95EUR (+2,50EUR Versand) shop.cboden.de
Alternativer Anbieter ~12.50EUR ($8.95 + $8.00 Versand) www.tindie.com
Hersteller http://digistump.com/product.php?id=1

Wattuino pro mini adv 5V/16MHz

Wattuino_pro_mini
ATmega328P, 32 Kbytes Flash, 1 KB EEPROM, 2KB SRAM
– kein USB
10EUR (+3.50EUR Versand) www.watterott.com

Nano V3.0 AVR ATmega328

arduino_Nano_V3.0
Atmel ATmega328, 32 Kbytes Flash, 1 KB EEPROM, 2KB SRAM
USB Kabel inklusive
8.24EUR (kostenloser Versand) dx.com

Adafruit Gemma

Adafruit Gemma

7.57EUR (+3.50 EUR Versand) www.exp-tech.de
Hersteller www.adafruit.com

PicoDuino

PicoDuino
ATtiny85 Board mit RGB LED und Taster, Hardware-kompatibel zum Adafruit GEMMA / TRINKET Board
ab ~12EUR ($12.20 + $4.00 Versand) www.tindie.com

ITeaduino Tiny

ITeaduino_Tiny
Attiny85 Board mit Power und Test/Status LED
~9.50EUR ($9.00 + Registered Air Mail $3.90) imall.iteadstudio.com

weitere Microcontroller Boards bei Tindie

Bei Tindie, einem Marktplatz für unabhängige Entwickler gibt es auch einige interessante MSP430- und ATtiny85-Boards
www.tindie.com

Log0x9000 – Poor Mans NFC Smartcard Logger

Vor längerer Zeit habe ich ein bisschen mit JavaCards rumgespielt: Applets kodiert, auf kontaktlose Smartcard geladen und an mein NFC Smartphone gehalten. Eine wirklich sinnvolle Idee für ein Applet kam mir irgendwie nicht bis zu dem Zeitpunkt als ich wissen wollte welche Daten (APDUs) eine bestimmte Android NFC App eigentlich so an (m)eine kontaktlose Smartcard sendet und welche Daten (Response-APDUs) auslesen werden. Da kam mir die Idee zu einer Dummy Smartcard, die jede Anfrage (Command-APDU) mitloggt, mit einer OK-Quitierung (Response-APDU: 0x9000) versieht und somit relativ preiswert das Erforschen der Kommunikation zwischen NFC App und Smartcard zulässt. Ausserdem kann man damit nebenbei schlecht kodierte NFC Apps zum Absturz bringen 🙂  Wird nämlich eine Response-APDU 0x9000 mit zusätzlichen Daten erwartet und bleibt das Datenfeld leer so kann es zB zu einer ArrayIndexOutOfBoundsException kommen.

Erforderlich dafür ist allerdings eine JavaCard, die das Setzen des Default Selected Privilege zulässt, da dann alle APDUs (auch das Selektieren eines nichtvorhandenen Applets) direkt an das Logging-Applet geleitet werden. Die Blank 64k Programmable JAVA SIM Card zB kann man dafür leider nicht verwenden, da die Karte das Laden/Installieren mit Privilegien per Global Platform nicht unterstützt.

Folgende Kommandos sind in der ersten lauffähigen Version implementiert:

00100000 get version (zeigt die Applet Version an)
00400200076C6F6739303030 logging = off (t0/t1/tcl off) (schaltet das Logging aus, Karte kann nun konfiguriert werden)
004002xx logging = on (bitwise) e.g:
00400201 logging = on @ t0 contact interface
00400202 logging = on @ t1 contact interface
00400204 logging = on @ tcl contactless interface
00400207 logging = on @ all contact and contactless interfaces
00400210 get logging setting (liest Logging Bits aus)
00400300 clear log (clear all log entries)
00400400 clear cr_apdus (
0041p1p2 set defaultSW p1p2=9000, 6D00, 6a80 (Default SW setzen)
00420000 get defaultSW (Default SW auslesen)
00500100 activate C/R-APDU: lc {data set}  {data-set}={len-apdu apdu-byte1...apdu-byteN len-response-apdu rapdu0... rapduN}  
00510000 get cr_index (number of C/R-APDUs) (Anzahl der konfigurierten C/R-APDUs ausgeben)
006000nn readLog n (Logeintrag n auslesen)
00610000 get log index (Anzahl der Logeinträge auslesen)

Somit kann das Logging an- und ausgeschaltet werden, Logeinträge gelöscht / konfiguriert werden und vorhandene Logeinträge aufgelistet werden.

Testkandiat

Als Proband musste die Electronic Pickpocket RFID von Identity Stronghold herhalten. Im Screenshot sieht man das angeblich eine Karte erkannt wurde.

identify_stronghold

Die geloggte APDU zeigen die Anfrage der App:

#selektieren des American Express AIDs
00 a4 04 00 05 a0 00 00 00 25

Scheinbar fragt die App nur nach einer American Express Karte.

Hall of Shame

Schlecht kodierte (ohne Überprüfung der Response APDU und ohne try-catch-Block) NFC Apps scheinen dann so auszusehen:
ec_kreditkarten_infos  speek  s-kontaktlos

Interessant ist auch der Unterschied zwischen einem Android-Gerät mit NXP NFC Controller und einem Android-Gerät mit STMicroelectronics-Oberthur-Broadcom-Gespann. Mein Nexus S (mit NXP-NFC-Controller) sendet keine weiteren APDUs wenn das Phone auf die Karte gelegt wird, während das Nexus 10 (Broadcom-NFC-Controller) scheinbar alle 0.5 Sekunden versucht eine Leseanfrage an die Karte zu senden – denn nach 10 Sekunden wurden folgende APDUs geloggt:

> l9ls
0: 00B000009000
1: 00B000009000
2: 00B000009000
3: 00B000009000
4: 00B000009000
5: 00B000009000
6: 00B000009000
7: 00B000009000
8: 00B000009000
9: 00B000009000
10: 00B000009000
11: 00B000009000
12: 00B000009000
13: 00B000009000
14: 00B000009000
15: 00B000009000
16: 00B000009000
17: 00B000009000
18: 00B000009000
19: 00B000009000

Das 00B00000 entspricht einem READ-BINARY-Kommando, das wahrscheinlich genutzt wird um zu überprüfen, ob sich die Karte noch im Feld befindet.

Antworten

Jede Anfrage stumpf mit einem 0x9000 zu beantworten macht im 2.Schritt natürlich wenig Sinn, da es so zu keiner korrekten Kommunikation zwischem dem Smartphone und der Karte kommen wird. Deshalb sollte das Applet besser mit vorkonfigurierten Response-APDU antworten. Hat man die passende NFC-Smartcard zur App parat kann man so im Wechsel eine C-APDU loggen, die C-APDU an die richtige Karte senden, das Applet mit der R-APDU konfigurieren und so Schritt für Schritt quasi die Karte emulieren. Das Unterfangen ist zwar ziemlich mühsam aber für einen Logger unter 20 Euro akzeptabel.

Bei meinen Experimenten hat es sich allerdings herausgestellt, dass es Sinn macht eine Statemachine in das Applet zu implementieren, da je nach Status der Karte Anfragen unterschiedlich beantwortet werden müssen.

Btw: Das Applet kann natürlich auch zum Loggen einer kontaktbehafteten Karte, wie zB der Gesundheitskarte genutzt werden, da es der Karte nahezu egal ist über welches Interface die APDUs gesendet werden. Lesezugriffe auf Mifare Classic bzw ISO14443-3-Level kann mit der JavaCard leider nicht geloggt werden, da die Mifare Kommunikation eine Protokollebene niedriger stattfindet und nicht über die JavaCard API läuft.

Tuit – ein weiterer NFC Ring

Tuit_Prototype

Einen Monat nachdem das NFC Ring Kickstarter Projekt erfolgreich abgeschlossen ist versucht ein weiterer Entwickler ebenfalls einen NFC Ring Projekt aufzusetzen? Tuit – A mobile security ring powered by NFC, so wird es von Jeff Fransen (Brooklyn, NY) betitelt. Der Ring soll aus 3 Teilen (+ NTAG203-Tag) bestehen, die per Ultraschallschweißen verbunden werden und kann für 25$ (Schwarz&Silber Style) vorbestellt werden.

Eine Tuit Lockscreen App zum Entsperren des Android NFC Smartphones wird es bei Gründung des Projektes geben, bei Erreichen eines Stretch Goals auch für Windows Phone.

Quelle: Kickstarter

Blank 64k Programmable JAVA SIM Card

Blank_64k_Programmable_JAVA_SIM_Card
„Blank 64k Programmable JAVA SIM Card“ so wurde die SIM-Karte bei eBay betitelt. Die musste natürlich bestellt werden, da ich schon ein bisschen mit JavaCards experimentiert habe und die Karte auch nur $5 (~3.70EUR + 2.22EUR Versand) gekostet hat. Erste Tests zeigten allerdings dass es sich hier nicht um eine generische JavaCard handelt, bei der man mit freien Tools (zB gpj, etc) einfach Applets per Cardmanager auf die Karte installieren kann. Diese Karte ist entweder für die Nutzung als SIM-Karte prepersonalisiert oder grundsätzlich nur für diesen Verwendungszweck konzipiert worden:

Hier ein paar Versuche der Karte Daten / R-APDUs zu entlocken:

#ATR auslesen
/atr
3B 9E 96 80 1F 87 80 31 E0 73 FE 21 12 66 55 57 4A 43 30 33 91

#default Applet selektieren (liefert File Control Information (FCI) Template)
/send 00a4040000
=> 00 A4 04 00 00
<= 6F 13 84 0B A0 00 00 00 70 00 05 01 49 53 44 A5
   04 9F 65 01 FF 90 00

#damit kann man den Cardmanager / ISD (mit AID A000000070000501495344) selektieren
/card -a "A0 00 00 00 70 00 05 01 49 53 44"
 <= 6F 13 84 0B A0 00 00 00 70 00 05 01 49 53 44 A5     
 04 9F 65 01 FF 90 00 

#CPLC Daten (alias Tag 9F7F) auslesen
cm> get-cplc
 => 80 CA 9F 7F 00
 <= 6A 88 Status: Reference data not found 

#Card Recognition Data (alias Tag 0066) Auslesen
cm> get-data 0066
 => 80 CA 00 66 00
 <= 6A 88 Status: Reference data not found 

#Key Information Template (alias Tag 0xE0) auslesen möglich?
cm> get-data 00e0
 => 80 CA 00 E0 00
 <= 6A 88
Status: Reference data not found

Anhand der des Cardmanager AIDs (A000000070000501495344) kann man auf den Hersteller bzw den RID (Registered Application Provider Identifier) schliessen:
A000000070; Prism Card Technologies; South Africa zu finden unter http://prism.co.za bzw mitlerweile http://net1.com

Leider unterstützt die Karte keine Authentifizierung durch INITIALIZE UPDATE / EXTERNAL AUTHENTICATE wie es bei JavaCards nach Global Platform 2.x spezifiziert ist um Applets auf die Karte zu laden:

cm> init-update
=> 80 50 00 00 08 60 F3 6D 23 32 2F 2D D4 00
<= 6E 00
Status: CLA value not supported

SIMalliance CAT Loader alias Applet Upload

Mehr Erfolg mit einem Upload eines Applets / CAP Files hat man wie @codebutler im README.md beschreibt:

    Right-click on "Root", "Add Node" -> "Add OTA Session"
        Send Terminal Profile: True
        Right-click on OTASession, "Add Package"
            FileName: (choose cap file)
            Security domain AID: A000000070000501495344
        Right-click on OTASession, "Add Applet STK"
            Package AID: D0D1D2D3D4D601
            AID: D0D1D2D3D4D60101
            Instance AID: D0D1D2D3D4D60101
            Max menu entries: 01
            Menu entries: 0001

    OTA Configuration (toolbar button)
        SMS
            Originating Address / Service centre
                Type of number: International
                NPI: National
                Number: 55667788

Hierfür lädt man sich den SIMalliance CAT Loader V2.0 (nach einer Registrierung) herunter und kann so z.B. das Hello JavaCard Applet auf die Karte via CAT TP (Card Application Toolkit Transport Protocol) installieren.

screenshot-simalliance-loader

AIDs / ISDs / Packages

Folgende Packages sind auf der Karte vorhanden:

 
#vor der Nutzung des SimAlliance Loaders
Packages
A0000000620001                   java.lang
A0000000620101                   javacard.framework
A0000000620102                   javacard.security
A000000070000501495344           Secure Domain
A0000000700005016A637265696E74
A0000000700005016E61746D
A0000000700005015574696C
A000000070000501FFFFFFFF43414C

#nach dem Upload des hello World applets
Packages
A0000000620001                    java.lang
A0000000620101                    javacard.framework
A0000000620102                    javacard.security
A0000000620201                    javacardx.crypto
A0000000090003FFFFFFFF8910710001  sim.access  http://www.andresteder.com/static/api/simtoolkitapi/sim/access/package-summary.html
A0000000090003FFFFFFFF8910710002  sim.toolkit http://www.andresteder.com/static/api/simtoolkitapi/sim/toolkit/package-summary.html
A0000000700005016A637265696E74 
A0000000700005016E61746D 
A0000000700005015574696C 
A000000070000501FFFFFFFF43414C
A0000000700005016A637265
A000000070000501FFFFFFFF43414D
A000000070000503444553
A000000070000503534841
A000000070000503524E47
A000000070000501FFFFFFFF4746324E
A0000000700005017374776962
A0000000700005016A77696269
A0000000700005016A776962
A0000000700170696E
A0000000700005014D617468
A00000015100                   GP Cardmanager / Secure Domain
D0D1D2D3D4D601                 hello world applet package

Applets:
A00000007000050152464D
A000000070000501574942
A000000070000501495344         CardManager/ISD (application privilege: 0x80)
A0000000700005016A63726501
D0D1D2D3D4D60101               hello world applet instance

UPDATE 2013-10-09:

Shadytel SIM Tools

Eine weitere Möglichkeit Applets auf die Karte zu laden ist die Verwendung der Shadytel SIM Tools. Dieses in Python geschriebene Skript verpackt die Upload-APDUs eines CAP-Files in SMS-PP ENVELOPE APDUs. Ausser dem Hochladen können die vorhandenen Packages / Instanzen aufgelistet werden:

user@rena:~/javacard/hello-stk$ ../sim-tools/bin/shadysim --pcsc -t
ICCID: 89XXXXXXXXXXXXXXXXXX
AID: a0000000620001, State: 01, Privs: 00
AID: a0000000620101, State: 01, Privs: 00
AID: a0000000700005016a637265696e74, State: 01, Privs: 00
AID: a0000000700005016e61746d, State: 01, Privs: 00
AID: a0000000700005015574696c, State: 01, Privs: 00
AID: a000000070000501ffffffff43414c, State: 01, Privs: 00
AID: a0000000620102, State: 01, Privs: 00
AID: a0000000620201, State: 01, Privs: 00
AID: a0000000090003ffffffff8910710001, State: 01, Privs: 00
AID: a0000000090003ffffffff8910710002, State: 01, Privs: 00
AID: a0000000700005016a637265, State: 01, Privs: 00
	Instance AID: a0000000700005016a63726501
AID: a000000070000501ffffffff43414d, State: 01, Privs: 00
	Instance AID: a000000070000501ffffffff43414d01
AID: a000000070000503444553, State: 01, Privs: 00
AID: a000000070000503534841, State: 01, Privs: 00
AID: a000000070000503524e47, State: 01, Privs: 00
AID: a000000070000501ffffffff4746324e, State: 01, Privs: 00
AID: a0000000700005017374776962, State: 01, Privs: 00
AID: a0000000700005016a77696269, State: 01, Privs: 00
AID: a0000000700005016a776962, State: 01, Privs: 00
	Instance AID: a0000000700005016a77696201
AID: a00000015100, State: 01, Privs: 00
AID: a0000000700170696e, State: 01, Privs: 00
AID: a0000000700005014d617468, State: 01, Privs: 00
AID: d07002ca449001, State: 01, Privs: 00
	Instance AID: d07002ca44900101

Weitere Infos/Links

Sesame Ring alias Charlie Card alias MBTA NFC Ticket in Ringform

Sesame_Ring
Kaum nachdem das NFC Ring Kickstarter Projekt erfolgreich beendet wurde startet ein neues Kickstarter Projekt, dass sich einen NFC Ring zum Ziel gesetzt hat: der Sesame Ring. Dieser Ring beinhaltet eine ‚Charlie Card‘ für die MBTA (Massachusetts Bay Transportation Authority = Betreiber des öffentlichen Personennahverkehrs in Boston und Umgebung). Bei erfolgreicher Gründung wird der Ring mit einem 3D-Drucker ausgedruckt. Es stehen deshalb verschiedene Farben (schwarz, weiss, rot, blau, orange, gelb), Muster, Größen zur Auswahl oder es kann auch optional ein eigenes Design verwendet werden.
Quelle:  Kickstarter

wenn's draußen mal regnet…