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

deadroot

deadroot

Well-known member
06.01.2019
60
134
И снова здравствуйте :)

Продолжим обсуждение того, как сделать свою ферму на 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 очень тонкий и чувствиельный файл, так как некорректно заменив данные в нем можно отправить девайс в бутлуп.

Ферма Android девайсов - FakeTelephony и WifiInfo



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

never

Happy New Year
24.01.2019
12
3
интересная статься, а что google_id не идет в обычном запросе с девайса, сорока нашептала что многие системы антифрода именно по нему получают данные ? и было бы интересно узнать про генератор этих данных по подробнее
 
Мы в соцсетях:  ТелеграмВконтактеДзенФейсбукТвиттерЮтуб