РАЗБОР
Статья
Ферма Android девайсов - FakeTelephony и WifiInfo
Режим чтения
[ обложка статьи ]
И снова здравствуйте 
Продолжим обсуждение того, как сделать свою ферму на Android девайсах и не облажаться (а сделать это просто). Если вспомним, то мы уже рассмотрели как нам скрыть root права многими способами и то, как обойти проверки на постоянное нахождение девайса на зарядке. Сегодня же я предлагаю посмотреть на то, как телефон подключен к сети.
WiFi
Сначала рассмотрим Wifi как самый простой способ подключения к интернету.
Тут все на самом деле прозаично. Чаще всего у девайса забирают его MAC адрес, название сети (SSID) и ее BSSID. Живут они все в
FakeTelephony/gsm
Тут посложнее уже, так как нам хочется выдать девайс за живой. А это уже требует времени. Но давайте по частям.
В основном все данные прилами берутся из
Но бывало что различные системы забирали данные по оператору и из
Так мы закончили смотреть еше на один важную деталь в создании фермы девайсов для каких-либо целей
Продолжим обсуждение того, как сделать свою ферму на Android девайсах и не облажаться (а сделать это просто). Если вспомним, то мы уже рассмотрели как нам скрыть root права многими способами и то, как обойти проверки на постоянное нахождение девайса на зарядке. Сегодня же я предлагаю посмотреть на то, как телефон подключен к сети.
WiFi
Сначала рассмотрим Wifi как самый простой способ подключения к интернету.
Тут все на самом деле прозаично. Чаще всего у девайса забирают его 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, который естьgetDeviceIdSubscriberId->getSubscriberIdPhoneNumber->getLine1NumberSimSerial->getSimSerialNumberCarrierCode->getNetworkOperator,getSimOperatorCountryCode->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 очень тонкий и чувствиельный файл, так как некорректно заменив данные в нем можно отправить девайс в бутлуп.Так мы закончили смотреть еше на один важную деталь в создании фермы девайсов для каких-либо целей
AI-выжимка
сгенерировано ИИ
Тезисы статьи скоро
Статья читается полностью. Тезисы со ссылками на разделы появятся позже.
Содержание
Codeby Academy
Практика и мастерство
От основ до продвинутого — программы для практиков Codeby.
Перейти к курсу →
Поиск в обсуждении
Карта ветки
Продолжить чтение
Следующий разбор
SkyForge 1.1.1: пакетный менеджер, whitelist, blacklist и кнопка «Посмеяться» — сделано за 3 часа
Комментарии
2