Google Code Prettify

2014年7月27日日曜日

NFCカード(payPass)を読んでみた - Octopusカードリーダー使ってみた

カードを読んで、カード番号次第で電源をオンにするような仕組みのプロトタイプを作りたかったので、ちょっとNFCの勉強しました。電源オンの仕組みは以前作ったので、今回取り組んだ案件の肝はカード読み取りです。

まずはカードリーターの確保。いろいろ買っちゃいましたが、案外これだけで十分そうです。HK$148 (2000円弱)で香港中のMTR駅構内のカスタマーサービスで買えます。

Welcome to Octopus Hong Kong - Get Your Octopus - Online Shop
http://onlineshop.octopus.com.hk/cart/?catid=3


ACSのACR122というものですが、シャムスイポだとHK$400とかぼったくられそうな品物ですが、MTRで買えばたったのHK$148です。香港の会社が製造していて、そこそこ海外でも認知されているようで。恐るべし香港。

制御に使うコンピューターですが、またしても、Raspberryで制御です。
持ち運んでどこでも見せることができるし、安いので最近はこればかりいじってます。
関係しそうな情報を片っ端から眺めて、ちょうどいいツールのめぼしをつけました。
やってることは、Linuxでlibnfcを使ってちょっとCとかシェルスクリプトを書いてるだけなんで、Raspberryだけでなくそこら中のLinuxでも同じはずです。

Hacking the NFC credit cards for fun and debit Renaud Lifchitz
http://www.ustream.tv/recorded/21805507
https://www.youtube.com/watch?v=VWIzW0rRw_s

"Hacking the NFC credit cards for fun and debit ;)" presentation slides - HES2012 - Renaud Lifchitz
https://code.google.com/p/readnfccc/downloads/detail?name=hes2012-bt-contactless-payments-insecurity.pdf&can=2&q=

Contacless payments insecurity Renaud Lifchitz - 8.8 Computer Security Conference October 24-25, 2013 – Santiago, Chile
http://www.8dot8.org/2013/deck/8dot8_2013_pres_RL.pdf


readnfccc ... English version
https://github.com/azet/readnfccc/blob/master/readnfccc.c

readnfccc 2.0 ... Spanish version
https://github.com/azet/readnfccc/blob/master/readnfccc.es.c


Complete list of EMV & NFC tags
https://www.eftlab.co.uk/index.php/site-map/knowledge-base/145-emv-nfc-tags

emvlab.org - the one-stop tools site for banking techies
http://www.emvlab.org/

emvlab.org:TLV Utilities - decodes EMV records encoded in tag-length-value (TLV) format.
http://www.emvlab.org/tlvutils/

Getting information from an EMV chip card with Java
http://blog.saush.com/2006/09/08/getting-information-from-an-emv-chip-card/

MasterCard PayPass Vendor Testing Guide (Terminals) Version 1.0 - September 2007
https://www.paypass.com/pdf/public_documents/PayPass%20Vendor%20Testing%20Guide%20Terminals%20Sept07.pdf

この、readnfcccっていうのが、手っ取り早くカード番号を読むのに使えそうなツールなのですが、どうもすんなりとは動きません。libnfcを入れるところから始まり、"byte_t"なんて型知らないとコンパイラに怒られ新しいバージョンを探し直したり、見つかった新しいバージョンもすんなりとは動作せず、自分の環境、カードで動作させるために、電文の内容を把握することが必要そうです。。ところどころプログラムをいじくって、どうにかこうにか、payPassカード番号だけは読み込むようになりました。。
下記のような雰囲気の修正をちょこちょこしてます。
単なるPoCだったのに、だいぶ疲れたのでもうおしまいです。

52c52
<   uint8_t SELECT_APP[] = {0x00, 0xA4, 0x04, 0x00, 0x07, 0xA0, 0x00, 0x00, 0x00, 0x04, 0x10, 0x10, 0x00};
---
>   uint8_t SELECT_APP[] = {0x00, 0xA4, 0x04, 0x00, 0x07, 0xA0, 0x00, 0x00, 0x00, 0x42, 0x10, 0x10, 0x00};
166,167c163
<     if (*res == 0x15 && *(res + 1) == 0x57) {
<     // if ( *(res + 1) == 0x57) {
---
>     if (*res == 0x9c && *(res + 1) == 0x57) {

2014年7月26日土曜日

Raspberry起動時にIP通知

出先にて、iPhoneやPocket Wifiを経由してRaspberryをインターネット接続している時に、iPadやらiPhoneからRaspberryにログインしたい時があります。Raspberry起動時にIP通知されるようにしました。

これを参考にメール設定。
TNET Raspberry Pi Site/ SMTP Mail Setup
http://rpi.tnet.com/project/faqs/smtp

具体的にはこんな感じで。
sudo apt-get install ssmtp
sudo apt-get install mailutils
sudo apt-get install mpack
pi@raspberrypi ~/wemo $ cat /etc/ssmtp/ssmtp.conf
#
# Config file for sSMTP sendmail
#
# The person who gets all mail for userids < 1000
# Make this empty to disable rewriting.
root=postmaster

# The place where the mail goes. The actual machine name is required no 
# MX records are consulted. Commonly mailhosts are named mail.domain.com
#mailhub=smtp.gmail.com:587

# Where will the mail seem to come from?
#rewriteDomain=

# The full hostname
hostname=raspberrypi

# Are users allowed to set their own From: address?
# YES - Allow the user to specify their own From: address
# NO - Use the system generated From: address
#FromLineOverride=YES


AuthUser=xxxxxx@gmail.com
AuthPass=xxxxxxxxx
FromLineOverride=YES
mailhub=smtp.gmail.com:587
UseSTARTTLS=YES

メール送信
echo "sample text" | mail -s "Subject" username@domain.tld

添付ファイル送信

mpack -s "test" /home/pi/test/somefile.ext username@domain.tld

Crontabに起動時の処理を設定
pi@raspberrypi ~/wemo $ crontab -l
MAILTO=""
@reboot /home/pi/wemo/reboot-notification
pi@raspberrypi ~/wemo $ cat reboot-notification
#!/bin/bash

echo `sudo ifconfig | mail -s "Reboot-Raspberry" xxxx@xxxxx.com`

これで、起動時にifconfigの内容がメールで届きます。実行内容を通知するうるさいメールはMAILTO=""で止めてます。