Не так давно на Російського споживача обрушився цілий потік нових платіжних засобів: таксофонні картки, магнітні карти метро, банківські картки, і т.д. Торкнемося поки тільки таксофонних карт. Напевно, кожен задавався питанням, як же влаштована і як працює таксофонна карта, і чи можна її обдурити. Відповідь на друге питання поки промовчимо, а ось на перший спробуємо відповісти в доступній і популярній формі. В даному документі наведено лише алгоритм читання кар точок, але нічого не сказано про їх запис, тобто про сам процес зменшення кількості залишилися одиниць. Оскільки експерименти зі зменшенням власних грошей мені зі зрозумілих причин проводити не хочеться, інформація з цього приводу у мене мізерна і н е перевірена. Оскільки при бажанні найбільш загальну інформацію можна знайти в Інтернеті, то розмова піде саме про таксофонні картки компанії "Санкт-Петербурзькі таксофони". Для інших до арт наведена інформація може не відповідати дійсності.
Таксофонна карта відповідає міжнародному стандарту ISO 7816 в частині 1 і 2.
Кристал на карті являє собою електрично програмований ПЗУ з послідовним побітно виведенням інформації, виготовлене за технологією NMOS. У цьому ПЗУ використовується 128 біт. Щоб перепрограмувати карту, потрібно стерти інформацію з ПЗУ, але чіп захищений від ультрафіолетового опромінення спеціальною смолою. Навіть якщо Вам вдасться стерти чіп, то потрібно буде перепрограмувати спеціальну область виробника - перші 64 біта, а вона захищена від запису і плавким запобіжником, який перепалюється на фабриці при виробництві чіпа. Основний спосіб обману таксофонів - виготовлення емуляторів, тобто пристроїв, емулює роботу справжньої карти. Це досить легко зробити на сучасних однокристальних м ікроЕВМ. Основний спосіб захисту таксофонів від таких емуляторів - вимір міжелектродних опорів, ємностей і порівняння їх з номінальними, що дозволяє таксофону відрізнити емулятор від справжньої карти.
Розташування і призначення контактів на мапі
Всі сигнали відповідають ТТЛ рівнями. Зверніть увагу, що центральна пластинка з'єднана з землею.
Читання інформації з карти
Читання через паралельний порт комп'ютера
Оскільки всі сигнали відповідають рівню ТТЛ, то логічно використовувати для читання інформації звичайний принтерний порт. Не думаю, що треба наводити тут повний технічний опис роботи паралельного порту, призначення контактів і опис портів введення-виведення - це все можна знайти в спеціальній технічній літературі.
Апаратні засоби
Апаратні засоби являють собою відповідну частину роз'єму паралельного порту, шматок монтажного проводу і пристрій, що зчитує, яке може являти собою звичайний шматок текстоліту з отвору ми, в які вставлені штирі. Правда, в цьому випадку картку треба буде притискати руками. З'єднаємо контакти паралельного порту з контактами картки відповідно до наведеної таблиці:
Тут не вказано контакт 1 картки - харчування +5 В. Його можна взяти з роз'єму клавіатури або просто від батарейки.
програмні засоби
Використовуємо порт LPT1. Запис в принтерний порт здійснюється через порт 0x378. Записаний байт з'являється на вихідних контактах. Ми використовуємо біт 0 для сигналу Reset і біт 1 для сигналу Clk. Читання виконується через порт 0x379. У самому старшому бите з'явиться Інвертований значення з вхідного контакту 11 (Busy).
Що саме записано на мапі
Тепер ми і підійшли до найцікавішого місця - призначенням кожного біта, записаного на карті. Природно, що на картах інших міст це призначення буде іншим, але ми, як обіцяли, говоримо про пітерських картках. На картці використовуються тільки 16 байт. Всі інші рівні 0xFF. У процесі досліджень було проаналізовано близько 300 карток.
Приклади дампов пам'яті карт
- Ця карта на 50 одиниць закінчилася. Номер 0050415503. Придатна до 30.09.98
E9, 30, FF, 01, F1, E2, 80, C0
00, 00, 00, 00, 00, FF, 18, EA - Ця карта на 400 одиниць також порожня. Номер 0400155921. Придатна до 30.09.98
E9, 30, FF, 01, 88, A7, 9B, E8
00, 00, 00, 00, 00, FF, D9, 79 - Ось карта на 1000 одиниць. Залишилося 998. Номер 1000013039. Придатна до 31.12.99
E9, 30, FF, 01, F7, 3F, 59, DC
00, 01, 7F, 0F, 3F, FF, 68, 6B - Потім я подзвонив по цій карті. Залишилося 6 одиниць.
E9, 30, FF, 01, F7, 3F, 59, DC
00, 00, 00, 00, 3F, FF, 68, 6B - Нарешті, вона закінчилася.
E9, 30, FF, 01, F7, 3F, 59, DC
00, 00, 00, 00, 00, FF, 68, 6B
призначення полів
- Перші 4 байта - якийсь ідентифікатор. На всіх картах E9, 30, FF, 01.
- Наступні 4 байта - серійний номер карти. Розташувавши біти в байтах в зворотному порядку, а потім і самі байти, отримаємо 32 розрядне ціле без знака. Наприклад, байти F7, 3F, 59, DC на протилежне біт виглядають як EF, FC, 9A, 3B. Отримаємо номер карти 0x3B9AFCEF або 1000013039 в десятковому вигляді. Неважко помітити, що номер, надрукований на карті, завжди складається з 10 цифр, а перші 4 цифри - ємність картки.
- Наступні 5 байт - кількість одиниць, що залишилися на картці. Формат зберігання дуже цікавий: використовується кількість одиничних бітів в байті, починаючи з молодшого. Відповідно значення байта 07 відповідає 3 одиницям, значення 1F - п'яти, а 7F - семи одиницям. Максимальна кількість одиниць, що зберігаються в байті - сім. Відповідно використовується восьмерична система числення. Таким чином, байти 00, 01, 7F, 0F, 3F відповідають 01 746 в вісімковій системі або 998 одиниць в десятковій системі. Максимальна кількість одиниць може виражатися числом 77777 в вісімковій або 32767 в десятковій системі.
- Наступний байт завжди дорівнює FF. Схоже, він не використовується.
- Два останніх байта, мабуть, висловлюють CRC або інший контрольний код для перших 8 постійних байт, тому що при витрачанні одиниць вони не змінюються, але на кожній картці вони свої. Поки їх призначення не ясно.
Виявилося, що термін придатності не записаний на карті. По всій видимості, він якось пов'язаний з номером картки. Можливо, кожному терміну придатності відповідають певний діапазон номерів.
Як вже говорилося, з 10 цифр номера перші 4 висловлюють ємність карти. Решта 6 не ідентифікують карту однозначно, тому що вже випущено понад мільйон карт. Всього при подібній системі нумерації може існувати 6 мільйонів карт:
Винагородити Я зібрав 0 0