Дата: 18/02/18 - 13:19 pm   9439 Тем и 91950 Сообщений

Автор Тема: Вирусы под андроид. Урок №2 (Об админке)  (Прочитано 4848 раз)

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

Февраля 19, 2016, 03:34:52 am
Прочитано 4848 раз

allmore

  • Moderator

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

  • 29
    13.12.15
  • Reputation:
    19
    • Black Cardinals
Начинаем второй мини урок или куда прикрутить наше чудо, которое мы написали. Я не буду описывать как написать админку с нуля или как правильно писать сайты. Тут будет чисто теория и методы. Итак приступим. Первое, что нам потребуется это гейт.

Гейт – это скрипт который будет принимать, отдавать команды. К примеру админка у нас стоит на http://site.ru/. Создаем скрипт gate.php. И кладём его в корень. Получаем наш гейт http://site.ru/gate.php. Важно: нельзя использовать слова gate и слова-маячки. Трафик может снифаться.

Этот скрипт будет принимать и отдавать команды. Самый верный способ – это отправка данных методом post и чтение вывода.

Получаем простую цепочку:

1. Определяем гейт.
2. Шлем отстук.
3. Забираем задачи, что гейт нам даст в ответ. (Лучше всего задачи забирать по одной, так как нам важно время обработки команд и память которыю мы используем на телефоне. Ведь там не как на компе, гигабайты ее. А java она все таки местами прожорливая.)
4. Шаг не всегда отрабатывает, так как не всегда нам нужно слать отчет о выполнении команд. Но если все таки надо. То мы это делаем 2м пунктом, но с определенным флагом.

Почему post? Чтобы в логах не было ничего кроме имени гейта.

А ,что слать то?

В отстук входят все основные параметры такие как imei, версия os, sdk, различные параметры пользователя. Кстати если вы не знаете как генерировать bot id, то imei будет в самый раз, чтобы различать всех ботов. Так как это уникальный параметр телефона. Все что вы считаете нужным, отсылаете, а ответ обрабатываете.

Список параметров рекомендуемый для отстука:
1. imei (id бота)
2. оператор
3. версия os
4. версия sdk(для разграничения функционала, так как до 4.4 и после разные методы работы используются)
5. модель телефона
6. серийный номер
7. есть ли рут (использовать расширенный функционал и консоль устройства)
8. версия билда (по этому параметру можно обновлять старые версии)
9. Номер телефона
10. Другии параметры важные вам

Формат запросов, самый удобный на мой взгляд это json. Но мы живем в 21м веке и этого мало. Это все надо шифровать еще.  Почему json? Его очень легко обрабатывать и на стороне сервера и на стороне клиента.Далее мы накладываем алгоритм шифрования. Самый простой это будет RC4, хотя их много, как говорится, на вкус и цвет товарища нет. Но тут мы столкнемся с одной проблемой, у нас могут появитсья всякого рода спец символы, с которыми возникнут сложности при передаче и декодировании. Выходом является обёртка из base64.

Алгоритм получается следующий:
1. Составляем json
2. Шифруем его RC4 или любым другим алгоритмом.
3. Оформляем в base64
4. Отправляем
5. Читаем вывод гейта.
6. Делаем все в обратном порядке. Снимаем base64 , расшифровываем, разбираем json. Если надо отрабатываем определенные действия.

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

Если что вспомню, допишу в комментариях. Получилось очень мало, так как написание админок – тема широко освещаемая. Просто механическая работа PHP программиста. Принял , обработал, отдал :) Следующий материал будет про сбор информации с телефона, где мы плотно рассмотрим, как и что можно с него грабить.

Комментарий модератора [Ar3s:]  Валентин переманил таки вас. Печально.
« Последнее редактирование: Февраля 23, 2016, 08:41:35 am от Ar3s »

Февраля 19, 2016, 12:13:43 pm
Ответ #1

AKella

  • Elementary Level

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

  • 435
    30.12.04
  • Reputation:
    13
Вопрос есть

Цитировать
Список параметров рекомендуемый для отстука:
...
9. Номер телефона
...
Как мы его определим то? Я использовал такой кусок,
TelephonyManager tMgr = (TelephonyManager)mAppContext.getSystemService(Context.TELEPHONY_SERVICE);
String mPhoneNumber = tMgr.getLine1Number();
 но проблема в том что он работает не всегда. Все зависит от оператора и настроек сим-карты. Как быть?

Февраля 19, 2016, 02:19:17 pm
Ответ #2

allmore

  • Moderator

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

  • 29
    13.12.15
  • Reputation:
    19
    • Black Cardinals
Номер телефона
1. как у вас в коде
2. поиск в контактах, чато бывает контакт, типа мой телефон или какой-то сервисный, который создается по умолчанию.
3. Отправка смс куда нибудь, и получение результата, через админку.

Февраля 19, 2016, 10:28:55 pm
Ответ #3

AKella

  • Elementary Level

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

  • 435
    30.12.04
  • Reputation:
    13
Цитировать
1. как у вас в коде
Работает не всегда, точнее у меня вообще не сработало нормально, из 4 проверенных мной симок и трех телефонов ни разу не сработо
Цитировать
2. поиск в контактах, чато бывает контакт, типа мой телефон или какой-то сервисный, который создается по умолчанию.
Получается нам нужно тянуть с собой какой-то массив, типа "Мой номер", "Мой номер телефона", "Я" и т.д. И то не факт, что это сработает. Потому что у человека под записью "Мой номер телефона" может быть номер второй симки или вообще какой-то левый.
Цитировать
3. Отправка смс куда нибудь, и получение результата, через админку.
Палевно, но всетаки самое оптимальное решение в данной ситуации. Просто недавно была такая проблема и думал, что всетаки я тупой и есть какое-то простое решение вопроса.

Февраля 22, 2016, 04:00:37 pm
Ответ #4

sh4aa


  • Оффлайн
  • *

  • 7
    22.02.16
  • Reputation:
    0
allmore, прежняя статья была более информативной, в этой так только теория  :(
Вот хотелось бы увидеть реализацию с json+RC4 на стороне сервера, парсинг и обработку json на стороне клиента.

Также есть вопрос:
1. imei (id бота)
Почему именно imei будет в качестве ID бота, вот на таблетках imei нету, что вы делаете в этом случае ???
К примеру я для ID бота использовал бы DeviceID
Цитировать
7. есть ли рут (использовать расширенный функционал и консоль устройства)
Если рут действительно есть, обычно на телефоне с установленным SuperSU спрашивает разрешение и в случае отказа результат будет отрицательный, можно ли это обойти ?


AKella
Цитировать
Я использовал такой кусок,
TelephonyManager tMgr = (TelephonyManager)mAppContext.getSystemService(Context.TELEPHONY_SERVICE);
String mPhoneNumber = tMgr.getLine1Number();
но проблема в том что он работает не всегда. Все зависит от оператора и настроек сим-карты. Как быть?
Данный метод работает только если в самой сим-карте записан ее номер.

И все что может помочь упоминалось выше, (Либо с помощью USSD запроса узнавать либо смотреть список контактов).
« Последнее редактирование: Февраля 22, 2016, 04:11:44 pm от sh4aa »

Февраля 22, 2016, 05:26:12 pm
Ответ #5

allmore

  • Moderator

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

  • 29
    13.12.15
  • Reputation:
    19
    • Black Cardinals
можно использовать в качестве ID сгучайно сгенерированный GUID. Генерировать по своему алгоритму, но достаточно большой длинный. Или id устройства.

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

по поводу рута, будет отдельная статья.

Февраля 25, 2016, 08:37:45 pm
Ответ #6

Ar3s

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