cari
Rumahpembangunan bahagian belakangTutorial PythonFlipper Zero NFC Hacking - pemakan meriam

Flipper Zero NFC Hacking - cannon fooder

Dalam siaran sebelumnya, kami melihat cara melaksanakan pembaca telus dengan Flipper Zero. Bagaimana jika kita mengambil konsep yang sama tetapi kali ini untuk melaksanakan emulator kad telus? Kami boleh menggunakan Flipper Zero kami seperti meriam untuk menyerang kubu digital, seperti pembaca atau telefon pintar, dengan menghantar permintaan yang salah. Perintah cacat, perintah tidak dijangka dalam kitaran hayat, kabur, limpahan penimbal—langit adalah hadnya!

1 - Konteks

Sama seperti pembaca kad lutsinar, saya ingin berkomunikasi dengan Flipper menggunakan CLI bersiri dari komputer saya. Komputer mengendalikan semua logik, bermakna ia memutuskan tindak balas yang perlu diberikan bergantung pada arahan, menggunakan skrip Python, sebagai contoh.

Sekarang, mengenai pelaksanaan perintah emulator kad, pada asasnya ia adalah sejenis mod cermin berbanding pembaca:

  • Kami perlu mengesan apabila medan RF diaktifkan oleh terminal.
  • Kami perlu mengesan apabila medan RF dinyahaktifkan oleh terminal.
  • Kita perlu boleh menerima/menghantar bit ke terminal.
  • Kita perlu boleh menerima/menghantar bait ke terminal.

Kecuali ada butiran kecil yang merumitkan perkara. Ingat bahawa semasa komunikasi kad/pembaca, pembacalah yang bertindak sebagai tuan, bermakna pembacalah yang memulakan komunikasi dan menghantar arahan.

Jadi, jika kita mencipta emulator kad, ia mesti menunggu acara daripada pembaca. Anda boleh menganggapnya seperti pelayan, dengan pembaca bertindak sebagai pelanggan. Kami perlu memasukkan kod ini ke dalam Flipper Zero.

Baiklah, pertama sekali, mari kita buat imbasan ringkas tentang pertukaran komunikasi antara pembaca dan kad menggunakan ISO 14443-A.

2 - Pertukaran komunikasi antara pembaca dan kad menggunakan ISO 14443-A

Berikut ialah rajah yang meringkaskan pertukaran utama antara pembaca dan kad yang berkomunikasi melalui ISO 14443-A.

+----------------+                                  +----------------+
|   Reader       |                                  |   Card         |
+----------------+                                  +----------------+
        |                                                  |
    Field activation                                       |
        |                                                  |
        | --- REQA (Request Command Type A) -------------> |
        |                   26                             |
        |                                                  |
        | |
        |                                                  |
        | |
        |                                                  |
        | |
        | E0 50 BC A5                                      |
        |                                                  |
        | |    
        | D0 73 87                                         |
        |                                                  |
        | |
        | 0200A404000E325041592E5359532E444446303100E042   |
        |                                                  |
        | 



<p>Sekarang persoalannya ialah, "Bagaimana kita melaksanakan semua ini pada Flipper?"</p>

<h2>
  
  
  4 - Pelaksanaan Flipper Zero
</h2>

<p>Seperti dalam artikel saya sebelum ini, saya akan terus mengembangkan aplikasi fail/main/nfc/nfc_cli.c (lihat fail di cawangan saya).</p>

<p>Pertama, titik perkakasan pantas. Untuk pengurusan NFC, Flipper Zero menggunakan cip ST25R3916. Ini bagus kerana ia membolehkan kami mencipta kedua-dua pembaca tanpa sentuh dan emulator kad. Cip secara automatik mengendalikan penghantaran arahan yang terlibat daripada pengaktifan medan kepada antiperlanggaran. Apa yang perlu kita lakukan ialah menentukan ATQA, SAK, UID dan panjangnya yang ingin kita hantar semula.</p>

<p>Flipper menyediakan fungsi furi_hal_nfc_iso14443a_listener_set_col_res_data untuk mengendalikan semua ini.</p>

<p>Itulah sebabnya saya menambah 3 arahan pada NFC CLI Flipper untuk mengkonfigurasi elemen ini:</p>
  • set_atqa
  • set_sak
  • set_uid

Dan sejurus sebelum memulakan emulasi, kami akan memanggil furi_hal_nfc_iso14443a_listener_set_col_res_data dengan parameter ini.

+----------------+                                  +----------------+
|   Reader       |                                  |   Card         |
+----------------+                                  +----------------+
        |                                                  |
    Field activation                                       |
        |                                                  |
        | --- REQA (Request Command Type A) -------------> |
        |                   26                             |
        |                                                  |
        | |
        |                                                  |
        | |
        |                                                  |
        | |
        | E0 50 BC A5                                      |
        |                                                  |
        | |    
        | D0 73 87                                         |
        |                                                  |
        | |
        | 0200A404000E325041592E5359532E444446303100E042   |
        |                                                  |
        | 



<p>Seterusnya, menetapkan Flipper Zero kepada mod emulator kad dilakukan menggunakan fungsi furi_hal_nfc_set_mode. Kali ini, kami menentukan mod FuriHalNfcModeListener, dan untuk teknologi, kami menggunakan nilai standard: FuriHalNfcTechIso14443a, FuriHalNfcTechIso14443b dan FuriHalNfcTechIso15693.</p>

<p>Akhir sekali, untuk memulakan emulasi, saya melaksanakan perintah run_emu, yang akan memulakan gelung tak terhingga menunggu pembaca berdekatan. Pemantauan acara dikendalikan oleh fungsi furi_hal_nfc_listener_wait_event.<br>
</p>

<pre class="brush:php;toolbar:false">    if(g_NfcTech == FuriHalNfcTechIso14443a) {
        furi_hal_nfc_iso14443a_listener_set_col_res_data(g_uid, g_uid_len, g_atqa, g_sak);
        fdt = ISO14443_3A_FDT_LISTEN_FC;
    }

Seterusnya, acara boleh mengambil beberapa nilai bergantung pada perkara yang telah dikesan:

  • FuriHalNfcEventFieldOn menunjukkan bahawa pengaktifan medan telah dikesan.
  • FuriHalNfcEventFieldOff menunjukkan bahawa medan telah dimatikan.
  • Acara yang paling penting ialah FuriHalNfcEventRxEnd, yang menunjukkan bahawa arahan daripada terminal telah diterima. Pada ketika ini, kami perlu menghantar jawapan kami. Sekali lagi, adalah penting untuk ambil perhatian bahawa semua pengendalian penghantaran arahan, sehingga dan termasuk antiperlanggaran, dilakukan secara automatik. Jadi, pada dasarnya kita boleh mula memproses arahan seperti pilih, sebagai contoh.
FuriHalNfcEvent event = furi_hal_nfc_listener_wait_event(100);

5 - Mengendalikan penerimaan arahan dan menghantar respons

Sekarang, mari lihat cara mengendalikan penerimaan arahan dan menghantar respons.

    while(true) {
        FuriHalNfcEvent event = furi_hal_nfc_listener_wait_event(100);
        if(event == FuriHalNfcEventTimeout) {
            if(cli_cmd_interrupt_received(cli)) {
                break;
            }
        }
        if(event & FuriHalNfcEventAbortRequest) {
            break;
        }
        if(event & FuriHalNfcEventFieldOn) {
            printf("on\r\n");
        }
        if(event & FuriHalNfcEventFieldOff) {
            furi_hal_nfc_listener_idle();
            printf("off\r\n");
        }
        if(event & FuriHalNfcEventListenerActive) {
            // Nothing
        }
        if(event & FuriHalNfcEventRxEnd) {
  • Penerimaan data dikendalikan melalui furi_hal_nfc_listener_rx(rx_data, rx_data_size, &rx_bits);. Kami memaparkan data yang diterima menggunakan printf, yang menghantar respons kepada terminal yang disambungkan ke Flipper. Perkara penting untuk difahami ialah sebaik sahaja kami menerima arahan, kami mesti bertindak balas dengan cepat. Ini bermakna kita tidak boleh menulis respons secara manual dalam shell-ia akan terlambat. Inilah sebabnya satu-satunya cara untuk berkomunikasi dengan Flipper adalah dengan menggunakan skrip Python dengan penghantar yang menentukan respons yang akan diberikan untuk setiap arahan yang diterima.
  • Kemudian, terminal menghantar respons yang kami dapat semula menggunakan fungsi nfc_emu_get_resp(cli, rx_cmd). Bahagian ini agak rumit kerana, dalam arahan shell, anda biasanya tidak mempunyai pertukaran bolak-balik. Jadi, saya menggunakan fungsi cli_getc(cli) untuk membaca aksara.

    • Kadangkala, saya mendapat watak yang tidak diingini 0xA. Jika ia adalah watak pertama yang diterima, saya melangkaunya, kerana saya membaca watak demi watak.
    • Watak pertama menunjukkan sama ada Flipper Zero perlu mengira dan menambah CRC pada perintah itu sendiri (0x31 bermakna ya, jika tidak tidak).
    • Kemudian, saya membaca aksara jawapan dalam format rentetan heksadesimal. Apabila kita menerima aksara 0xA, ia menunjukkan penerimaan telah selesai.
  • Akhir sekali, kami menukar rentetan perenambelasan kepada tatasusunan uint8_t menggunakan unhexify(tmp, (uint8_t*)bit_buffer_get_data(rx_data), len);.

  • Jika perlu, kami menambah CRC menggunakan add_crc.

  • Akhir sekali, kami boleh menghantar respons kepada pembaca menggunakan:

    FuriHalNfcError r = furi_hal_nfc_listener_tx(rx_data, bit_buffer_get_size(rx_cmd));.

Dan sekarang, bagaimanakah kita hendak mengesahkan semua ini?

6 - Pengesahan emulasi kad

6.1 - Bagaimana ia bermula ... (Hydra NFC v2)

Flipper Zero NFC Hacking - cannon fooder

Nah, kami boleh menggunakan pembaca telus kami dari siaran sebelumnya untuk mengesahkan emulator kami. Jadi, kami memerlukan dua Flipper Zero... yang saya tidak ada. Walau bagaimanapun, saya mempunyai Hydra NFC v2, yang membolehkan persediaan pembaca telus.

Flipper Zero NFC Hacking - cannon fooder

Saya hanya perlu menggunakan skrip daripada pynfc.

+----------------+                                  +----------------+
|   Reader       |                                  |   Card         |
+----------------+                                  +----------------+
        |                                                  |
    Field activation                                       |
        |                                                  |
        | --- REQA (Request Command Type A) -------------> |
        |                   26                             |
        |                                                  |
        | |
        |                                                  |
        | |
        |                                                  |
        | |
        | E0 50 BC A5                                      |
        |                                                  |
        | |    
        | D0 73 87                                         |
        |                                                  |
        | |
        | 0200A404000E325041592E5359532E444446303100E042   |
        |                                                  |
        | 



<p>Ia sangat praktikal kerana ia membolehkan kami menghantar arahan satu demi satu untuk mengesahkan segala-galanya:</p>

  • Menghantar REQA
  • Antiperlanggaran
  • Pilih
  • PPS
  • Menghantar TPDU

6.2 - Bagaimana ia selesai... (pembaca PC/SC).

Namun, pada hakikatnya, komunikasi agak rumit. Jadi, saya menggunakan pembaca PC/SC, ACR122U, untuk menghantar/menerima arahan APDU penuh, digabungkan dengan skrip Python (menggunakan pyscard ) untuk membuat ujian dunia sebenar.

Flipper Zero NFC Hacking - cannon fooder

Dalam kes saya, saya hanya memilih aplikasi PPSE.

    if(g_NfcTech == FuriHalNfcTechIso14443a) {
        furi_hal_nfc_iso14443a_listener_set_col_res_data(g_uid, g_uid_len, g_atqa, g_sak);
        fdt = ISO14443_3A_FDT_LISTEN_FC;
    }

Jadi sekarang, emulator kad perlu mengendalikan lebih banyak acara. Oleh itu, saya mencipta skrip Python di bawah untuk menguruskan kes ini. Terdapat banyak perkara yang perlu dijelaskan, seperti jenis TPDU yang berbeza (i-block, r-block, s-block), tetapi itu akan ada dalam catatan blog akan datang.

FuriHalNfcEvent event = furi_hal_nfc_listener_wait_event(100);

Dengan ini, ia berfungsi dengan baik, dan emulasinya sangat stabil. Saya boleh meletakkan atau mengalih keluar Flipper daripada pembaca dan menghantar arahan beberapa kali, dan ia berfungsi setiap kali. Sekali lagi, Flipper mempunyai pelaksanaan yang sangat baik bagi lapisan NFCnya, dan APInya membolehkan banyak fungsi dengan usaha yang minimum dalam pelaksanaannya.

Di bawah, anda mempunyai sampel output daripada skrip Python.

+----------------+                                  +----------------+
|   Reader       |                                  |   Card         |
+----------------+                                  +----------------+
        |                                                  |
    Field activation                                       |
        |                                                  |
        | --- REQA (Request Command Type A) -------------> |
        |                   26                             |
        |                                                  |
        | |
        |                                                  |
        | |
        |                                                  |
        | |
        | E0 50 BC A5                                      |
        |                                                  |
        | |    
        | D0 73 87                                         |
        |                                                  |
        | |
        | 0200A404000E325041592E5359532E444446303100E042   |
        |                                                  |
        | 



<h3>
  
  
  6.3 Sedikit Proxmark juga
</h3>

<p><img src="/static/imghwm/default1.png" data-src="https://img.php.cn/upload/article/000/000/000/172964254814325.jpg?x-oss-process=image/resize,p_40" class="lazy" alt="Flipper Zero NFC Hacking - cannon fooder"></p>

<p>Menggunakan Proxmark 3 berguna untuk menyahpepijat komunikasi dalam mod menghidu: Saya meletakkannya di antara pembaca dan kad (yang boleh menjadi kad tulen atau Flipper), dan saya dapat menyemak pertukaran data.<br>
</p>

<pre class="brush:php;toolbar:false">    if(g_NfcTech == FuriHalNfcTechIso14443a) {
        furi_hal_nfc_iso14443a_listener_set_col_res_data(g_uid, g_uid_len, g_atqa, g_sak);
        fdt = ISO14443_3A_FDT_LISTEN_FC;
    }

Apa seterusnya?

Baik, apa seterusnya?

  • Pertama, saya boleh memberikan lebih banyak penjelasan tentang skrip Python emulasi kad.
  • Selain itu, saya harus melaksanakan cara untuk menghentikan emulasi kad apabila butang ditekan, kerana pada masa ini gelung menunggu acara tidak pernah selesai. Satu-satunya cara untuk keluar adalah dengan memulakan semula Flipper.
  • Selain itu, kami boleh melakukan beberapa perkara yang menyeronokkan dengan menggunakan kedua-dua pembaca telus dan emulator kad pada masa yang sama, contohnya, untuk melakukan serangan lelaki di tengah dan mengubah suai komunikasi secara langsung!

Atas ialah kandungan terperinci Flipper Zero NFC Hacking - pemakan meriam. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

Kenyataan
Kandungan artikel ini disumbangkan secara sukarela oleh netizen, dan hak cipta adalah milik pengarang asal. Laman web ini tidak memikul tanggungjawab undang-undang yang sepadan. Jika anda menemui sebarang kandungan yang disyaki plagiarisme atau pelanggaran, sila hubungi admin@php.cn
Rancangan Python 2 jam: Pendekatan yang realistikRancangan Python 2 jam: Pendekatan yang realistikApr 11, 2025 am 12:04 AM

Anda boleh mempelajari konsep pengaturcaraan asas dan kemahiran Python dalam masa 2 jam. 1. Belajar Pembolehubah dan Jenis Data, 2.

Python: meneroka aplikasi utamanyaPython: meneroka aplikasi utamanyaApr 10, 2025 am 09:41 AM

Python digunakan secara meluas dalam bidang pembangunan web, sains data, pembelajaran mesin, automasi dan skrip. 1) Dalam pembangunan web, kerangka Django dan Flask memudahkan proses pembangunan. 2) Dalam bidang sains data dan pembelajaran mesin, numpy, panda, scikit-learn dan perpustakaan tensorflow memberikan sokongan yang kuat. 3) Dari segi automasi dan skrip, Python sesuai untuk tugas -tugas seperti ujian automatik dan pengurusan sistem.

Berapa banyak python yang boleh anda pelajari dalam 2 jam?Berapa banyak python yang boleh anda pelajari dalam 2 jam?Apr 09, 2025 pm 04:33 PM

Anda boleh mempelajari asas -asas Python dalam masa dua jam. 1. Belajar pembolehubah dan jenis data, 2. Struktur kawalan induk seperti jika pernyataan dan gelung, 3 memahami definisi dan penggunaan fungsi. Ini akan membantu anda mula menulis program python mudah.

Bagaimana Mengajar Asas Pengaturcaraan Pemula Komputer Dalam Kaedah Projek dan Masalah Dikemukakan Dalam masa 10 Jam?Bagaimana Mengajar Asas Pengaturcaraan Pemula Komputer Dalam Kaedah Projek dan Masalah Dikemukakan Dalam masa 10 Jam?Apr 02, 2025 am 07:18 AM

Bagaimana Mengajar Asas Pengaturcaraan Pemula Komputer Dalam masa 10 jam? Sekiranya anda hanya mempunyai 10 jam untuk mengajar pemula komputer beberapa pengetahuan pengaturcaraan, apa yang akan anda pilih untuk mengajar ...

Bagaimana untuk mengelakkan dikesan oleh penyemak imbas apabila menggunakan fiddler di mana-mana untuk membaca lelaki-dalam-tengah?Bagaimana untuk mengelakkan dikesan oleh penyemak imbas apabila menggunakan fiddler di mana-mana untuk membaca lelaki-dalam-tengah?Apr 02, 2025 am 07:15 AM

Cara mengelakkan dikesan semasa menggunakan fiddlerevery di mana untuk bacaan lelaki-dalam-pertengahan apabila anda menggunakan fiddlerevery di mana ...

Apa yang perlu saya lakukan jika modul '__builtin__' tidak dijumpai apabila memuatkan fail acar di Python 3.6?Apa yang perlu saya lakukan jika modul '__builtin__' tidak dijumpai apabila memuatkan fail acar di Python 3.6?Apr 02, 2025 am 07:12 AM

Memuatkan Fail Pickle di Python 3.6 Kesalahan Laporan Alam Sekitar: ModulenotFoundError: Nomodulenamed ...

Bagaimana untuk meningkatkan ketepatan segmentasi kata Jieba dalam analisis komen tempat yang indah?Bagaimana untuk meningkatkan ketepatan segmentasi kata Jieba dalam analisis komen tempat yang indah?Apr 02, 2025 am 07:09 AM

Bagaimana untuk menyelesaikan masalah segmentasi kata Jieba dalam analisis komen tempat yang indah? Semasa kami mengadakan komen dan analisis tempat yang indah, kami sering menggunakan alat segmentasi perkataan jieba untuk memproses teks ...

Bagaimana cara menggunakan ungkapan biasa untuk memadankan tag tertutup pertama dan berhenti?Bagaimana cara menggunakan ungkapan biasa untuk memadankan tag tertutup pertama dan berhenti?Apr 02, 2025 am 07:06 AM

Bagaimana cara menggunakan ungkapan biasa untuk memadankan tag tertutup pertama dan berhenti? Semasa berurusan dengan HTML atau bahasa markup lain, ungkapan biasa sering diperlukan untuk ...

See all articles

Alat AI Hot

Undresser.AI Undress

Undresser.AI Undress

Apl berkuasa AI untuk mencipta foto bogel yang realistik

AI Clothes Remover

AI Clothes Remover

Alat AI dalam talian untuk mengeluarkan pakaian daripada foto.

Undress AI Tool

Undress AI Tool

Gambar buka pakaian secara percuma

Clothoff.io

Clothoff.io

Penyingkiran pakaian AI

AI Hentai Generator

AI Hentai Generator

Menjana ai hentai secara percuma.

Artikel Panas

R.E.P.O. Kristal tenaga dijelaskan dan apa yang mereka lakukan (kristal kuning)
3 minggu yang laluBy尊渡假赌尊渡假赌尊渡假赌
R.E.P.O. Tetapan grafik terbaik
3 minggu yang laluBy尊渡假赌尊渡假赌尊渡假赌
R.E.P.O. Cara Memperbaiki Audio Jika anda tidak dapat mendengar sesiapa
3 minggu yang laluBy尊渡假赌尊渡假赌尊渡假赌
WWE 2K25: Cara Membuka Segala -galanya Di Myrise
3 minggu yang laluBy尊渡假赌尊渡假赌尊渡假赌

Alat panas

Dreamweaver Mac版

Dreamweaver Mac版

Alat pembangunan web visual

EditPlus versi Cina retak

EditPlus versi Cina retak

Saiz kecil, penyerlahan sintaks, tidak menyokong fungsi gesaan kod

Versi Mac WebStorm

Versi Mac WebStorm

Alat pembangunan JavaScript yang berguna

Penyesuai Pelayan SAP NetWeaver untuk Eclipse

Penyesuai Pelayan SAP NetWeaver untuk Eclipse

Integrasikan Eclipse dengan pelayan aplikasi SAP NetWeaver.

SublimeText3 versi Mac

SublimeText3 versi Mac

Perisian penyuntingan kod peringkat Tuhan (SublimeText3)