Android模擬位置信息



Android模擬位置程序,俗稱GPS欺騙,只能修改采用GPS定位的軟件。 手機定位方式目前有4種:基站定位,WIFI定位,GPS定位,AGPS定位

常見的修改手法:
1. 抓包欺騙法,抓包改包欺騙服務器端, 但是得專門去針對某款app,而且現在很多app數據包都加密了
2. hook java層經緯度獲取函數, 這個方法以前可以用,現在不行了
3. hook native層經緯度獲取函數 
4. 使用允許模擬地址位置信息(不是很通用有版本限制)

為了修改微信朋友圈地理位置信息,為了好玩
試過了上面的一些方法
1. xpose hook java層gps函數試過了沒有用
2. 抓包發現全部加密了(去年經緯度信息都還沒有加密的)
3. hook native沒有去研究
4. 允許地址位置信息模擬(實測可以用)  無需root
       但是有版本限制, 5.0以后這個功能有限制
       4.4.2版本的Nexus失效
       紅米4.1.2成功了

下文主要講解方法4, 允許模擬地理位置信息法

一.開啟允許位置信息模擬
該功能在開發者選項里面,勾選允許地理位置信息即可


二. 開始編碼
1. 成員定義
private String mMockProviderName = LocationManager.GPS_PROVIDER;
private Thread thread;
private LocationManager locationManager;
private Boolean is_run = true;  

2. 初始化
/**
 * inilocation 初始化 位置模擬
 * 
 */
private void init_location() {
    locationManager = (LocationManagerthis.getSystemService(Context.LOCATION_SERVICE);
    locationManager.addTestProvider(mMockProviderNamefalsetruefalsefalsetruetruetrue05);
    locationManager.setTestProviderEnabled(mMockProviderNametrue);
    locationManager.requestLocationUpdates(mMockProviderName00this);
}  

3. 設置地理位置模擬
@SuppressLint("NewApi")
private void setLocation(double longitudedouble latitude) {
    Location location = new Location(mMockProviderName);
    location.setTime(System.currentTimeMillis());
    location.setLatitude(latitude);
    location.setLongitude(longitude);
    location.setAltitude(2.0f);
    location.setAccuracy(3.0f);
    location.setElapsedRealtimeNanos(SystemClock.elapsedRealtimeNanos());
    locationManager.setTestProviderLocation(mMockProviderNamelocation);
}  

4. 開啟線程一直修改
// 開啟線程,一直修改GPS坐標
thread = new Thread(new Runnable() {
    @Override
    public void run() {
        while (is_run) {
            try {
                Thread.sleep(500);
                setLocation(longitudelatitude);
            } catch (InterruptedException e) {
                e.printStackTrace();
            }
        }
    }
});
thread.start();  

5.檢測是否開啟了允許地址位置模擬
import android.provider.Settings;
if (Settings.Secure.getInt(getContentResolver(),Settings.Secure.ALLOW_MOCK_LOCATION0) != 0){
    // 開啟了地理位置模擬
}  


最后在加上百度地圖SDK就可以隨意的獲取經緯度坐標了並修改地理位置坐標了
百度地圖SDK用法:

代碼上傳github:

最后的效果:







免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM