2015年1月27日火曜日

FeliCa

学生証にはFeliCaが搭載されていたのと,ICカードリーダー(RC-S620S)が転がっていたのでさくさくと.
これはカードのIDmを使って認証を行っています.でも,これはEthernetのMACアドレスみたいなもんなのでかぶることはないんでしょうけど,登録作業が結構面倒.IDmはカードが変わればもちろん変わるので,再発行時なんかは面倒くさい.
それと同時に,あるものを依頼されたってのもあって,なんかもう一歩踏み込んだところのデータを見たい!ということで,ちょっと調査してみました.

FeliCaでは,システムコードとかエリア,サービスコード,ブロックとかいろいろ出てきますが,まあちょっとまとめてみると…間違ってたらごめんなさいね.

システムコード
カードに乗っているシステムを識別するコード.一枚のカードにいろんなシステム(SuicaとかWaonとか)を入れることができるので,その識別用.(Suicaは0x300,nanacoは0xC704だった)一つのIDmを持ち,複数のサービスを持つ.

サービスコード
システムに乗っているサービスを識別するコード.乗車履歴だとか,残高だとか各サービスに一つづつ.
アクセス属性は,このコードの下6Bitを見ることで分かる.非保護領域は最下位Bitが1.他にもランダムアクセスとか,アクセス方法についての情報もある.複数のブロックを持つ.

ブロック
実際にデータが格納される箱.プレステのメモカみたいなもんで,16Byte.この箱単位でアクセスする.
サービスごとにインデックスが0から始まる.

詳しくは,FeliCaカード ユーザーズマニュアルってのをSonyが公開してるのでそれで.



実際のインターフェイスを見ると,

1.システムコードからIDmを取得.
2.IDmとサービスコード,ブロックのインデックスで読み書き.

の2段階が必要になってくる.
保護領域はさらに認証が必要ですけど,非保護領域だったらこれだけでOK.

が,

そもそもシステムコードもサービスコードも分からないし,ましてや中身なんてどんなフォーマットで入っているか分からないのですよ.なので全検索&全読出&解・析!.

サービスコードは,Pollingコマンドを使って検索する.コードは2Byteなので全数やっても大した時間はかからないだろう.どうやら,バイトごとにワイルドカード(0xFF)が使えるようなので,0x00FF,0x01FF…0xFEFFと0xFF00,0xFF01…0xFFFEを探れば出てくるでしょう.あとは出てきたのを組み合わせれば出ますね.

システムコードは,RequestServiceコマンドを使います.サービスコードの下5Bitはアクセス属性で,16パターン.そのうち認証なしで覗けるのは半分.10Bit × 8を回せば出る.

あとは,ブロックを読めるだけ読んで表示するなり,記録するなりして解析する.

コマンドは,FeliCaのカードに送るコマンドを,カードリーダーに送るコマンドでカプセル化しなきゃいけない.
カードリーダーのコマンドは,仕様書通りに作って….


でてきたでてきたw
どうやら,学籍番号と,カードの有効期限っぽいのは見ることができました.
んじゃ,電子錠の改良と,依頼の品を作りましょうか.

0 件のコメント:

コメントを投稿