2015-09-18 9 views
5

जो मैं प्राप्त करने का प्रयास कर रहा हूं वह एपीडीयू क्लासिक 1 के कार्ड को एपी और बी कुंजी बदलने के लिए एपीडीयू कमांड भेजना है।एमपीईजी क्लासिक 1 के कार्ड में एपीडीयू कैसे भेजें?

मैं कार्ड के साथ कनेक्शन स्थापित करने में सक्षम था और ब्लॉक 0 और ब्लॉक 1 पढ़ने के लिए एक डिफ़ॉल्ट कुंजी (FFFFFFFFFFFF) का उपयोग करने में सक्षम था। मैंने इसके लिए छिपे हुए MIFARESamples एप्लिकेशन का उपयोग किया।

अब, मैं डिफ़ॉल्ट रूप से एक कुंजी को किसी अन्य चीज़ से बदलना चाहता हूं। मैं यहाँ एक समाधान पाया, stackoverflow (Mifare Change KEY A and B) जिससे पता चलता है कि मैं इस APDU भेज दिया है कि कम से:

नई कुंजी एक = 00 11 22 33 44 55 पहुंच बिट्स कुंजी बी नहीं इस्तेमाल किया (ताकि एफएफ एफएफ ओवरराइट नहीं एफएफ एफएफ एफएफ एफएफ)

=> सेक्टर ट्रेलर को लिखें 00 11 22 33 44 55 एफएफ 0F 00 एफएफ एफएफ एफएफ एफएफ एफएफ एफएफ एफएफ

मैं एक अच्छा उपकरण JSmartCard एक्सप्लोरर जो आप APDUs भेजने की अनुमति देता पाया कार्ड के लिए तब मैं PCSC विनिर्देशों 3.2.2.1.4 लोड कुंजी कमान अध्याय पढ़ सकते हैं और समझा जाता है कि आदेश शायद इस तरह दिखना चाहिए:

FF 82 00 00 18 00 11 22 33 44 55 FF 0F 00 FF FF FF FF FF FF FF 

लेकिन दुर्भाग्य से JSmartCard उपकरण "कमांड अनुमति नहीं (कोई वर्तमान एफई)" के साथ विफल रहता है।

मैं क्या गलत कर रहा हूं? मैं कुंजी कैसे बदल सकता हूं?

+0

क्या आपने आरएफआईडीआईओटी लाइब्रेरी का उपयोग करने का प्रयास किया है? – Ellipticat

उत्तर

4

सबसे पहले, MIFARE क्लासिक कार्ड APDU कमांड का उपयोग नहीं करते हैं। इसलिए, आप कार्ड में एपीडीयू नहीं भेजते हैं लेकिन कार्ड रीडर को भेजते हैं (जो उन्हें माइफेयर क्लासिक कमांड में अनुवादित करता है)। पाठक द्वारा संसाधित किए जाने वाले एपीडीयू कमांड आमतौर पर कक्षा बाइट FF से शुरू होते हैं।

MIFARE क्लासिक कार्ड में, चाबियाँ (ए और बी) और प्रत्येक क्षेत्र के लिए एक्सेस शर्तों को क्षेत्र ट्रेलर (प्रत्येक क्षेत्र का अंतिम ब्लॉक) में संग्रहीत किया जाता है। एक MIFARE क्लासिक 1 के कार्ड में 16 सेक्टर हैं जिनमें प्रत्येक 4 ब्लॉक हैं।

तो यदि आप & सेक्टर 0 के लिए एक्सेस शर्तों को सेट करना चाहते हैं, तो आपको उन्हें 3 (क्षेत्र 0 के अंतिम ब्लॉक) को ब्लॉक करने के लिए लिखना होगा। पीसी/एससी मानक के रूप में भंडारण कार्ड के लिए लिखने आदेश (अद्यतन बाइनरी) को परिभाषित करता है:

FF D6 XXYY 10 ZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZ 

कहाँ XXYY ब्लॉक पता है और ZZ... डेटा ब्लॉक करने के लिए लिखा जा रहा है।

क्षेत्र ट्रेलर के प्रारूप (this answer for further details देखें) है:

<key A> | access bits | general purpose byte | <key B> 

तो

  • कुंजी एक = 00 11 22 33 44 55
  • कुंजी बी = 66 77 88 99 AA BB
  • पहुँच बिट्स सेट करने के लिए = 787788 (सेक्टर ट्रेलर केवल कुंजी बी का उपयोग करके लिखने योग्य है; एक्सेस बिट्स/जीपीबी कुंजी ए या बी के साथ पढ़ा जा सकता है; डेटा ब्लो सीके केवल कुंजी बी का उपयोग कर लिखने योग्य हैं; डेटा ब्लॉक प्रमुख ए या बी)
  • GPB क्षेत्र 0 के लिए 69

के लिए निर्धारित है के साथ पढ़ा जा सकता है, तो आपको निम्न लिखने आदेश का प्रयोग करेंगे:

FF D6 0003 10 001122334455 787788 69 66778899AABB 

ध्यान दें कि आप आंशिक रूप से अद्यतन नहीं कर सकते सेक्टर ट्रेलर, आपको हमेशा पूरे सेक्टर ट्रेलर का निर्माण और लिखना होगा।

+0

साफ़ और सटीक उत्तर! – ManuelH

संबंधित मुद्दे