Как работать с андроид ботом



AnkuLua. Пишем ботов на Android (аналог SikuliX)

Предисловие.

AnkuLua — приложение для Android, позволяющее создавать ботов с использованием сканирования экрана телефона. Данная программа, почти, полная копия SikuliX, поэтому, если вы читали предыдущую статью, вы найдете много общего. К тому же, она не требует root.

Подготовка

Сперва скачайте и установите эти 3 программы:

  • QuickEdit — удобный редактор кода
  • ScreenMaster — программа для создания скриншотов
  • AnkuLua — программа для запуска ботов

Далее, в папке с вашим будущим ботом, создайте lua скрипт(текстовый файл с расширением .lua) и папку image.

  • В папке image, будут хранится изображения, которые бот будет искать на экране.
  • Lua скрипт будет содержать код бота.

Теперь, откройте AnkuLua, и запустите созданный Lua скрипт.

Далее, с помощью QuickEdit откройте Lua скрипт бота. Подготовка завершена, время написать Hello World.

Пишем Hello World (v1).

В Lua скрипт, пропишите следующий код.

Сохраните и запустите скрипт, нажатием на кнопку проигрывания.

В итоге, получили сообщение на экране.

Пишем Hello World (v2).

Можно написать Hello World и так.

Тогда, hello world, напечатается в активном окне.

Настраиваем Screen Master.

Сперва настроим ScreenMaster. В настройках выберите:

  • Формат изображения — PNG
  • Качество изображения — 100%.

Т.к. бот будет искать картинку на экране, картинка должна быть максимального качества.

Скриншоты с этой программы, будут помещаться в папку ScreenMaster.

Кликаем по картинке.

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

Сначала, обрежьте его картинку, примерно вот так:

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

Далее, переместите эту картинку в папку image в директории бота и переименуйте в qe.png (для удобства).

В Lua скрипте, пропишите следующее:

Сохраните и запустите скрипт. Если скрипт найдет картинку, то он кликнет по ней, и откроет программу.

Подсвечиваем цель.

Точно так же как и SikuliX, здесь можно подсвечивать регион. Измените код на это:

Разберемся как этот код работает.

  1. В начале я с помощью функции find, нашел регион в котором находится наша картинка.
  2. Далее, подсветил этот регион с помощью функции highlight на 2 секунды.
  3. И кликнул по нему.

В итоге, получили красную рамку на 2 секунды возле картинки.

Создаем диалог.

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

Перепишите следующий код.

Весь код я объяснил в комментариях (—).

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

Где, doSomething1 и doSomething2, функции отвечающие за нужные вам действия.

Узнаем координаты нажатия.

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

Перепишите этот код:

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

И после касания, выведет координаты нажатия.

Кликаем на координаты.

Чтобы кликнуть по координатам, нужно передать Location в функцию click.

Данная комманда, кликает на координаты 500, 500.

Прочие функции.

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

  • toast(текст) — показывает всплывающее сообщение снизу.
  • exists(картинка) — возвращает True, если картинка найдена.
  • wait(картинка) — ждет появления картинки.
  • keyevent(4) — нажимает кнопку назад.
  • keyevent(3) — жмет кнопку домой.
  • keyevent(187) — жмет кнопку переключения приложений.
  • swipe — свайп по экрану.

Подробная информация в документации.

Источник

Анализ sms-бота для Android. Часть I

Анализ sms-бота для Android. Часть I.

Введение
Знакомимся с манифестом

Открыв манифест, сразу же обратим внимание на системные разрешения, которые показались мне более интересными:

Итак, наш бот считывает состояние телефона, обрабатывает звонки, производит запись на флешку, писать/читать/получать/отправлять СМС-ки, читать базу контактов и записывать аудио. Интересно…

Далее, по манифесту. Видим следующий код:

Видим, что объявлены:

  • сервисы AService и webService,
  • ресиверы Alarm, AutoStart, MyPhoneReceiver(следит за состоянием телефона, скорее всего за звонками), MyAdmin (бот хочет админить устройство).

Анализ манифеста на этом закончим. Просмотрел файлы ресурсов, ничего интересного не нашел. Теперь давайте перейдем к анализу полученного java-кода.

Анализируем код

Бот состоит как минимум из 19 основных рабочих классов. В результате анализа я выделил самые основные и интересные классы, которые отвечают за вредительскую деятельность бота:

  • — AutoStart.java;
  • — aService.java;
  • — smsParser.java;
  • — smsReciever.java;
  • — webServiceRobot.java;
MainActivity.java

Перед тем как начать анализ вышеуказанных классов, давайте заглянем в класс MainActivity. Посмотрим, что там есть интересного.

Сразу же при загрузке, бот пытается:

  • Все приходящие СМС-ки направить в SmsReciver;
  • Запускает службы AService и webService.

Далее, по коду видим еще интересную вещь:

Видно, что бот пытается добавить себя как еще одного администратора устройства.

Внимание! Обманный маневр.
Дальше в MainActivity.java запускает много разных шаблонов для отвода глаз пользователя, прикидываясь при этом приложением, которое якобы сканирует телефон на всякого рода мобильные уязвимости, а также якобы самообновляется. И вся эта красота дается на португальском языке, с указанием какого-то австралийского банка.

На самом деле не происходит никакого сканирования телефона, скачивания сертификатов и т.д. Запускаются лишь шаблоны пустышки, которые имитируют бурную деятельность. Вот пример такой пустышки:

Запускается Асинтаск, а там таймер, который просто запускается и… ничего не делает!

Ресивер AutoStart

Данный ресивер начинает свою работу сразу же после загрузки телефона и запускает те же действия, что были MainActivity:

Служба aService

Данный сервис, фильтруя события, регистрирует и запускает ресивер smsReciever, который в свою очередь будет получать и обрабатывать все полученные СМС-ки (но о нем чуть позже).
Вот и доказательства:

smsReceiver и smsParser

Теперь переходим к более интересным кускам кода бота. Это ресивер smsReceiver и отдельный класс для идентификации кодов из СМС-ок и веб-админки.

Привожу очень урезанный кусок кода из smsReceiver:

Я думаю, что подробные комментарии не нужны. Из кода видно что:

  • Устанавливаются флажки на начало/остановку записей телефонных звонков;
  • Отправка СМС;
  • Отправка списка смс-ок;
  • Отправка списка звонков;
  • Затирании инфы и др.

localsmsParser ключевой элемент. Поэтому дальше давайте поглядим на класс smsParser:

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

webServiceRobot

Данный класс похож на smsReceiver с тем отличием, что обрабатывает http-запросы. Выполняются практически все те же действия:

  • Отправка СМС;
  • Отправка списка смс-ок;
  • Отправка списка звонков;
  • Затирании инфы и др.

Плюс отправка полной информации об устройстве на сервер.

Выводы

Уважаемые господа, рады Вам предложить бота под мобильные устройства. В данный момент бот реализован под операционную систему Android, так же рады вам сообщить, что разработка Blackberry ведется полным ходом, и первые бета версии будут в ближайший месяц, всем клиентам по Android боту на Blackberry будут существенные скидки.
Теперь вкратце расскажу как это работает, для тех кто не знает, после установки на мобильное устройство, приложение моментально отстукивает в удобную web-panel при наличии 3g или wi-fi, а так же отсылает SMS на управляющий номер с текстом I am (ICCID+MODEL PHONE). Наш бот реализован таким образом, что после попадания в систему юзер продолжает спокойно пользоваться своим телефоном, все функции ему доступны в штатном режиме. В отличии от знаменитого Perkele у нас нет заточки под определенные номера для перехвата, наш бот работает через систему команд. Команды даются любым удобным для Вас способом, либо из web panel при наличии интернета, либо SMS с управляющего номера.

Функционал:

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

Уважаемые господа. Вышел UPDATE под Android. Всем клиентам стукнуть за обновлением и ждем новых клиентов.
Что нового?

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

Источник

Запускаем Telegram-бота на Android устройстве (Remote Bot for Telegram)

Четыре месяца назад у меня появилась идея написать Telegram-бота, который будет запускаться не на внешнем сервере, как большинство ботов, а на мобильном телефоне.

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

Разработка прототипа

Я стал изучать тему создания Telegram ботов по официальной документации и по примерам. В основном все примеры были написаны на Python. Поэтому не долго думая, стал искать способы запуска Python сервера на Android. Но оценив время на изучение Python и не найдя ничего подходящего для запуска сервера, занялся поиском альтернатив и наткнулся на несколько библиотек на Java для написания Telegram ботов. В итоге остановился на проекте от Pengrad: java-telegram-bot-api.

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

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

Приведу в пример функцию, позволяющую получать последние сообщения и отправлять их на обработку:

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

Добавив несколько команд для бота, такие как: отправка, чтение СМС, просмотр пропущенных звонков, информация о батарее, определение местоположения и др., я опубликовал приложение в Google Play, создал темы на нескольких форумах, стал ждать комментарии и отзывы.

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

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

Получение сообщений через Webhook

Я зарегистрировался на Digital Ocean, создал VPS на Ubuntu, затем реализовал простейший http сервер на Java, использующий Spark Framework. На сервер можно делать запросы 2 типов: push (отправка пуш-уведомления через webhook) и ping.

Пуш-нотификации отправлялись с помощью Google Firebase.

Генерация SSL сертификата

Протестировав отправку пуш-уведомлений, я стал разбираться с тем, как настроить и запустить сервер с HTTPS, так как это одно из требований при получении сообщений из Telegram через webhook.

Бесплатный сертификат можно сгенерировать с помощью сервиса letsencrypt.org, но одним из ограничений является то, что указываемый хост при генерации сертификата не может быть ip адресом. Регистрировать доменное имя я пока не хотел, тем более официальная документация Telegram Bot API разрешает использование самоподписанных сертификатов, поэтому я стал разбираться, как создать свой сертификат.

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

После запуска скрипта, на выходе получаем два файла: keystore.jks — используется на сервере, public_cert.pem — используется при установке webhook в Android приложении.

Для того, чтобы запустить HTTPS на Spark Framework достаточно добавить 2 строки, одну указывающую порт (разрешенные порты для webhook: 443, 80, 88, 8443), другую, указывающую сгенерированный сертификат и пароль к нему:

Чтобы установить webhook для бота, необходимо добавить в андроид-приложение следующие строки:

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

Функция чтения публичного сертификата из RAW ресурса:

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

Автоматическое создание бота

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

В этом мне помогла библиотека tdlib от создателей Telegram. К сожалению, я нашел очень мало примеров использования этой библиотеки, но разобравшись в API, оказалось, что не так все сложно. В итоге удалось реализовать авторизацию в Telegram по номеру телефона, добавление @Botfather в список контактов и отправку и получение сообщений заданному контакту, а в конкретном случае, боту @Botfather.

Добавление новых возможностей

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

По просьбам пользователей, я также добавил возможность вызова команд Tasker и отправки сообщений из Tasker в Telegram.

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

Заключение

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

Большое спасибо за внимание. Буду рад услышать от Вас полезные замечания и предложения.

Источник

You may also like...

Adblock
detector