Взлет и падение начинающего фрикера

:

Я долго собирался написать что-нибудь эдакое на хабр, вынашивал идеи всяких статей на очень умные темы. Но вместо этого я сейчас опишу один автобиографичный эпизод, которым я очень даже горжусь в техническом плане, но о котором безумно сожалею в моральном.

Не буду скрывать имен и подробностей, т. к. во-первых, дело было давно, а во-вторых, оно вполне себе логически закончилось и не думаю, что кто-то из участников тех событий еще относится к ним не как к поучительной истории из боевой юности. К тому же технические подробности давно устарели и вряд ли кому пригодятся (да и, собственно, ни исходников ни готовых продуктов не сохранилось, по описанным ниже причинам).

Итак, дело было в 1997-м году, когда я был студентом второго курса питерской «Корабелки» (СПбГМТУ). В Петербург я понаехал в сознательном уже возрасте 21 года из Калининградской области, где прожил всю жизнь до этого. Понаехал я уже с мощным ИТ-бекграундом, т.к. фанатично занимался программированием примерно с 13 лет (чтоб вы представляли масштаб фанатизма — я написал две игры и графический редактор для УКНЦ прямо в восьмеричных машинных кодах, используя только процессорный отладчик).

Учился я в одной группе с человеком, который настолько же фанатично увлекался электроникой, абсолютным повелителем паяльника, Кириллом. Как-то так само собой получилось, что точкой совместного приложения наших усилий стал реверс-инжиниринг платежной системы питерских таксофонов. Ну вы понимаете, родители далеко, звонить надо, денег нет, зато есть свободное время и две дурные головы.

В то время в Петербурге таксофонами занималась (и сейчас занимается, но по понятным причинам, не очень успешно) компания СПТ — Санкт-Петербургские Таксофоны. По всему городу были установлены довольно современные по тем меркам аппараты. Номер модели с ходу не нашел, выглядели они вот так (картинка тоже нашлась не самая качественная):

image

Принимали эти таксофоны чип-карты стандарта ISO-7816-2 емкостью от 25 до 1000 единиц (одна единица — минута местного разговора или несколько секунд междугородного). Собрав всю имеющуюся на тот момент в FIDO и в дефицитном интернете информацию о видах и протоколах карт, мы принялись за работу. Довольно скоро мы собрали ридер, подключающийся к LPT порту компьютера. Была также написана программа, читающая содержимое карт. Карта представляет собой память небольшого объема, одна часть которой содержит информацию об оставшихся единицах и может быть изменена (только в сторону уменьшения), вторая часть содержит служебную информацию: производитель, серийный номер, что-то еще.

Накопив достаточное количество знаний о протоколе обмена таксофона с карточкой и собрав небольшую коллекцию дампов карт, мы приступили к выполнению программы-максимум, то есть к созданию эмулятора карты, который бы вел себя как обычная карта, но область единиц была бы доступна на запись любых чисел. В качестве мозга эмулятора был выбран микроконтроллер PIC16F84a, программа его писалась на С в среде Borland C 3.0. Я занимался софтовой частью, то есть писал программу для микроконтроллера и служебные программы для компьютера, Кирилл был властелином микроконтроллера и монстром паяльника.

Процесс построения и отладки первой версии эмулятора был сущим адом. В железном плане первая версия была весьма неказистой и представляла собой карточку с выфрезерованными родными мозгами, из которой торчал жгут проводов, на котором висела плата с контроллером и обвязкой. К плате синей, конечно же, изолентой была прикручена квадратная батарейка. Мало того, из-за отсутствия полной информации мы многое делали наугад (тайминги протокола приходилось подбирать методом проб и ошибок), так еще и представьте себе процесс проверки очередной сборки прошивки: «так, мы поменяли здесь число 10 на 12, пойдем пройдемся пару километров по морозу до ближайшего таксофона, подождем, пока вокруг не будет любопытных граждан, воткнем девайс в таксофон, увидим в сотый раз надпись „Ошибка 8“, тихо выругаемся и пойдем обратно». А теперь представьте себе нашу радость, когда на сто первый раз эмулятор частично заработал и таксофон показал долгожданное «25 единиц». Этот этап занял у нас примерно полгода.

После этого последовали еще полгода совершенствования железной части, было изготовлено две промежуточные версии эмулятора и бессчетное множество сборок прошивки. Финальная версия железа казалась мне тогда просто верхом инженерной мысли: кудесник Кирилл смог избавиться от внешнего питания (пришлось также радикально оптимизировать прошивку для этого, т.к. предыдущие версии не успевали запуститься, питание подавалось слишком незадолго до начала обмена данными) а также перешел с DIP корпуса на SOIC. В итоге эмулятор выглядел в точности как обычная карта, из таксофона уже не торчала никакая борода проводов. Корпус микроконтроллера прятался в небольшом утолщении, залитом эпоксидкой, в том месте, где у таксофонного картоприемника было углубление для пальцев. К сожалению, фотографировать тогда было нечем, так что шедевр электроники потерян для потомков.

При каждом включении эмулятор вел себя как девственно чистая карточка того номинала, который в него поместили при прошивке. Тут мы первый раз столкнулись с мерами технической безопасности, заложенными в программу таксофонов. Меры были, надо сказать, весьма слабые. Прошитый в эмулятор дамп карточки переставал работать через пару дней после начала использования. За эти пару дней я успевал несколько раз обнулить карточку (стоит ли говорить, что все время, с момента получения первой полностью работающей версии эмулятора, я использовал его для звонков домой). Точных деталей реализации я не знаю, но выглядело это так, как будто центр анализирует трафик, вносит номер карты в некий черный список, который потом рассылается по всем таксофонам и хранится там локально. Причем, задержка в два-три дня намекала что делается это вручную.

Вторая мера защиты состояла в том, что в неперезаписываемой части памяти карты хранился некий код, сгенерированный на основе серийного номера и оригинального номинала карты (возможно, чего-то еще). Алгоритм формирования этого кода так и остался для нас загадкой. Этот код не давал нам достичь полного совершенства и генерировать каждый раз свежие дампы прямо на лету в микроконтроллере, приходилось прошивать дампы от настоящих использованных карт. Тогда мы надеялись, что собрав достаточное количество дампов памяти карточек, мы сможем вычислить алгоритм хеширования. Но, как я уже написал, надеждам этим сбыться было не суждено.

В поисках доноров мы случайно познакомились с «Коллекционером» (карточки были очень разного дизайна, постоянно выпускались разные приуроченные к праздникам и событиям серии, так что были даже люди, коллекционирующие использованные карточки). Просто увидели на трамвайной остановке паренька со стопкой карточек в руках, разговорились, напросились в гости с ридером. Так мы добыли около сотни свежих карточных дампов. Это же стало началом конца истории, т. к. «Коллекционер» оказался связан со службой безопасности таксофонной компании. Он познакомил нас с неким гражданином, якобы готовым приобрести чудо-девайс за немаленькие по тем кризисным временам для студентов сто долларов. Мы позабыли о всякой конспирации и, польстившись на легкие деньги, встретились с покупателем, продемонстрировали ему безупречную работу эмулятора… Техническая часть этой истории закончилась фразой «пройдемте, милиция», после чего началась совсем другая, вполне предсказуемая, история, о которой расскажу очень коротко, без деталей.

Итак, нас поймали, поимку века показывали по питерскому ТВ, интернет до сих пор хранит пару новостей про нас. Был суд, мы получили по два года условно, чего оказалось достаточным, чтобы навсегда сделать меня сугубо положительным айтишником, чего всем и советую.