Цього разу головним героєм є бідна карта з водою школи (карта з гарячою водою)
Перевіривши за допомогою MCT (Mifare Classic Tool), встановленим на NFC-телефоні, водна карта дійсно належить до типу Mifare Classic 1k
Інструменти, використані для цієї тріщини: комп'ютер, ACR122U, мобільний телефон з функцією NFC та водна картка
Перед зломом потрібно створити відповідне середовище для комп'ютера, і ви маєте встановити його на комп'ютер. NET Farmwork 4 і Java, будь ласка, завантажте та встановіть онлайн, і програмне забезпечення, яке буде використовуватися пізніше, залежить від цих двох бібліотек виконання.
Після встановлення runtime потрібно встановити драйвер ACR122U (стаття додається до посилання на програмне забезпечення), а для подальшої розробки я також встановив SDK.
Після встановлення драйвера та SDK підключіть ACR122U до комп'ютера, і пристрій запрацює нормально. Вмикаємо водяну картку, і ACR122U дзвінок спрацює, і колір світлодіода змінюється
Програма для перевірки можливості експлуатації вразливостей — це mfoc, а версія mfoc для Windows називається mfocgui, але mfocgui трохи проблематична для студентів, які новачки в RFID-безпеці, тому цього разу вона безпосередньо використовує сервісну програму M1 card (фактично спрощену версію mfocgui).
Після відкриття інтерфейс програми дуже простий, з однією кнопкою — почати зламування. Я бачив свій ACR122U у списку зчитувача карт, тож просто натисніть «почати зламувати»
Потім чекайте, поки програма сама зламає ключ.
Незабаром було зрозуміло, що всі сектори були відгалочені і тріснуті.
Після успішного зламу кореневий каталог генерує дамп-файл цієї карти, розмір якого становить 1kb, і вся карта зчитується.
Однак mfoc спочатку працював у середовищі Linux, і файл дампу, згенерований mfocgui, портований на Windows, не можна використовувати безпосередньо, тому для відновлення файлу дампу 1 КБ у файл дампу 4 КБ потрібен інструмент для ремонту (завантажити fixdump).
fixdump — це операція командного рядка і має бути встановлена за допомогою . Бібліотека виконання NET Farmwork 4, щоб полегшити роботу команд, ми копіюємо файл дампу до каталогу fixdump і відкриваємо cmd для його виправлення. Команда проста — просто "fixdump", і згенерований файл безпосередньо перезапише вихідний файл.
Після завершення відновлення відкрийте його у шістнадцятковому редакторі, такому як UltraEdit або WinHex, і ви зможете побачити дані файлу дампу.
Бачите дані, які я оформив у рамку на фото вище? Це керуючий сегмент сектора карти, з якого перші 6 байтів і останні 6 байтів FFFFFFFFFF є паролем цього сектора, а FF078069 посередині — керуючим бітом.
Після того, як я дізнався пароль, я імпортував його в MCT і почав читати дані картки.
Завдяки функції MCT із підсвіченням даних ми чітко бачимо, що в 4 секторах є два ряди блоків значень, а поточний баланс на моїй картці становить 32.31. Значення блоку значення повертається двічі і один раз, і зберігається у найнижчій адресі. Побачивши перший блок значення, 0C9F, оскільки дані комп'ютера зберігаються у зворотному порядку, дійсні дані дорівнюють 9F0C, що дорівнює 3231 у десятковому порядку. 60F3 у середній частині перевернута, а зворотний порядок 60F3 — це F360, що 1111001101100000 при зворотному порядку, 0000110010011111 при зворотному порядку, і 3231, коли змінюється на десяткову. Останній абзац, як і перший, не забирається і не зберігається. 11 і EE в кінці — це адреси, які можна ігнорувати, якщо адреси згодом залишаються послідовними. До цього моменту дані картки були зламані, бо вона не використовувала шифрування, тепер я зміню гроші картки на 999.99, щоб спробувати: 999.99 юаня має бути десятковим 99999, шістнадцятковим — 01869F, зворотний результат — 9F8601, інші біти обчислюються за тим самим принципом, або ми можемо використати власний інструмент розрахунку блоків значень MCT і нарешті обчислити результат, як показано на рисунку нижче.
Запишіть дані на картку, а тепер час йти на практику з машинами.
|