Издательский дом ООО "Гейм Лэнд"ЖУРНАЛ ХАКЕР 110, ФЕВРАЛЬ 2008 г.

Мобильное зло

Артемий «Di Halt» Исламов

Хакер, номер #110, стр. 110-124-1

(di_halt@mail.ru)

Электронный дьявол в мобильном телефоне

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

Так вот. Мобила посылала sms’ками на три буквы всех кого ни попадя, перехватывала или, наоборот, сбрасывала звонки, а также названивала всем сама. Сбросы и перезагрузки не помогали – агрегат продолжал чудить, попутно ехидно стебясь над попытками владельца изгнать из него внезапно зародившийся искусственный интеллект. В конец отчаявшись, мой товарищ решился на перепрошивку. Купил кабель, начитался мануалов и, заливаясь демонических хохотом, залил в телефон новую прошивку… Когда же после включения телефона автоматом открылась записуха и в ней весело набралось: «Ну что, дурачок, опять не вышло? ;))))» - у чувака задергался глаз, а телефон полетел в стену.

What is the matrix?

Ты, наверное, уже допетрил, что за демона я подсадил корешу в мобильник? Конечно же, трояна. Собственно, почему бы нет? По идее, не такая уж сложная, казалось бы, задача, если бы не одна маленькая деталь – чувак перепрошил мобилу (по аналогии с компом - отформатировал винт на низком уровне), а нечисть осталась на месте и продолжила издеваться над несчастным. Чувствуешь нестыковочку? Тот, кто читал мои предыдущие статьи, уже догнал, к чему я клоню: троян был аппаратный! Все просто – в кишки мобилы был засунут микроконтроллер, подключенный к управляющему порту, питанию и висящий на клавиатуре, чтобы отловить нажатия кнопок. Он-то и бесчинствовал. Зачем так сложно? Ведь можно было просто подправить прошивку телефона. На самом деле ковырять прошивку телефона - занятие совершенно нетривиальное, требующее кучи времени и документации, которых у меня не было, а вот засунуть в чрево трубы крохотную схему было делом двух часов, ну и пары вечеров возни с кодом.

Как я сделал демона

Но это все баловство и западло, а ведь с помощью аппаратного трояна можно делать и совершенно иные вещи. Например, добывать информацию. Посуди сам, ведь из мобилы может получиться отличный жучок, обладающий рядом замечательных качеств. Во-первых, его элементарно подбросить – достаточно просто «забыть» мобилу у объекта. Причем сама мобила будет исправно работать в качестве телефона, и подозрений не возникнет. Прослушать объект можно будет почти из любой точки мира, а значит, отпадет необходимость торчать сутками напролет возле объекта. Передатчик мобильного телефона работает на высоких частотах, следовательно, обычный радиоприемник его случайно не поймает и не спалит всю контору. А если учесть, что в мобилах часто бывает еще и подобие фотокамеры, то можно ведь и наловчиться фоткать, а фотки сливать по mms куда-нибудь.

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

Техническое задание

Для начала я прикину, что мне нужно от жучка и какими свойствами он должен обладать.

  1. Он должен уметь хорошо слышать все вокруг. А значит, мне потребуется режим громкой связи.
  2. Должен выходить на связь по звонку.
  3. Не должен отвечать на провокации в виде операторского спама или случайные звонки.
  4. Должен умело затирать в себе следы входящих звонков.
  5. В случае обнаружения должен умело косить под обычную забытую мобилу.
  6. Должен быть надежным.

Это техзадание уже подразумевает весьма сложный алгоритм, а значит, тупой релюшкой, подвешенной на подъем трубки, обойтись будет сложно. Поэтому буду юзать микроконтроллер.

Время собирать камни

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

В этот раз подопытным кроликом у меня будет Siemens CX65. Почему именно он? Да первый, что под руку подвернулся из сименсов. Под телефон также неплохо было бы заполучить принципиальную схему, так как некоторые моменты я буду разъяснять по ней. По известным причинам причинам мы не можем выложить схему этого телефона на диск, но вот ключевое слово, по которому Яндекс легко найдет нужный файл: CX65_schematics.rar или просто СХ65 schematic. На первом же попавшемся форуме ремонтников сотовых будет вагон и маленькая тележка схем под сотовые телефоны.

Следующий важнейший компонент – микроконтроллер. Это, как и в прошлый раз, будет Atmel AVR. В принципе, можно взять любой из семейства, лишь бы там был UART (или USART, что почти то же самое, но с прибамбасиками). Я заюзал старую проверенную ATMega8535L в TQFP-корпусе. О корпусе стоит рассказать особо. Он должен быть самый маленький и плоский (TQFP,SOIC и т.д.) – его, может, и сложно запаять, но пихать в мобилу какой-нибудь здоровенный PDIP или PLCC - еще сложнее. (Самый тонкий из семейства AVR – ATmega8 в TQFP-корпусе. - Прим. dlinyj). Также стоит отметить наличие индекса L в маркировке микросхемы, это важно! L означает, что этот контроллер способен питаться от пониженного напряжения – от 2,5 до 5 вольт. А напряжение в мобиле у меня всего 3,3 вольта. Так что беру только низковольтные контроллеры!

Еще потребуется оптореле, в данном случае я рекомендую KAQY214S - хорошая штука, достаточно популярная, недорогая и в то же время отличается миниатюрными размерами.

Также необходим десяток резисторов в SMD-исполнении типоразмера 1206, а лучше и того меньше – 0805, чтобы напаивать прямо на ножки микросхем. Резисторы нужны на 10 кОм и 620 Ом или около того.

Все соединения буду осуществлять тонким проводом. Отлично подойдет тонюсенький провод типа МГТФ (белый такой, в скользкой фторопластовой изоляции) или тонкий обмоточный провод с любой катушки или трансформатора.

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

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

Из инструментов очень не помешает пинцет. Я бы сказал, без него вообще никуда.

Также мне потребуются паяльные принадлежности: припой и флюс.

Интерфейсы

Для начала определимся, что мы будем делать. Поскольку журнальное место не резиновое, я даю план-минимум, остальное делается по аналогии.

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

Для начала мне нужно узнать, что на телефон пришел звонок. Подумаем, что происходит при приходе звонка? Звенит звонок, дрожит вибра, горит подсветка – до фига событий! Любой из этих сигналов можно завести в микроконтроллер, чтобы он дал сработку. Я предпочел пожертвовать виброй, так как остальное куда более заметно и влияет на работу трубы в качестве простого телефона.

Второй важнейший интерфейс для меня - это терминальная сессия, поэтому мне надо будет припаяться изнутри к линиям Rx и Tx, чтобы заставить телефон плясать под нашу дудку. Собственно, уже этого достаточно, чтобы получить адекватный шпионский девайс. Ну и питание контроллера. Его я возьму от штатного аккумулятора телефона.

Схемотехника

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

По сути дела, оно работает как обычное реле, только отличается диким быстродействием, микропотреблением и фактически вечное, поскольку никаких изнашивающихся частей там нет. Управляющий вход реле я повесил на выход виброзвонка, и теперь, когда придет звонок, телефон подаст сигнал на вибру и контроллер поймет, что ему пора действовать. Остальная схема до смешного проста. Резистор в 620 Ом от плюса питания на ножку RESET обеспечивает запуск контроллера, замыкающий контакт реле коротит ножку порта на землю, что отслеживается микроконтроллером. Выходы Rx и Tx идут прямиком Tx и Rx телефона соответственно. Также в порту телефона впаяна перемычка, сигнализирующая о том, что в телефон якобы воткнут дата-кабель и можно принимать команды извне. Специально на случай, если что-то непонятно из схемы, я сделал ряд фотографий девайса, чтобы ты мог рассмотреть всю конструкцию вживую, в сборе.

Сниферим клавиатуру

В сегодняшней статье я это не применяю – боюсь усложнить, но умалчивать о съеме информации с клавиатуры я тоже не хочу. Итак, что представляет собой клавиатура мобильного телефона? Вариантов тут всего два.

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

Второй вариант сложнее - матрица из строк и столбцов (часто встречается именно на сименсах). Кнопки замыкают строки на столбцы. Для того чтобы определить, какая именно из кнопок нажата, применяют сканирование клавиатуры. Работает это следующим образом. Например, на строки вешаем входящий порт (на схемах сименсов он зовется kb_in_xx, где хх – номер линии порта), а на столбцы заводим выходящий порт (у тех же сименсов это kb_out_xx). Далее выводим в выходящий порт число 11111110 и начинаем гонять нолик по всем разрядам (11111110 -> 11111101 -> 11111011 и т.д.). В итоге, у меня в конкретный момент времени ноль находится только на одном из столбцов. Если я нажму на какую-либо кнопку, висящую на этом столбце, то она коротнет строку на столбец и в соответствующем этой кнопке порту будет ноль. Зная, какой из столбцов в данный момент в нуле и на какую из строк пришел ноль, я легко, как по координатам, могу определить, что за кнопка у нас нажата. Цикл сканирования клавиатуры в телефоне довольно медленный (а чего там торопиться, человек ведь медленное существо), поэтому перехватить его не составляет труда. Надо найти (осциллографом, либо по принципиальной схеме), где в клавиатуре бегает нолик, а где висит слушающий порт процессора телефона, и подцепить порт своего МК аналогично первому случаю, а затем отслеживать просадку напряжения так же, как в первом варианте. Но опрос порта МК должен быть, согласно теореме Котельникова, раза в два чаще, чем цикл сканирования клавиатуры телефона, чтобы не прозевать бегающий нолик.

Чтобы микроконтроллер не влиял на работу оригинальной схемы, выходы сниферящего порта должны быть в состоянии Hi-Z (для AVR это DDRxy=0 и PORTxy=0, где х и y - имя и бит порта контроллера).

Монтаж

Теория закончена, пора бы приступать к практике. Дальнейшие операции потребуют некоторой сноровки и навыков пайки, ну и наличие очень прямых рук тоже обязательно. Кроме того, я собираюсь осуществить грубейшее вмешательство в начинку телефона, а значит, о гарантии можно забыть сразу.

Разбираем мобилу. Для этого мне потребуются звездообразные отверточки. Сразу же окидываю взглядом конструкцию на предмет заныкивания туда микросхемы контроллера и незаметной прокладки проводков. В идеале все должно быть спрятано так, чтобы нельзя было без разбора определить, что в телефоне есть какой-то посторонний аддон. К слову, у сименсов 65-й серии в голове возле антенны есть неслабый «чердак», куда при желании можно засунуть полковую радиостанцию, а также казино с блек-джеком и шлюхами.

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

Следующим номером у меня значится виброзвонок, а говоря точнее, подключение оптрона к его выводам. Сразу посмотрим, как он подключается, - видно две здоровенные контактные площадки. Вот туда мы и будем паять. Только сначала определим полярность выходов. В 90% случаев вибра питается либо от ноги процессора, либо от силового ключа, но обязательно на землю, а значит, один из контактов питания вибры должен прозваниваться на минус питания телефона. Возьмем тестер и включим режим пикалки или замены сопротивлений, одним щупом тыкнем на минусовой контакт аккумуляторного разъема, а вторым - на контакты виброзвонка. Где раздастся противный писк или покажется сопротивление 0,00, там и есть GND, запомним его. Опять же пока выведем от вибры два проводочка и пометим их, чтобы не забыть. Сам же моторчик виброзвонка выкидываем на фиг, он тут больше не понадобится.

Теперь обратим свой взор в сторону порта телефона. Нас в данном случае интересуют контакты:

  • 3 – Tx – загнать напрямую в порт Rx нашего микроконтроллера.
  • 4 – Rx – загнать напрямую в порт Tx нашего микроконтроллера.
  • 5, 7 – спаять их вместе и через резистор на 10 кОм припаять на GND.
  • 2 – GND

В принципе, в этом же сименсе есть здоровенный «чердак» и в нижней части, так что туда можно сунуть даже обычный резистор 0,125 Вт, но я все же предпочитаю напаивать SMD 1206 - он и в разы компактнее, и в случае чего не оторвет дорожки от платы, так как подпаивать я его буду мягким монтажным проводом. Запаяв схему разрешения порта (объединение ножек 5 и 7 на землю), выведем провода с Rx и Tx, также пометив их каким-нибудь образом, чтобы не забыть.

Теперь соберем процессорную часть. Тут все просто. Припаиваем проводки к выводам Vcc и GND. На PLCC- или TQFP-корпусе несколько выводов питания и земли. Берем любой из них – они внутри все соединены, в чем можно убедиться, прозвонив их тестером.

Далее я припаиваю к ножке Reset тоненький проводок, к нему - резистор на 10 кОм, а второй конец резистора - проводком на Vcc. Также припаяю проводки к Rx и Tx контроллера.

На линию порта, которую мы будем считать входом реле, в данном случае PD2 (теоретически это может быть любая линия любого свободного порта, выбираем ту, которая удобнее, потом просто немного подправим исходник), мы припаиваем третий вывод нашего оптореле, четвертый же вывод оптореле припаиваем на GND. Итог: при сработке реле PD2 будет брутально уложен на землю, что даст 0 в порту.

Все, можно приступать к экспериментам.

Прошивка

В целях экономии места программу я комментировать не буду. Ее ты найдешь на диске, и вот там в комментариях недостатка не будет, поверь мне на слово, графоман я еще тот :). О том, как прошивать контроллер, было сказано на страницах «Хакера» уже неоднократно, а поэтому, чтобы не повторяться, пошлю тебя на Яндекс (ключевая фраза «AVR LPT пять проводов»), ну и на замечательный сайт http://avr.nikolaew.org, где обитает удобная программа-прошивальщик Uniprof, там же найдешь и схему программатора. Также есть весьма бредовый ресурс www.avr123.nm.ru. Полезность выложенного там курса мне кажется сомнительной (слишком уж там все сумбурно, кратко и бессистемно), но вот количество тематических ссылок на AVR, собранных в нем, заслуживает всяческого уважения. Ссылки раскиданы по всему курсу, а поэтому прочесать его придется весь.

Тестирование

Сначала необходимо отладить все на большом контроллере, например в PLCC- или даже PDIP-корпусе. Там выводы потолще, удобнее припаивать проводки программатора. Залив прошивку, проверив все пару раз и удовлетворившись результатом, я взял крохотный процессор в TQFP-корпусе, прошил его финальным релизом прошивки и выполнил окончательный монтаж. Я специально не говорю номера ножек контроллера, так как у разных типов корпусов нумерация отличается. Я скрутил проводки питания, идущие из телефона, и те, которые припаяны у меня к МК, соединил линии терминала крест-накрест (Rx в Tx, а Tx в Rx). Проводки, идущие от вибры, припаяю так: землю - на второй вывод оптрона, а плюс через резистор в 620 Ом - на первый вывод оптореле. Причем тут можно не заморачиваться и паять резистор прямо на ногу релюшки, как я и сделал.

После того как все будет отлажено и заработает как часы, прошиваю уже маленький контроллер, подпаиваю все напрямую короткими проводами и аккуратно запихиваю по «чердакам» и полостям, найденным мною в сотовом телефоне. Собираем и приводим в божеский вид. Вуаля!

Далее девайс ставится на бесшумный режим, и отрубается подсветка, чтобы внимания не привлекала. Девайс закидывается на объект, на него совершается один звонок и кладется трубка – все, аппарат «взведен». Через 3 минуты на телефон перезванивается (но не более 4 минут), и аппарат берет трубку, включая громкую связь. Главное теперь - ничего не говорить в трубку. Лучше вообще отключить у себя микрофон, а то можно спалиться.

End main

Имей в виду, что изготовление подобной техники не дружит с законом, а эта статья приводится в чисто ознакомительных целях. А если тебе есть, что скрывать, и ты, и так будучи параноиком, еще и понял, что теперь любой Вася Пупкин, совершенно нешарящий в электронике, может склепать мегажучка из любой мобилы и вынюхать твои секреты, то советую не накладывать на себя обет молчания, а ждать следующей статьи, где я опишу, как со всем этим злом активно бороться. Удачи, фрикер. Да не остынет твой паяльник!

 

 

Содержание
ttfb: 63.177108764648 ms