Animal
10.12.2008, 03:54
Случайно наткнулся на цикл интересных, познавательных и грамотно написанных статей, хоть на данный момент и не очень актуальных для прямого применения. Очень понравилась позиция автора: это не руководство к действию типа
" 1) включаем паяльник;
2) берем паяльник в левую руку;
- - - -
- - - -
1235) берем получившийся девайс и бежим к ближайшему таксофону в Токио звонить на халяву
"
этот материал полезен для людей, для которых слово "эмуляция" не является иноземным ругательством, которые очень хотят познакомится с этим словом поближе, которые обладают пытливым умом и оч.умелыми рученками.
( Ничего себе вступление зарядил! :)) Animal)
Об эмуляторе таксофонных карт для начинающих. Часть 1
На написание этой статьи меня сподвигнули жаркие споры на онлайн страницах Хакер'a по поводу создания эмулятора таксофонной карты. У многих кто только проникся идеей создания такового возникает множество вопросов: "а как это работает?", "а что означают контакты?" и т.д. Не буду рассматривать все существующие варианты карт, постараюсь остановиться только на московских картах, применяемых в МГТС. Итак, карты бывают нескольких видов, 6 или 8 контактные. В последнее время применяются в основном 6 контактные карты.
Изображение на карте достаточно красноречиво ;), поэтому я постараюсь все объяснить. Итак, что мы видим перед собой? Я не буду загромождать ваши умы различной технической информацией о размерах карты, стойкости к внешним воздействиям и т.д. Перейду сразу к главному - что означают контакты и как их можно использовать в своих интересах.
Итак, в порядке сверху вниз и слева направо: Самый верхний левый контакт - напряжение питания карты. Карта представляет собой микроэлектронное устройство которому необходимо питание. Напряжение питания карты равно +5V. Под ним располагается контакт Reset, еще ниже вывод Clock. При помощи этих контактных площадок и происходит управление картой. Различные комбинации управляющих сигналов устанавливают режимы работы карты и позволяют считывать и даже записывать информацию. Однако рано радоваться. Не все так просто. Перейдем к правому ряду контактов. Верхний правый контакт - "земля" или общий, площадка под ним не используется в нынешней реализации, и самая нижняя правая площадка - вывод I/O, или порт ввода/вывода. Через этот порт карта общается с внешним миром. Возникает вопрос, а можно ли считать информацию с карты? Да и не представляет особого труда для тех, кто не боится взять в руки паяльник. Трудной задачей может показаться изготовление надежного соединения с контатными площадками, но это-то как раз проще всего. Достаточно купить считыватель чип-карт, например в магазине "Мир соединений". Стоимость такого считывателя порядка 70 рублей. Во время посещения магазина стоит прикупить вилку разъема, втыкаемую в LPT порт компьютера, потому как именно через этот порт мы и будем "общаться" с картой. Стоит прикупить немного провода и кусок текстолита, на который впаяется считыватель. Хотя можно просто подпаяться к ножкам считывателя, но они достаточно хрупкие и могут легко отломиться. Не буду предлагать конкретную конструкцию, должны же вы проявить хоть немного самостоятельности. ;) Наиболее нетерпеливые уже наверно ждут не дождутся когда, когда будет схема! Дождались. Вот вам схема соединений.
http://s54.radikal.ru/i145/0812/f4/0b3c44534a19.gif (http://www.radikal.ru)
Контакт Сигнал Вывод
CLK D0 2
RST D1 3
IORD ACK 10
IOWR D3 5
LED D2 4
CARD BUSY 11
GND GND 25
Думаю стоит пару слов сказать о самой схеме. Питание карты изображено схематично. В качестве источниа питания вы конечно же можете использовать батарейку, но более правильно будет собрать простейший источник питания. Теперь о транзисторе. Транзистор для простого чтения карты не нужен. Но если вы решите экспериментировать с режимами аутентификации - он понадобится. Это может быть любой N-P-N транзистор, например КТ315. ;) Старые радиогубители меня поймут... Ностальгия... ;) В базу транзистора можно включить сопротивление, но и так работает... ;) Светодиод и ключ необязательно, они используются исключительно для удобства пользователя. Но наиболее требовательные к сервису могут их поиспользовать. ;) Об использовании, содержимом и прочем мы поговорим в следующий раз.
Об эмуляторе таксофонных карт для начинающих. Часть 2
Ну что, продолжим? Я надеюсь материальная сторона вопроса нас стеснять не будет. В первой части я предложил примерное решение вопроса подключения карты к компьютеру, на мой взгляд наиболее простое в своей реализации. Для работы с картой нужен софт, в качестве которого я предложил использовать SmartLab. Работу с программой стоит начать с установок. После запуска программы нажмите Ctrl+E или воспользуйтесь пунктом меню File->Settings. На закладке Hardware необходимо выбрать порт, к которому подключено устройство, в качестве интерфейса установите custom LPT device. Далее выполните настройки в соотвтствии с распайкой контактов кард-ридера, если он выполнен в соответствии схемы из первой части - можно оставить настройку по умолчанию. Но проверить будет не лишне. ;) Далее всятавляем карту в ридер и жмем кнопку MEM. Далее кнопку RD. В окне Memory dump появится содержимое карты памяти. Если окно заполнено нулями или единицами стоит проверить правильность сборки ридера и настройку программы. Теперь поговорим о специальных областях карты, отмеченных в программе цветом. Зеленая область, содержащая 40 бит, будет отображать количество единиц на карте. Посчитать остаток на карте достаточно просто. Это восьмеричный счетчик. Первые восемь бит умножаются на 4096, последующие восемь на 512, следующие на 64, следующие на 8 и последние на 1. Например, число 12 будет выглядеть так: 00000000 00000000 00000000 00000001 00001111 Синим отмечена так называемая пользовательская область. В начале область 1 и далее область 2. Область 2 в картах МГТС не используется. И наконец красным отмечен бит 110, так называемый бит активации активной аутентификации карты. Зачем он и что с ним делать мы рассмотрим позднее, наиболее нетерпеливые могут прочитать о нем в моей "Эссе об авторизации таксофонных карт". В начале карты содержится закодированный номер карты. Не хочу останавливаться на информации содержащейся на карте более подробно, такой информации более чем достаточно. Многие считают, что для создания эмулятора достаточно считать карту и ее содержимое засунуть в эмулятор. Отчасти они правы. Давайти пока примем это утверждение верным (а верно оно для пустой карты) и попытаемся создать эмулятор. Чтобы было чего добиваться, поставим перед собой цель: создать устройство, которое при его использовании совместно с таксофоном позволило бы пронаблюдать надпись "Кредит исчерпан". Наиболее горячие могут попытаться добиться большего, но мы пойдем другим путем. ;) Итак, информация с карты у нас есть. Надеюсь что у вас все прошло гладко и считать карту получилось. Что мы имеем? Я специально не останавливаюсь на вариантах "а что надо сделать, чтобы пустая карта стала полной?" и т.д. Карту разрабатывали далеко не дураки, существуют эти карты не первый год и максимум существующих дыр алгоритма наверняка уже заткнуты. Поэтому мы пойдем по пути создания подобия карты - ее эмуляции. Далее, когда я подробнее остановлюсь на вопросах активной авторизации я рассмотрю предложения некоторых личностей использовать существующие карты через некоторый переходничок, запрещающий уменьшать количество единиц на карте, и покажу их несостоятельность. Итак, примем за аксиому что создание эмулятора - единственный вариант добиться желаемого. Тем более что создание эмулятора поможет нам лучше уяснить принцип работы синхронного режима обмена с картой стандарта ISO7816. Не вдаваясь пока в подробности, скажу что у карты есть несколько команд, которые мы назовем так: Reset, Write, Write w/carry, Next addr. Reset устанавливает внутренний указатель адреса карты на 0 бит. Значение этого бита после завершения процедуры сброса появляется на выходе карты, проще говоря на выводе I/O. Next addr переводит внутренний указатель адреса на следующий бит. Карта содержит 512 бит информации. Если указатель находился на последнем, 511 бите, то текущим станет бит 0. То есть имеем адресный цикл. Write производит установку текущего бита в 1. Результат команды зависит от того, над каким битом производится действие. Write w/carry производит установку текущего бита в 1 и обнуление следующего байта за текущим байтом восьмеричного счетчика кредита. Результат тоже зависит от бита, над которым производится действие. Зачем такое длинное вступление? Это должно нам помочь разобрать алгоритм опроса карты таксофоном. Вот он:
Reset 11101000 00110000 11001111 00001001
00000000 11001010 01001010 10000110
00000000 00000000 00000000 00000000
00000000 11111111 01010110 00000100 (128 bits read)
Reset 11101000 00110000 11001111 00001001
00000000 11001010 01001010 10000110 (64 bits read)
Bit written at address 64
00000000 00000000 00000000 00000000
Что мы видим? Таксофон командой Reset инициализирует карту. Далее считывает 128 бит карты, используя команду смены адреса. При установке нового адреса, значение по этому адресу выводится на выход карты. После этого производится установка нулевого адреса командой сброса и считываются 64 бита. Далее делается попытка записи при помощи команды Write по адресу 64. Обращаю внимание на то, что установка произвольного адреса карты возможна только ее сбросом и чтением предшествующих нужному битов. Но вернемся к алгоритму: далее считываются еще 40 бит. Вероятно, запись в область счетчика кредита производится для проверки на соответствие стандарту обработки команды Write. Вот собственно и все. Если все прошло успешно мы получим сообщение, что кредит исчерпан. ;) Это теория. Теперь можно переходить к практике. Мне кажется, наиболее просто можно собрать эмулятор на базе однокристалльной МикроЭВМ фирмы Microchip PIC16F84. Для этой микросхемы обвязка минимальна, цена ее не велика, она свободно продается во многих магазинах. Для программирования микросхемы нам понадобится компилятор с любого языка, например с ассемблера и программатор. Компилятор можно взять на сайте производителя, схему простейшего программатора с сервисной программой можно найти здесь. На этой лиричной ноте позвольте откланяться, в следующей части мы приступим к написанию программы для микроконтроллера, определимся со схемой включения, подробней разберем реализацию команд карты и постараемся добиться поставленной цели. ;)
Источник материала: http://kazus.ru/articles/6/index.html
" 1) включаем паяльник;
2) берем паяльник в левую руку;
- - - -
- - - -
1235) берем получившийся девайс и бежим к ближайшему таксофону в Токио звонить на халяву
"
этот материал полезен для людей, для которых слово "эмуляция" не является иноземным ругательством, которые очень хотят познакомится с этим словом поближе, которые обладают пытливым умом и оч.умелыми рученками.
( Ничего себе вступление зарядил! :)) Animal)
Об эмуляторе таксофонных карт для начинающих. Часть 1
На написание этой статьи меня сподвигнули жаркие споры на онлайн страницах Хакер'a по поводу создания эмулятора таксофонной карты. У многих кто только проникся идеей создания такового возникает множество вопросов: "а как это работает?", "а что означают контакты?" и т.д. Не буду рассматривать все существующие варианты карт, постараюсь остановиться только на московских картах, применяемых в МГТС. Итак, карты бывают нескольких видов, 6 или 8 контактные. В последнее время применяются в основном 6 контактные карты.
Изображение на карте достаточно красноречиво ;), поэтому я постараюсь все объяснить. Итак, что мы видим перед собой? Я не буду загромождать ваши умы различной технической информацией о размерах карты, стойкости к внешним воздействиям и т.д. Перейду сразу к главному - что означают контакты и как их можно использовать в своих интересах.
Итак, в порядке сверху вниз и слева направо: Самый верхний левый контакт - напряжение питания карты. Карта представляет собой микроэлектронное устройство которому необходимо питание. Напряжение питания карты равно +5V. Под ним располагается контакт Reset, еще ниже вывод Clock. При помощи этих контактных площадок и происходит управление картой. Различные комбинации управляющих сигналов устанавливают режимы работы карты и позволяют считывать и даже записывать информацию. Однако рано радоваться. Не все так просто. Перейдем к правому ряду контактов. Верхний правый контакт - "земля" или общий, площадка под ним не используется в нынешней реализации, и самая нижняя правая площадка - вывод I/O, или порт ввода/вывода. Через этот порт карта общается с внешним миром. Возникает вопрос, а можно ли считать информацию с карты? Да и не представляет особого труда для тех, кто не боится взять в руки паяльник. Трудной задачей может показаться изготовление надежного соединения с контатными площадками, но это-то как раз проще всего. Достаточно купить считыватель чип-карт, например в магазине "Мир соединений". Стоимость такого считывателя порядка 70 рублей. Во время посещения магазина стоит прикупить вилку разъема, втыкаемую в LPT порт компьютера, потому как именно через этот порт мы и будем "общаться" с картой. Стоит прикупить немного провода и кусок текстолита, на который впаяется считыватель. Хотя можно просто подпаяться к ножкам считывателя, но они достаточно хрупкие и могут легко отломиться. Не буду предлагать конкретную конструкцию, должны же вы проявить хоть немного самостоятельности. ;) Наиболее нетерпеливые уже наверно ждут не дождутся когда, когда будет схема! Дождались. Вот вам схема соединений.
http://s54.radikal.ru/i145/0812/f4/0b3c44534a19.gif (http://www.radikal.ru)
Контакт Сигнал Вывод
CLK D0 2
RST D1 3
IORD ACK 10
IOWR D3 5
LED D2 4
CARD BUSY 11
GND GND 25
Думаю стоит пару слов сказать о самой схеме. Питание карты изображено схематично. В качестве источниа питания вы конечно же можете использовать батарейку, но более правильно будет собрать простейший источник питания. Теперь о транзисторе. Транзистор для простого чтения карты не нужен. Но если вы решите экспериментировать с режимами аутентификации - он понадобится. Это может быть любой N-P-N транзистор, например КТ315. ;) Старые радиогубители меня поймут... Ностальгия... ;) В базу транзистора можно включить сопротивление, но и так работает... ;) Светодиод и ключ необязательно, они используются исключительно для удобства пользователя. Но наиболее требовательные к сервису могут их поиспользовать. ;) Об использовании, содержимом и прочем мы поговорим в следующий раз.
Об эмуляторе таксофонных карт для начинающих. Часть 2
Ну что, продолжим? Я надеюсь материальная сторона вопроса нас стеснять не будет. В первой части я предложил примерное решение вопроса подключения карты к компьютеру, на мой взгляд наиболее простое в своей реализации. Для работы с картой нужен софт, в качестве которого я предложил использовать SmartLab. Работу с программой стоит начать с установок. После запуска программы нажмите Ctrl+E или воспользуйтесь пунктом меню File->Settings. На закладке Hardware необходимо выбрать порт, к которому подключено устройство, в качестве интерфейса установите custom LPT device. Далее выполните настройки в соотвтствии с распайкой контактов кард-ридера, если он выполнен в соответствии схемы из первой части - можно оставить настройку по умолчанию. Но проверить будет не лишне. ;) Далее всятавляем карту в ридер и жмем кнопку MEM. Далее кнопку RD. В окне Memory dump появится содержимое карты памяти. Если окно заполнено нулями или единицами стоит проверить правильность сборки ридера и настройку программы. Теперь поговорим о специальных областях карты, отмеченных в программе цветом. Зеленая область, содержащая 40 бит, будет отображать количество единиц на карте. Посчитать остаток на карте достаточно просто. Это восьмеричный счетчик. Первые восемь бит умножаются на 4096, последующие восемь на 512, следующие на 64, следующие на 8 и последние на 1. Например, число 12 будет выглядеть так: 00000000 00000000 00000000 00000001 00001111 Синим отмечена так называемая пользовательская область. В начале область 1 и далее область 2. Область 2 в картах МГТС не используется. И наконец красным отмечен бит 110, так называемый бит активации активной аутентификации карты. Зачем он и что с ним делать мы рассмотрим позднее, наиболее нетерпеливые могут прочитать о нем в моей "Эссе об авторизации таксофонных карт". В начале карты содержится закодированный номер карты. Не хочу останавливаться на информации содержащейся на карте более подробно, такой информации более чем достаточно. Многие считают, что для создания эмулятора достаточно считать карту и ее содержимое засунуть в эмулятор. Отчасти они правы. Давайти пока примем это утверждение верным (а верно оно для пустой карты) и попытаемся создать эмулятор. Чтобы было чего добиваться, поставим перед собой цель: создать устройство, которое при его использовании совместно с таксофоном позволило бы пронаблюдать надпись "Кредит исчерпан". Наиболее горячие могут попытаться добиться большего, но мы пойдем другим путем. ;) Итак, информация с карты у нас есть. Надеюсь что у вас все прошло гладко и считать карту получилось. Что мы имеем? Я специально не останавливаюсь на вариантах "а что надо сделать, чтобы пустая карта стала полной?" и т.д. Карту разрабатывали далеко не дураки, существуют эти карты не первый год и максимум существующих дыр алгоритма наверняка уже заткнуты. Поэтому мы пойдем по пути создания подобия карты - ее эмуляции. Далее, когда я подробнее остановлюсь на вопросах активной авторизации я рассмотрю предложения некоторых личностей использовать существующие карты через некоторый переходничок, запрещающий уменьшать количество единиц на карте, и покажу их несостоятельность. Итак, примем за аксиому что создание эмулятора - единственный вариант добиться желаемого. Тем более что создание эмулятора поможет нам лучше уяснить принцип работы синхронного режима обмена с картой стандарта ISO7816. Не вдаваясь пока в подробности, скажу что у карты есть несколько команд, которые мы назовем так: Reset, Write, Write w/carry, Next addr. Reset устанавливает внутренний указатель адреса карты на 0 бит. Значение этого бита после завершения процедуры сброса появляется на выходе карты, проще говоря на выводе I/O. Next addr переводит внутренний указатель адреса на следующий бит. Карта содержит 512 бит информации. Если указатель находился на последнем, 511 бите, то текущим станет бит 0. То есть имеем адресный цикл. Write производит установку текущего бита в 1. Результат команды зависит от того, над каким битом производится действие. Write w/carry производит установку текущего бита в 1 и обнуление следующего байта за текущим байтом восьмеричного счетчика кредита. Результат тоже зависит от бита, над которым производится действие. Зачем такое длинное вступление? Это должно нам помочь разобрать алгоритм опроса карты таксофоном. Вот он:
Reset 11101000 00110000 11001111 00001001
00000000 11001010 01001010 10000110
00000000 00000000 00000000 00000000
00000000 11111111 01010110 00000100 (128 bits read)
Reset 11101000 00110000 11001111 00001001
00000000 11001010 01001010 10000110 (64 bits read)
Bit written at address 64
00000000 00000000 00000000 00000000
Что мы видим? Таксофон командой Reset инициализирует карту. Далее считывает 128 бит карты, используя команду смены адреса. При установке нового адреса, значение по этому адресу выводится на выход карты. После этого производится установка нулевого адреса командой сброса и считываются 64 бита. Далее делается попытка записи при помощи команды Write по адресу 64. Обращаю внимание на то, что установка произвольного адреса карты возможна только ее сбросом и чтением предшествующих нужному битов. Но вернемся к алгоритму: далее считываются еще 40 бит. Вероятно, запись в область счетчика кредита производится для проверки на соответствие стандарту обработки команды Write. Вот собственно и все. Если все прошло успешно мы получим сообщение, что кредит исчерпан. ;) Это теория. Теперь можно переходить к практике. Мне кажется, наиболее просто можно собрать эмулятор на базе однокристалльной МикроЭВМ фирмы Microchip PIC16F84. Для этой микросхемы обвязка минимальна, цена ее не велика, она свободно продается во многих магазинах. Для программирования микросхемы нам понадобится компилятор с любого языка, например с ассемблера и программатор. Компилятор можно взять на сайте производителя, схему простейшего программатора с сервисной программой можно найти здесь. На этой лиричной ноте позвольте откланяться, в следующей части мы приступим к написанию программы для микроконтроллера, определимся со схемой включения, подробней разберем реализацию команд карты и постараемся добиться поставленной цели. ;)
Источник материала: http://kazus.ru/articles/6/index.html