前言#
NFC 技術が生活のさまざまな面でますます広く使用されるにつれて、NFC 感応支払い、NFC アクセスカード、NFC 音楽タグ、そしてスマートフォンが NFC 機能をますます広くサポートするようになり、日常のニーズを便利にするために NFC タグをスマートフォンに書き込むことが増えています。本記事では、従来の Mifare Classic® EV1 タイプのカード(以下 M1 と略称)に対するコピー書き込みチュートリアルを提供します。より先進的な CPU カードや他のタイプのカードについては、本記事の範囲外です。
デバイスについては、Windows コンピュータ、pn532 モジュール、ターゲットカードとソースカードを準備する必要があります。
あなたのスマートフォンに NFC カードを追加できるシステムウォレットがあることを確認してください。
もしあなたのスマートフォンにウォレットがあるが、必要なアクセスカードを追加するのが難しい場合、この記事が役立つかもしれません。データをダンプした場合は、最後のセクションにジャンプできます。
概要#
市場に出回っているほとんどのカードは、13.56 MHz の標準 NFC カードで動作しており、いくつかの住宅地のアクセスカードなどが含まれます。そして、私たちの Android デバイスには、この周波数の NFC チップが搭載されています。
NFC カードを完全にコピーするには、主に 2 つの部分があります:1 つはカード番号(すなわち 0 セクターの内容)、もう 1 つはデータです。
カード番号について#
通常の規格に準拠した M1 UID カードでは、0 セクターがロックされているため、この問題を解決するには、0 セクターの書き込みをサポートする CUID カードを使用し、スマートフォン内蔵のシミュレーションチップなどを利用する必要があります。
CUID カードを利用する場合、カードリーダーを介してファイルを書き込むことで自然に完了しますので、詳細は省略します。
スマートフォンを使用したシミュレーションのプロセスは人によって異なるため、後で紹介します。
本記事では、xcicode
からのMifareOneTool
を使用して、カードの解読と書き込みを行います(以下 M1T と略称)。
データについて#
以下は M1 カードの構造です。
カードには0-15
の合計 16 セクターがあり、各セクターには0-3
の 4 つのブロックがあり、0~2
ブロックはデータブロック、3
ブロックは制御ブロックです。制御ブロックにはKeyA
、KeyB
、およびそのブロックの制御字
が格納されており、制御字は 2 つのキーがブロックにアクセスする権限を示す文字です。M1 カードの各セクターの権限は独立しています。
私たちがコピーする必要があるカードのほとんどは暗号化されており、以下の 3 種類のカードに分類されます:
- 非暗号化カード:すべてのセクターのキーは
FFFFFFFFFFFF
- 半暗号化カード:一部のセクターのキーは
FFFFFFFFFFFF
- 完全暗号化カード:すべてのセクターのキーは
FFFFFFFFFFFF
ではない
非暗号化カードは直接追加できます。
もしあなたがコピーしたい M1 カードが暗号化されている場合(完全暗号化または半暗号化のいずれでも解読可能)、かつSAK08/18/28
に準拠している場合、この記事が適しています。
カード内データの解読#
まず、上記のリポジトリから M1T をダウンロードし、PN532 を正しくコンピュータに接続し、「デバイスを検出」ボタンをクリックします。
問題がなければ、デバイスに接続されています。
次に、解読したいカードを PN532 の上に置き、順にカードをスキャン -> 暗号化を検出(このステップでカードが半暗号化か完全暗号化かを判断できます)-> 原カードを一括解読をクリックします。問題がなければ、この時点で半暗号化カードのデータを取得でき、次のセクションに進んで書き込むことができます。
図は成功した解読時のインターフェースで、この時点でファイルマネージャーが保存するファイルの名前を要求するはずです
もし完全暗号化カードの場合は?
クリックして mfcuk をダウンロード(ツールはインターネットから)
解凍し、MFCUKを開く
をダブルクリックし、1 を入力して Enter を押します。
その後、理論的には非常に長い待機時間を経てキーを取得できます(笑)
(実際には、筆者が当時の実行結果を再現しようとしたが失敗し、続けて書けなかったので、時間があれば補足します。少なくとも私は完全暗号化カードが破れることを確認しています)
スマートフォンへの書き込み#
この段階では非常に簡単です。単純な書き込みの考え方が必要です:
一部のスマートフォン内蔵ウォレットでは、空白カードに書き込む際に最初にカード番号をコピーするように求められ、その後、カードリーダーを使用してデータを書き込むように求められます。
まず原カードを置いてカード番号を取得し、次に M1T を使用して取得したデータを書き込むだけです。
別の一部のスマートフォン内蔵ウォレット(例えば VIVO)では、空白カードを作成する際にランダムなカード番号が得られ、考え方を変更する必要があります:
この情報に基づいて、カードをコピーする別の考え方が得られます:失敗することが確定しているカードを最初にコピーし、その後データを書き込みます。
スマートフォン上で実体のアクセスカードを追加することを選択し、元のカードをコピーします。この時点でスマートフォン内のカードはカード番号があり、すべて空(データがあってもすべてのキーが知られている)であるはずです。
次に、M1T を開いて高度な機能タブを選択し、最初に M1 をクリアして空白データを取得し、その後ダンプした原カードデータを書き込むことができます。
これで、あなたのスマートフォンには期待するアクセスカードが書き込まれました。
他の機能データ(例えば特定のリンクを開く、音楽を再生する、WiFi に接続するなど)を書き込みたい場合は、NFC Tools Pro
を検索して個別に編集できます。
完了できなかった実験#
自分のスマートフォンに類似のネイティブシステムをインストールした後、NFC カードを完璧にシミュレートできず、小区のアクセスカードを刷れずに苦しんでいました。今は元のシステムに戻ったので実験できませんが、以下に類似のネイティブシステムに関する実験の考え方を提供します。類似のネイティブシステムでアクセスカードをコピーする方法を研究できることを願っています。
- Card Emulator Proをインストールします。
- このソフトウェアを使用して UID を一度コピーし、カードをアクティブにして M1T でカード情報を読み取ることを試みます。
- 上述の UID を直接書き込むことができない解決策に基づいて、データを書き込むことを試みます。
私は専門家ではなく、ウォレットが NFC をシミュレートする実現原理を理解していないため、ただ一つの謎を残すことしかできません。