• 15 апреля стартует «Курс «SQL-injection Master» ©» от команды The Codeby

    За 3 месяца вы пройдете путь от начальных навыков работы с SQL-запросами к базам данных до продвинутых техник. Научитесь находить уязвимости связанные с базами данных, и внедрять произвольный SQL-код в уязвимые приложения.

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

    Запись на курс до 25 апреля. Получить промодоступ ...

Статья Ферма Android девайсов - FakeTelephony и WifiInfo

И снова здравствуйте :)

Продолжим обсуждение того, как сделать свою ферму на Android девайсах и не облажаться (а сделать это просто). Если вспомним, то мы уже рассмотрели как нам скрыть root права многими способами и то, как обойти проверки на постоянное нахождение девайса на зарядке. Сегодня же я предлагаю посмотреть на то, как телефон подключен к сети.

Напоминаю что все, что в SharedPref.getXValue или генерируется на удаленном сервере и подбирается для конкретной задачи девайса на сессию, в рамках которой выполняется действие.

WiFi

Сначала рассмотрим Wifi как самый простой способ подключения к интернету.
Хочу обратить внимание на то, что вам нужно будет подумать о том, как не выдавать свой IP. Один из вариантов я описал в этом комментарии ( ).

Тут все на самом деле прозаично. Чаще всего у девайса забирают его MAC адрес, название сети (SSID) и ее BSSID. Живут они все в android.net.wifi.WifiInfo там и будем менять.

Java:
XposedHelpers.findAndHookMethod("android.net.wifi.WifiInfo", lpparam.classLoader, "getMacAddress", new XC_MethodHook() {
  @Override
  protected void afterHookedMethod(MethodHookParam param) throws Throwable {
    param.setResult(SharedPref.getXValue("WifiMAC"));
  }
});
XposedHelpers.findAndHookMethod("android.net.wifi.WifiInfo", lpparam.classLoader, "getSSID", new XC_MethodHook() {
  @Override
  protected void afterHookedMethod(MethodHookParam param) throws Throwable {
    param.setResult(SharedPref.getXValue("WifiName"));
  }
});
XposedHelpers.findAndHookMethod("android.net.wifi.WifiInfo", lpparam.classLoader, "getBSSID", new XC_MethodHook() {
  @Override
  protected void afterHookedMethod(MethodHookParam param) throws Throwable {
    param.setResult(SharedPref.getXValue("BSSID"));
  }
});

FakeTelephony/gsm

Тут посложнее уже, так как нам хочется выдать девайс за живой. А это уже требует времени. Но давайте по частям.

В основном все данные прилами берутся из android.telephony.TelephonyManager и тут я говорю про
  • IMEI, который есть getDeviceId
  • SubscriberId -> getSubscriberId
  • PhoneNumber -> getLine1Number
  • SimSerial -> getSimSerialNumber
  • CarrierCode -> getNetworkOperator, getSimOperator
  • CountryCode -> getNetworkCountryIso, getSimCountryIso
Так как место одно, то менять будем кучей опять таки данными, которые нас нагенерил сервер (в будущем я опишу полную систему с очновными частями и кто за что отвечает)
Java:
public void FakeTelephony(LoadPackageParam loadPkgParam){
    String TelePhone = "android.telephony.TelephonyManager";
    HookTelephony(TelePhone, loadPkgParam, "getDeviceId", SharedPref.getXValue("IMEI"));
    HookTelephony(TelePhone, loadPkgParam, "getSubscriberId", SharedPref.getXValue("SUBSCRIBERID"));
    HookTelephony(TelePhone, loadPkgParam, "getLine1Number", SharedPref.getXValue("PhoneNumber"));
    HookTelephony(TelePhone, loadPkgParam, "getSimSerialNumber", SharedPref.getXValue("SimSerial"));
    HookTelephony(TelePhone, loadPkgParam, "getNetworkOperator", SharedPref.getXValue("CarrierCode"));
    HookTelephony(TelePhone, loadPkgParam, "getSimOperator", SharedPref.getXValue("CarrierCode"));
    HookTelephony(TelePhone, loadPkgParam, "getNetworkCountryIso", SharedPref.getXValue("CountryCode"));
    HookTelephony(TelePhone, loadPkgParam, "getSimCountryIso", SharedPref.getXValue("CountryCode"));
}

private void HookTelephony(String hookClass, LoadPackageParam loadPkgParam, String funcName, final String value){
    try {
        XposedHelpers.findAndHookMethod(hookClass, loadPkgParam.classLoader, funcName, new XC_MethodHook() {

            @Override
            protected void afterHookedMethod(MethodHookParam param)
                    throws Throwable {
                // TODO Auto-generated method stub
                super.afterHookedMethod(param);      
                param.setResult(value);              
            }
           
        });
    } catch (Exception e) {
        XposedBridge.log("Fake " + funcName + " ERROR: " + e.getMessage());
    }
}

Но бывало что различные системы забирали данные по оператору и из build.prop. Там тоже меняем, но как работать с build.prop расскажу в слудующей статье, так как там много подводных камней :/ Вообще build.prop очень тонкий и чувствиельный файл, так как некорректно заменив данные в нем можно отправить девайс в бутлуп.

28319



Так мы закончили смотреть еше на один важную деталь в создании фермы девайсов для каких-либо целей ;)
 

never

Green Team
24.01.2019
16
5
BIT
0
интересная статься, а что google_id не идет в обычном запросе с девайса, сорока нашептала что многие системы антифрода именно по нему получают данные ? и было бы интересно узнать про генератор этих данных по подробнее
 

R C H

New member
02.10.2019
2
0
BIT
0
PrivacyProxy модуль поможет вам защитить вашу личную информацию, давая вам контролировать то, какая информация посылается из устройства.
Device Faker позволяет подменить устройство, чтобы сделать его похожим на другое. Приложения будут видеть ваш телефон как другую модель.
Device Emulator Pro модуль для подмены различных ID девайса: IMEI, Device ID, Serial, Bluetooth Mac, Wifi Mac/SSID, Mobile no., SIM Card Serial, SIM Subscriber ID, Network operator country, Network operator name, Operator MCC/MNC code, Google Email/Account, Google Advertising ID.
Device ID Masker
Device ID Changer
 
Мы в соцсетях:

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