Я долго собирался написать что-нибудь эдакое, вынашивал идеи всяких статей на очень умные темы. Но вместо этого я сейчас опишу один автобиографичный эпизод, которым я очень даже горжусь в техническом плане, но о котором безумно сожалею в моральном.
Не буду скрывать имен и подробностей, т. к. во-первых, дело было давно, а во-вторых, оно вполне себе логически закончилось и не думаю, что кто-то из участников тех событий еще относится к ним не как к поучительной истории из боевой юности. К тому же технические подробности давно устарели и вряд ли кому пригодятся (да и, собственно, ни исходников ни готовых продуктов не сохранилось, по описанным ниже причинам).
Итак, дело было в 1997-м году, когда я был студентом второго курса питерской «Корабелки» (СПбГМТУ). В Петербург я понаехал в сознательном уже возрасте 21 года из Калининградской области, где прожил всю жизнь до этого. Понаехал я уже с мощным ИТ-бекграундом, т.к. фанатично занимался программированием примерно с 13 лет (чтоб вы представляли масштаб фанатизма — я написал две игры и графический редактор для УКНЦ прямо в восьмеричных машинных кодах, используя только процессорный отладчик).
Учился я в одной группе с человеком, который настолько же фанатично увлекался электроникой, абсолютным повелителем паяльника, Кириллом. Как-то так само собой получилось, что точкой совместного приложения наших усилий стал реверс-инжиниринг платежной системы питерских таксофонов. Ну вы понимаете, родители далеко, звонить надо, денег нет, зато есть свободное время и две дурные головы.
В то время в Петербурге таксофонами занималась (и сейчас занимается, но по понятным причинам, не очень успешно) компания СПТ — Санкт-Петербургские Таксофоны. По всему городу были установлены довольно современные по тем меркам аппараты. Номер модели с ходу не нашел, выглядели они вот так (картинка тоже нашлась не самая качественная):
Посмотреть вложение 29622
Принимали эти таксофоны чип-карты стандарта ISO-7816-2 емкостью от 25 до 1000 единиц (одна единица — минута местного разговора или несколько секунд междугородного). Собрав всю имеющуюся на тот момент в FIDO и в дефицитном интернете информацию о видах и протоколах карт, мы принялись за работу. Довольно скоро мы собрали ридер, подключающийся к LPT порту компьютера. Была также написана программа, читающая содержимое карт. Карта представляет собой память небольшого объема, одна часть которой содержит информацию об оставшихся единицах и может быть изменена (только в сторону уменьшения), вторая часть содержит служебную информацию: производитель, серийный номер, что-то еще.
Накопив достаточное количество знаний о протоколе обмена таксофона с карточкой и собрав небольшую коллекцию дампов карт, мы приступили к выполнению программы-максимум, то есть к созданию эмулятора карты, который бы вел себя как обычная карта, но область единиц была бы доступна на запись любых чисел. В качестве мозга эмулятора был выбран микроконтроллер PIC16F84a, программа его писалась на С в среде Borland C 3.0. Я занимался софтовой частью, то есть писал программу для микроконтроллера и служебные программы для компьютера, Кирилл был властелином микроконтроллера и монстром паяльника.
Процесс построения и отладки первой версии эмулятора был сущим адом. В железном плане первая версия была весьма неказистой и представляла собой карточку с выфрезерованными родными мозгами, из которой торчал жгут проводов, на котором висела плата с контроллером и обвязкой. К плате синей, конечно же, изолентой была прикручена квадратная батарейка. Мало того, из-за отсутствия полной информации мы многое делали наугад (тайминги протокола приходилось подбирать методом проб и ошибок), так еще и представьте себе процесс проверки очередной сборки прошивки: «так, мы поменяли здесь число 10 на 12, пойдем пройдемся пару километров по морозу до ближайшего таксофона, подождем, пока вокруг не будет любопытных граждан, воткнем девайс в таксофон, увидим в сотый раз надпись „Ошибка 8“, тихо выругаемся и пойдем обратно». А теперь представьте себе нашу радость, когда на сто первый раз эмулятор частично заработал и таксофон показал долгожданное «25 единиц». Этот этап занял у нас примерно полгода.
После этого последовали еще полгода совершенствования железной части, было изготовлено две промежуточные версии эмулятора и бессчетное множество сборок прошивки. Финальная версия железа казалась мне тогда просто верхом инженерной мысли: кудесник Кирилл смог избавиться от внешнего питания (пришлось также радикально оптимизировать прошивку для этого, т.к. предыдущие версии не успевали запуститься, питание подавалось слишком незадолго до начала обмена данными) а также перешел с DIP корпуса на SOIC. В итоге эмулятор выглядел в точности как обычная карта, из таксофона уже не торчала никакая борода проводов. Корпус микроконтроллера прятался в небольшом утолщении, залитом эпоксидкой, в том месте, где у таксофонного картоприемника было углубление для пальцев. К сожалению, фотографировать тогда было нечем, так что шедевр электроники потерян для потомков.
При каждом включении эмулятор вел себя как девственно чистая карточка того номинала, который в него поместили при прошивке. Тут мы первый раз столкнулись с мерами технической безопасности, заложенными в программу таксофонов. Меры были, надо сказать, весьма слабые. Прошитый в эмулятор дамп карточки переставал работать через пару дней после начала использования. За эти пару дней я успевал несколько раз обнулить карточку (стоит ли говорить, что все время, с момента получения первой полностью работающей версии эмулятора, я использовал его для звонков домой). Точных деталей реализации я не знаю, но выглядело это так, как будто центр анализирует трафик, вносит номер карты в некий черный список, который потом рассылается по всем таксофонам и хранится там локально. Причем, задержка в два-три дня намекала что делается это вручную.
Вторая мера защиты состояла в том, что в неперезаписываемой части памяти карты хранился некий код, сгенерированный на основе серийного номера и оригинального номинала карты (возможно, чего-то еще). Алгоритм формирования этого кода так и остался для нас загадкой. Этот код не давал нам достичь полного совершенства и генерировать каждый раз свежие дампы прямо на лету в микроконтроллере, приходилось прошивать дампы от настоящих использованных карт. Тогда мы надеялись, что собрав достаточное количество дампов памяти карточек, мы сможем вычислить алгоритм хеширования. Но, как я уже написал, надеждам этим сбыться было не суждено.
В поисках доноров мы случайно познакомились с «Коллекционером» (карточки были очень разного дизайна, постоянно выпускались разные приуроченные к праздникам и событиям серии, так что были даже люди, коллекционирующие использованные карточки). Просто увидели на трамвайной остановке паренька со стопкой карточек в руках, разговорились, напросились в гости с ридером. Так мы добыли около сотни свежих карточных дампов. Это же стало началом конца истории, т. к. «Коллекционер» оказался связан со службой безопасности таксофонной компании. Он познакомил нас с неким гражданином, якобы готовым приобрести чудо-девайс за немаленькие по тем кризисным временам для студентов сто долларов. Мы позабыли о всякой конспирации и, польстившись на легкие деньги, встретились с покупателем, продемонстрировали ему безупречную работу эмулятора… Техническая часть этой истории закончилась фразой «пройдемте, милиция», после чего началась совсем другая, вполне предсказуемая, история, о которой расскажу очень коротко, без деталей.
Итак, нас поймали, поимку века показывали по питерскому ТВ, интернет до сих пор хранит пару
Не буду скрывать имен и подробностей, т. к. во-первых, дело было давно, а во-вторых, оно вполне себе логически закончилось и не думаю, что кто-то из участников тех событий еще относится к ним не как к поучительной истории из боевой юности. К тому же технические подробности давно устарели и вряд ли кому пригодятся (да и, собственно, ни исходников ни готовых продуктов не сохранилось, по описанным ниже причинам).
Итак, дело было в 1997-м году, когда я был студентом второго курса питерской «Корабелки» (СПбГМТУ). В Петербург я понаехал в сознательном уже возрасте 21 года из Калининградской области, где прожил всю жизнь до этого. Понаехал я уже с мощным ИТ-бекграундом, т.к. фанатично занимался программированием примерно с 13 лет (чтоб вы представляли масштаб фанатизма — я написал две игры и графический редактор для УКНЦ прямо в восьмеричных машинных кодах, используя только процессорный отладчик).
Учился я в одной группе с человеком, который настолько же фанатично увлекался электроникой, абсолютным повелителем паяльника, Кириллом. Как-то так само собой получилось, что точкой совместного приложения наших усилий стал реверс-инжиниринг платежной системы питерских таксофонов. Ну вы понимаете, родители далеко, звонить надо, денег нет, зато есть свободное время и две дурные головы.
В то время в Петербурге таксофонами занималась (и сейчас занимается, но по понятным причинам, не очень успешно) компания СПТ — Санкт-Петербургские Таксофоны. По всему городу были установлены довольно современные по тем меркам аппараты. Номер модели с ходу не нашел, выглядели они вот так (картинка тоже нашлась не самая качественная):
Посмотреть вложение 29622
Принимали эти таксофоны чип-карты стандарта ISO-7816-2 емкостью от 25 до 1000 единиц (одна единица — минута местного разговора или несколько секунд междугородного). Собрав всю имеющуюся на тот момент в FIDO и в дефицитном интернете информацию о видах и протоколах карт, мы принялись за работу. Довольно скоро мы собрали ридер, подключающийся к LPT порту компьютера. Была также написана программа, читающая содержимое карт. Карта представляет собой память небольшого объема, одна часть которой содержит информацию об оставшихся единицах и может быть изменена (только в сторону уменьшения), вторая часть содержит служебную информацию: производитель, серийный номер, что-то еще.
Накопив достаточное количество знаний о протоколе обмена таксофона с карточкой и собрав небольшую коллекцию дампов карт, мы приступили к выполнению программы-максимум, то есть к созданию эмулятора карты, который бы вел себя как обычная карта, но область единиц была бы доступна на запись любых чисел. В качестве мозга эмулятора был выбран микроконтроллер PIC16F84a, программа его писалась на С в среде Borland C 3.0. Я занимался софтовой частью, то есть писал программу для микроконтроллера и служебные программы для компьютера, Кирилл был властелином микроконтроллера и монстром паяльника.
Процесс построения и отладки первой версии эмулятора был сущим адом. В железном плане первая версия была весьма неказистой и представляла собой карточку с выфрезерованными родными мозгами, из которой торчал жгут проводов, на котором висела плата с контроллером и обвязкой. К плате синей, конечно же, изолентой была прикручена квадратная батарейка. Мало того, из-за отсутствия полной информации мы многое делали наугад (тайминги протокола приходилось подбирать методом проб и ошибок), так еще и представьте себе процесс проверки очередной сборки прошивки: «так, мы поменяли здесь число 10 на 12, пойдем пройдемся пару километров по морозу до ближайшего таксофона, подождем, пока вокруг не будет любопытных граждан, воткнем девайс в таксофон, увидим в сотый раз надпись „Ошибка 8“, тихо выругаемся и пойдем обратно». А теперь представьте себе нашу радость, когда на сто первый раз эмулятор частично заработал и таксофон показал долгожданное «25 единиц». Этот этап занял у нас примерно полгода.
После этого последовали еще полгода совершенствования железной части, было изготовлено две промежуточные версии эмулятора и бессчетное множество сборок прошивки. Финальная версия железа казалась мне тогда просто верхом инженерной мысли: кудесник Кирилл смог избавиться от внешнего питания (пришлось также радикально оптимизировать прошивку для этого, т.к. предыдущие версии не успевали запуститься, питание подавалось слишком незадолго до начала обмена данными) а также перешел с DIP корпуса на SOIC. В итоге эмулятор выглядел в точности как обычная карта, из таксофона уже не торчала никакая борода проводов. Корпус микроконтроллера прятался в небольшом утолщении, залитом эпоксидкой, в том месте, где у таксофонного картоприемника было углубление для пальцев. К сожалению, фотографировать тогда было нечем, так что шедевр электроники потерян для потомков.
При каждом включении эмулятор вел себя как девственно чистая карточка того номинала, который в него поместили при прошивке. Тут мы первый раз столкнулись с мерами технической безопасности, заложенными в программу таксофонов. Меры были, надо сказать, весьма слабые. Прошитый в эмулятор дамп карточки переставал работать через пару дней после начала использования. За эти пару дней я успевал несколько раз обнулить карточку (стоит ли говорить, что все время, с момента получения первой полностью работающей версии эмулятора, я использовал его для звонков домой). Точных деталей реализации я не знаю, но выглядело это так, как будто центр анализирует трафик, вносит номер карты в некий черный список, который потом рассылается по всем таксофонам и хранится там локально. Причем, задержка в два-три дня намекала что делается это вручную.
Вторая мера защиты состояла в том, что в неперезаписываемой части памяти карты хранился некий код, сгенерированный на основе серийного номера и оригинального номинала карты (возможно, чего-то еще). Алгоритм формирования этого кода так и остался для нас загадкой. Этот код не давал нам достичь полного совершенства и генерировать каждый раз свежие дампы прямо на лету в микроконтроллере, приходилось прошивать дампы от настоящих использованных карт. Тогда мы надеялись, что собрав достаточное количество дампов памяти карточек, мы сможем вычислить алгоритм хеширования. Но, как я уже написал, надеждам этим сбыться было не суждено.
В поисках доноров мы случайно познакомились с «Коллекционером» (карточки были очень разного дизайна, постоянно выпускались разные приуроченные к праздникам и событиям серии, так что были даже люди, коллекционирующие использованные карточки). Просто увидели на трамвайной остановке паренька со стопкой карточек в руках, разговорились, напросились в гости с ридером. Так мы добыли около сотни свежих карточных дампов. Это же стало началом конца истории, т. к. «Коллекционер» оказался связан со службой безопасности таксофонной компании. Он познакомил нас с неким гражданином, якобы готовым приобрести чудо-девайс за немаленькие по тем кризисным временам для студентов сто долларов. Мы позабыли о всякой конспирации и, польстившись на легкие деньги, встретились с покупателем, продемонстрировали ему безупречную работу эмулятора… Техническая часть этой истории закончилась фразой «пройдемте, милиция», после чего началась совсем другая, вполне предсказуемая, история, о которой расскажу очень коротко, без деталей.
Итак, нас поймали, поимку века показывали по питерскому ТВ, интернет до сих пор хранит пару
Пожалуйста,
Вход
или
Регистрация
для просмотра содержимого URL-адресов!
. Был суд, мы получили по два года условно, чего оказалось достаточным, чтобы навсегда сделать меня сугубо положительным айтишником, чего всем и советую.