Статья Xposed: Android-Ферма девайсов для каких-то нужд

А давайте создадим ферму девайсов, которые должны будут выполнять какие-то действия и так, чтобы это было удобно и беспалевно?

А давайте создадим ферму девайсов, которые должны будут выполнять какие-то действия и так, чтобы это было удобно и беспалевно?


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

Как могут определить такую ферму antifraud системыи побанить ваши аккаунты? Тут огромый простор для фантазий и самое первое что приходит в голову дак это:
  • Все девайсы всегда стоят на зарядке и это не похоже на поведение живых пользователей. У вас телефоны всегда на зарядке? :)
  • GPS у них тоже в одном положении, они не двигаются
  • Симки отсутсвуют почти у всех, соединение по WiFi
  • Девайсы зафиксированы в достаточно жестком положении (они не крутятся в руке как у живого пользователя) и нам придется подумать о том, как обмануть гироскоп и подобные датчики
Кстати, куски кода, которые я раскрываю являются частью системы, которую мы делали и она состоит их таких частей как серверный бэкэнд (который хранит, планирует и разрадет задания девайсам по API) и фронтенд в виде девайсов, которые работают и выполняют задания. Девайсы по расписанию опрашивают сервер для того, чтобы получить таску и если ее нет, то повторяют запрос через какое-то время. Про планирование тасок я расскажу отдельно потом.

Многие данные генерируются и отдаютмя по API, попадая в SharedPref, откуда потом забираются в жизненный цикл задачи ;)

Начнем как раз с батареи и типа подключения к зарядке.
У батареи есть такие параметры как temperature, level, plugged, health и другие, но если описывать все, то нам не хватит места на форуме и статья будет большой и скучной. Поэтому будет хукать то, что самое интересное, а кому нужно остальное ( ), по аналогии доработают под свои нужды :)

Получить значения проще всего из android.content.Intent, поэтому будем хукать именно этот метод. Для того, чтобы понять какие значения нам нужны идем смотреть в документацию Android ( )

Java:
import android.support.v4.app.NotificationCompat;

import java.util.Random;

import de.robv.android.xposed.XC_MethodHook;
import de.robv.android.xposed.XposedBridge;
import de.robv.android.xposed.XposedHelpers;
import de.robv.android.xposed.callbacks.XC_LoadPackage.LoadPackageParam;

public class FakeBattery {

 public void fakePinStt(LoadPackageParam loadPkgParam) {
  try {
   XposedHelpers.findAndHookMethod("android.content.Intent", loadPkgParam.classLoader, "getIntExtra", String.class, Integer.TYPE, new XC_MethodHook() {

    @Override
    protected void beforeHookedMethod(MethodHookParam param)
    throws Throwable {
     // TODO: Auto-generated method stub
     super.beforeHookedMethod(param);
     if (param.args[0] != null) {
      if (param.args[0] == "temperature") {
       param.setResult(Integer.valueOf(SharedPref.getXValue("Temp")));
      }
      if (param.args[0] == "level") {
       param.setResult(Integer.valueOf(SharedPref.getXValue("Level")));
      }
      if (param.args[0] == "plugged") {
       param.setResult(Integer.valueOf(random02()));
      }
//......
      if (param.args[0] == "health") {
       param.setResult(Integer.valueOf("2"));
      }
     }
    }

   });
  } catch (Exception e) {
   XposedBridge.log("Fake Pin ERROR: " + e.getMessage());
  }

 }
 private String random02() {
  String[] arrayValue = new String[] { "0", "1", "2" };
  return arrayValue[new Random().nextInt(arrayValue.length)];
 }
}

В следующих статьях будем рассматривать остальные компоненты системы и то, что нужно хукать ;) Думаю что поговорим о местоположении и типе подключения девайса к сети (sim,wifi).
 

never

Green Team
24.01.2019
16
5
BIT
0
интересная статья, интересно как система антифрод будет относится к такому количеству устройств на одном ip, да если geo разное то как один айпишник? как мне кажется что проверка по айпи и сверка с гео идет впервую очередь ( правда это субьективное мнение) или есть способ и это обойти на таком количестве аппаратов причем одновременно?
 
Последнее редактирование:

deadroot

Green Team
06.01.2019
60
142
BIT
4
интересная статья, интересно как система антифрод будет относится к такому количеству устройств на одном ip, да если geo разное то как один айпишник? как мне кажется что проверка по айпи и сверка с гео идет впервую очередь ( правда это субьективное мнение) или есть способ и это обойти на таком количестве аппаратов причем одновременно?

Да, поэтому proxy и vpn, сервера в огромном количестве (можно покупать, искать роутеры и все такое с ними делать). Или же использовать поключение по SIM и делать реконнект в мобильную сеть в надежде получить новый IP для своего региона.
  1. Потом сортируем IP адреса по геобазам ( )
  2. Привязываем IP к локации (чаще город или страна просто), генерируем GPS по ним
  3. Связываем с SIM данными (наличие оператора в этой стране)
 
  • Нравится
Реакции: Vander

Black Stalker

New member
14.01.2020
1
0
BIT
1
Сразу же возникает вопрос, для чего эта ферма может понадобится?
Сорян за глупость, но я новичек
 
23.05.2020
2
0
BIT
0
Посмотреть вложение 27303

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

Как могут определить такую ферму antifraud системыи побанить ваши аккаунты? Тут огромый простор для фантазий и самое первое что приходит в голову дак это:
  • Все девайсы всегда стоят на зарядке и это не похоже на поведение живых пользователей. У вас телефоны всегда на зарядке? :)
  • GPS у них тоже в одном положении, они не двигаются
  • Симки отсутсвуют почти у всех, соединение по WiFi
  • Девайсы зафиксированы в достаточно жестком положении (они не крутятся в руке как у живого пользователя) и нам придется подумать о том, как обмануть гироскоп и подобные датчики
Кстати, куски кода, которые я раскрываю являются частью системы, которую мы делали и она состоит их таких частей как серверный бэкэнд (который хранит, планирует и разрадет задания девайсам по API) и фронтенд в виде девайсов, которые работают и выполняют задания. Девайсы по расписанию опрашивают сервер для того, чтобы получить таску и если ее нет, то повторяют запрос через какое-то время. Про планирование тасок я расскажу отдельно потом.

Многие данные генерируются и отдаютмя по API, попадая в SharedPref, откуда потом забираются в жизненный цикл задачи ;)

Начнем как раз с батареи и типа подключения к зарядке.
У батареи есть такие параметры как temperature, level, plugged, health и другие, но если описывать все, то нам не хватит места на форуме и статья будет большой и скучной. Поэтому будет хукать то, что самое интересное, а кому нужно остальное ( ), по аналогии доработают под свои нужды :)

Получить значения проще всего из android.content.Intent, поэтому будем хукать именно этот метод. Для того, чтобы понять какие значения нам нужны идем смотреть в документацию Android ( )

Java:
import android.support.v4.app.NotificationCompat;

import java.util.Random;

import de.robv.android.xposed.XC_MethodHook;
import de.robv.android.xposed.XposedBridge;
import de.robv.android.xposed.XposedHelpers;
import de.robv.android.xposed.callbacks.XC_LoadPackage.LoadPackageParam;

public class FakeBattery {

public void fakePinStt(LoadPackageParam loadPkgParam) {
  try {
   XposedHelpers.findAndHookMethod("android.content.Intent", loadPkgParam.classLoader, "getIntExtra", String.class, Integer.TYPE, new XC_MethodHook() {

    @Override
    protected void beforeHookedMethod(MethodHookParam param)
    throws Throwable {
     // TODO: Auto-generated method stub
     super.beforeHookedMethod(param);
     if (param.args[0] != null) {
      if (param.args[0] == "temperature") {
       param.setResult(Integer.valueOf(SharedPref.getXValue("Temp")));
      }
      if (param.args[0] == "level") {
       param.setResult(Integer.valueOf(SharedPref.getXValue("Level")));
      }
      if (param.args[0] == "plugged") {
       param.setResult(Integer.valueOf(random02()));
      }
//......
      if (param.args[0] == "health") {
       param.setResult(Integer.valueOf("2"));
      }
     }
    }

   });
  } catch (Exception e) {
   XposedBridge.log("Fake Pin ERROR: " + e.getMessage());
  }

}
private String random02() {
  String[] arrayValue = new String[] { "0", "1", "2" };
  return arrayValue[new Random().nextInt(arrayValue.length)];
}
}

В следующих статьях будем рассматривать остальные компоненты системы и то, что нужно хукать ;) Думаю что поговорим о местоположении и типе подключения девайса к сети (sim,wifi).

Реализовали идею с фермой мобильных телефонов?
Интересует цена фермы на 20-30 аппаратов.
 
Мы в соцсетях:

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