学生証には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 件のコメント:
コメントを投稿