И снова здравствуйте 
Продолжим обсуждение того, как сделать свою ферму на Android девайсах и не облажаться (а сделать это просто). Если вспомним, то мы уже рассмотрели как нам скрыть root права многими способами и то, как обойти проверки на постоянное нахождение девайса на зарядке. Сегодня же я предлагаю посмотреть на то, как телефон подключен к сети.
WiFi
Сначала рассмотрим Wifi как самый простой способ подключения к интернету.
Тут все на самом деле прозаично. Чаще всего у девайса забирают его MAC адрес, название сети (SSID) и ее BSSID. Живут они все в
	
	
	
	
		
FakeTelephony/gsm
Тут посложнее уже, так как нам хочется выдать девайс за живой. А это уже требует времени. Но давайте по частям.
В основном все данные прилами берутся из
	
	
	
	
		
Но бывало что различные системы забирали данные по оператору и из
		
		
	
	
		
 
	
Так мы закончили смотреть еше на один важную деталь в создании фермы девайсов для каких-либо целей
				
			
Продолжим обсуждение того, как сделать свою ферму на 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 очень тонкий и чувствиельный файл, так как некорректно заменив данные в нем можно отправить девайс в бутлуп.Так мы закончили смотреть еше на один важную деталь в создании фермы девайсов для каких-либо целей

 
	 
	 
	 
	 
	
 
 
		 
 
		 
 
		 
 
		 
	