Мануал Фиктивный адрес. Как подменить геолокацию на Android, чтобы обманывать приложения

barracudafs

Заблокирован
Заблокирован

barracudafs

Заблокирован
Заблокирован

Обратите внимание, пользователь заблокирован на форуме. Не рекомендуется проводить сделки.
В Android существует замечательная возможность назначать поставщиком геокоординат любую программу, и вся система будет использовать те широту и долготу, которые она выдаст. В этой статье я покажу, как этим пользоваться и как самому написать программу для спуфинга координат GPS.
Идея родилась у меня в процессе написания статьи «Мониторим мониторинг. Что внутри у приложения для изоляции на дому» — именно тогда я обнаружил возможность менять поставщика координат в операционной системе, что открывает для пользователей много интересных возможностей.​

С точки зрения юзера все очень просто: нужно лишь установить специальное приложение, затем включить в настройках режим разработчика и выбрать установленное приложение в качестве поставщика фиктивного местоположения. Таких программ великое множество — от простеньких до довольно развесистых, умеющих не только подменять координаты на заданные, но и менять их по расписанию или проигрывать заранее записанные треки, чтобы имитировать движение телефона по какому-то маршруту. В общем, вбивай запрос «Fake GPS» и выбирай по вкусу.

Сразу предупреждаю: надежность этого метода не очень высокая. При желании можно программно отследить наличие на телефоне такой программы-поставщика, и если программа серьезная, то просто так обдурить ее может не получиться.

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

Реверсим FakeGPS​

В качестве подопытного кролика было взято приложение FakeGPS 5.0.0. Внешне приложение представляет собой карту, на которой можно установить маркер в произвольную точку и с помощью кнопок «Старт» и «Стоп» запускать или останавливать трансляцию координат выбранной точки.

Вооружившись JEB Decompiler, открываем и смотрим. Первое, что бросается в глаза, — это наличие в манифесте пермишена android.permission.ACCESS_MOCK_LOCATION.

<uses-permission android:name="android.permission.INTERNET" />
<uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" />
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />
<uses-permission android:name="android.permission.WAKE_LOCK" />
<uses-permission android:name="android.permission.ACCESS_COARSE_LOCATION" />
<uses-permission android:name="android.permission.ACCESS_FINE_LOCATION" />
<uses-permission android:name="android.permission.ACCESS_MOCK_LOCATION" />
<uses-permission android:name="android.permission.WRITE_SETTINGS" />
<uses-permission android:name="com.android.vending.BILLING" />
В основной активити ничего интересного не обнаружено, обычная инициализация и настройка, но есть сервис с говорящим названием FakeGPSService.


Попытаемся прорваться сквозь дебри обфускации и посмотреть, что в нем есть интересного.

В методе onCreate имеется такой код:

this.f = "gps";
this.d = (LocationManager)this.getSystemService("location");
try {
if(this.d == null) {
goto label_46;
}
this.d.removeTestProvider(this.f);
goto label_46;
} catch(IllegalArgumentException | NullPointerException unused_ex) {
goto label_46;
}

label_46:
if(this.d != null) {
this.d.addTestProvider(this.f, false, false, false, false, true, false, false, 0, 5);
this.d.setTestProviderEnabled(this.f, true);
}
Если проще, то инициализируем LocationManager значением this.getSystemService("location"), затем удаляем тестового провайдера "gps" функцией removeTestProvider и добавляем заново с помощью функции addTestProvider, не забывая после этого включить его функцией setTestProviderEnabled("gps", true). Всё, тестовый провайдер добавлен и включен. А далее при изменении пользователем координат создаем и устанавливаем новое местоположение в функции onEventMainThread:

// Создаем
long v1 = System.currentTimeMillis();
Location v3 = new Location("");
v3.setProvider("gps");
v3.setLatitude(arg10.latitude);
v3.setLongitude(arg10.longitude);
v3.setAltitude(((double)FakeGPSService.p));
v3.setBearing(((float)FakeGPSService.q));
v3.setTime(v1);
v3.setAccuracy(((float)FakeGPSService.o));
v3.setElapsedRealtimeNanos(SystemClock.elapsedRealtimeNanos());

// И устанавливаем
try {
this.d.setTestProviderLocation(this.f, v3);
Log.d("GpsMockProvider", v3.toString());
} catch(IllegalArgumentException unused_ex) {
}
Вроде бы все более-менее ясно, можно приступать к написанию своего провайдера фиктивных местоположений.
 

ZUNAMI

Интересующийся
Участник

ZUNAMI

Интересующийся
Участник

подскажите таким способом Тикток можно объегоривать
 

PrinceShoto

Пользователь
Пользователь

PrinceShoto

Пользователь
Пользователь

как вариант, можно сделать слждующее, записать в первую очередь X8 Sandbox это емулятор андроида в самом андроиде... записываете впн и Fake Gps, включаем ВПН заходим на любой сайт который покажет ваш GPS по ип адресу например ip2location.com копируем GPS координаты и прописываем в Fake Gps, после включаете X8 Sandbox и вам чудо Play Market поверил думаю остальные програмы тоже поверят
 
Сверху Снизу