Arduino Прослушка Шпионаж

Собираем жучок и встраиваем в любое устройство. Для самых маленьких

Собираем жучок и встраиваем в любое устройство. Для самых маленьких

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

Ты навер­няка слы­шал, что в шпи­онское устрой­ство мож­но прев­ратить прак­тичес­ки всё, вклю­чая кабели для заряд­ки устрой­ств. В этой статье я покажу, как соб­рать на Arduino и зап­рограм­мировать GSM-жучок, на который мож­но поз­вонить с опре­делен­ного номера и слу­шать все про­исхо­дящее. Наше изоб­ретение мы замас­киру­ем под пор­татив­ный акку­муля­тор.

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

Есть нес­коль­ко видов устрой­ств для слеж­ки:

Мы же будем собирать GSM-жучок — устрой­ство с боль­шим ради­усом дей­ствия и объ­емным акку­муля­тором. Такие харак­терис­тики поз­воля­ют ему работать в режиме ожи­дания до десяти дней, а в режиме прос­лушки до четырех часов. Отли­читель­ная чер­та такого устрой­ства — воз­можность слу­шать все про­исхо­дящее не в записи, а по ходу дела.

Выбор маскировки

Про­ще все­го спря­тать что‑то на самом вид­ном мес­те, в чем‑то, что не прив­лека­ет вни­мания. Вот инте­рес­ные спо­собы замас­кировать прос­лушива­ющее устрой­ство.

Компь­ютер­ная мышь со встро­енным GSM-жуч­ком.
За­ряд­ка для смар­тфо­на со встро­енным GSM-жуч­ком.
Кла­виату­ра со встро­енным дик­тофоном.

Эти вари­анты прос­лушки инте­рес­ны еще и тем, что пред­меты, в которые были внед­рены жуч­ки, поч­ти всег­да под­клю­чены к сети: так жучок никог­да не раз­рядит­ся, а зна­чит, доль­ше ста­нет выпол­нять свою фун­кцию — переда­вать информа­цию.

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

По­это­му мой вари­ант — внед­рить жучок во внеш­ний акку­муля­тор для заряд­ки смар­тфо­на. Его час­то носят с собой, заряжа­ют, а если и не заряжа­ют — он сам ста­новит­ся источни­ком питания для жуч­ка. На мой вкус, это очень удач­ное мес­то для раз­мещения жуч­ка.

Сборка

Для сбор­ки устрой­ства нам пот­ребу­ется:

Ком­плек­тующие для сбор­ки.

Что­бы кор­рек­тно соб­рать устрой­ство, нуж­но знать наз­начения выводов на модуле GSM Sim 800 и Arduino Pro mini.

Наз­начение выводов Sim 800.
Наз­начение выводов Arduino Pro mini.

Да­лее при­паиваем антенну к модулю GSM в гнез­до NET.

  1. К выходам MIC+ и MIC- при­паиваем мик­рофон;
  2. RXD и TXD на модуле GSM к шес­тому и седь­мому кон­такту на Arduino;
  3. Под­паиваем Vcc и GND от модуля к Arduino и к кон­тактам на внеш­нем акку­муля­торе.
Сбор­ка для тес­та

Пос­ле запай­ки всех ком­понен­тов на свои мес­та нуж­но убе­дить­ся в пра­виль­нос­ти запай­ки — про­шить кон­трол­лер.

// Подключаем библиотеку программной реализации обмена по UART-протоколу

#include <SoftwareSerial.h>

SoftwareSerial SIM800(7, 6); // RX, TX

// Задаем переменную для хранения ответа модуля

String _response = "";

void setup() {

 // Скорость обмена данными с компьютером

 Serial.begin(19200);

 // Скорость обмена данными с модемом

 SIM800.begin(19200);

 Serial.println("Start!");

 // Отправляем AT для настройки скорости обмена данными

 sendATCommand("AT", true);

 // Команды настройки модема при каждом запуске

 // Включаем АОН

 _response = sendATCommand("AT+CLIP=1", true);

 // Вариант с DTMF

 //_response = sendATCommand("AT+DDET=1", true);

}

String sendATCommand(String cmd, bool waiting) {

 // Задаем переменную для хранения результата

 String _resp = "";

 // Дублируем команду в монитор порта

 Serial.println(cmd);

 // Отправляем команду модулю

 SIM800.println(cmd);

 // Если необходимо дождаться ответа, ждем, когда будет передан ответ

 if (waiting) {

 _resp = waitResponse();

 // Если Echo Mode выключен (ATE0), то эти три строки можно закомментировать

 if (_resp.startsWith(cmd)) {

 _resp = _resp.substring(_resp.indexOf("\r", cmd.length()) + 2);

 }

 // Дублируем ответ в монитор порта

 Serial.println(_resp);

 }

 // Возвращаем результат. Пусто, если проблема

 return _resp;

}

// Функция ожидания ответа и возврата полученного результата

String waitResponse() {

 // Переменная для хранения результата

 String _resp = "";

 // Переменная для отслеживания тайм-аута (10 секунд)

 long _timeout = millis() + 10000;

 // Ждем ответа 10 секунд и проверяем ответ или тайм-аут

 while (!SIM800.available() && millis() < _timeout) {};

 // Если есть что считывать, считываем и запоминаем

 if (SIM800.available()) {

 _resp = SIM800.readString();

 }

 // Если пришел тайм-аут, то оповещаем об этом и возвращаем результат

 else {

 Serial.println("Timeout...");

 }

 return _resp;

}

void loop() {

 // Если модем что-то отправил, получаем ответ для анализа

 if (SIM800.available()) {

 _response = waitResponse();

 // Убираем лишние пробелы в начале и конце и ответ выводим в монитор порта

 _response.trim();

 Serial.println(_response);

 // Белый список телефонов, их можно указать несколько через запятую

 String whiteListPhones = "+380713337866";

 // Если есть входящий вызов, проверяем, есть ли информация об определении номера. Если да, то phoneindex > -1

 if (_response.startsWith("RING")) {

 int phoneindex = _response.indexOf("+CLIP: \"");

 // Переменная для хранения определенного номера

 String innerPhone = "";

 // Если информация была найдена, парсим строчку и получаем номер

 if (phoneindex >= 0) {

 phoneindex += 8;

 innerPhone = _response.substring(phoneindex, _response.indexOf("\"", phoneindex));

 // Выводим номер в монитор порта

 Serial.println("Number: " + innerPhone);

 }

 // Проверяем, чтобы длина номера была больше шести цифр

 // и номер был в списке. Если да, то отвечаем на вызов,

 // если нет, то отклоняем

 if (innerPhone.length() >= 7 && whiteListPhones.indexOf(innerPhone) >= 0) {

 sendATCommand("ATA", true);

 }

 else {

 sendATCommand("ATH", true);

 }

 }

 }

 // Ожидаем команды по Serial и отправляем полученную команду модему

 if (Serial.available()) {

 SIM800.write(Serial.read());

 };

}

При пра­виль­ной запай­ке и про­шив­ке наш жучок при подаче питания будет отве­чать на вхо­дящие вызовы толь­ко с раз­решен­ных мобиль­ных номеров, которые про­писа­ны в про­шив­ке.

Те­перь пора убрать длин­ные соеди­нитель­ные про­вода, выпа­ять све­тоди­оды с пла­ты Arduino. Мик­рофон мы изо­лиру­ем тер­моусад­кой, свер­лим в кор­пусе внеш­него акку­муля­тора отвер­стие для него и кре­пим на тер­моклей его и две пла­ты, вмес­то одно­го акку­муля­тора 18650.

В сво­ей сбор­ке я исполь­зовал два акку­муля­тора, но вы можете исполь­зовать три — мес­та будет дос­таточ­но.

Фи­наль­ная запай­ка ком­понен­тов.
При­мер­ка и зак­репле­ние начин­ки в кор­пусе.
Го­товое устрой­ство.

Итак, мы соб­рали GSM-жучок в кор­пус внеш­него акку­муля­тора. Он, конеч­но, неидеален, но есть нес­коль­ко спо­собов его улуч­шить:

  1. Взять кор­пус с боль­шей вмес­тимостью акку­муля­торов;
  2. Для боль­шей авто­ном­ности вво­дить модуль GSM в режим сна, а при нажатии на кноп­ку вклю­чения акку­муля­тора акти­виро­вать прос­лушку;
  3. От­сылать сооб­щение хозя­ину прос­лушки при нажатии кноп­ки на внеш­нем акку­муля­торе.

Выводы

Мы спро­екти­рова­ли и соб­рали GSM-жучок, замас­кирован­ный под внеш­ний акку­муля­тор. Его сто­имость нам­ного ниже, чем у жуч­ков, которые мож­но купить в интерне­те и в спе­циали­зиро­ван­ных магази­нах. Вы можете пов­торить мое устрой­ство или дорабо­тать его. Глав­ное, пом­ните, что час­тная жизнь неп­рикос­новен­на, и не исполь­зуйте свои зна­ния в дур­ных целях!

Очень злой админ
Очень злой админ Автор статьи

Админ сайта. Публикует интересные статьи с других ресурсов, либо их переводы. Если есть настроение, бывает, что пишет и что-то своё.

Комментарии

Leave a Reply

Your email address will not be published. Required fields are marked *