Android中Xposed框架篇---修改系統(tǒng)位置信息實(shí)現(xiàn)自身隱藏功能實(shí)例
一、前言
本文主要來介紹一個(gè)實(shí)際案例就是如何通過這個(gè)框架來修改系統(tǒng)的地理位置信息來實(shí)現(xiàn)隱藏功能,在如今社交工具的發(fā)展特別是微信,他有一個(gè)實(shí)時(shí)位置共享功能,那么對于那些不是單身狗的同學(xué)來說可能會有些蛋疼,哪天媳婦要查崗發(fā)送位置,結(jié)果你不在她期望的位置這時(shí)候就尷尬了,而且朋友圈在分享內(nèi)容的時(shí)候可以選擇當(dāng)前位置,有的屌絲就像我一樣沒錢但是又想到處旅游,那么這時(shí)候咋們就可以一本正經(jīng)的裝個(gè)逼了。
二、定位原理
看到上面說的那么多,感覺這個(gè)功能必須要搞起來了,好處太多了,下面咋們就開始操作了,但是在這之前一定要先熟悉Xposed框架的使用規(guī)則,還不了解的同學(xué)可以去這里查看:Xposed框架的使用規(guī)則 在這篇文章中我們了解到了我們只需要在實(shí)現(xiàn)了IXposedHookLoadPackage接口的類中的回調(diào)方法handleLoadPackage中做攔截操作即可。但是這里我們還得先做一件事,那就是關(guān)于Android中的定位系統(tǒng)知識,我們知道手機(jī)定位有多種方式,一般有這幾種方式:
第一、衛(wèi)星定位
GPS(Global Positioning System)即全球定位系統(tǒng),是由美國建立的一個(gè)衛(wèi)星導(dǎo)航定位系統(tǒng),利用該系統(tǒng),用戶可以在全球范圍內(nèi)實(shí)現(xiàn)全天候、連續(xù)、實(shí)時(shí)的三維導(dǎo)航定位和測速;另外,利用該系統(tǒng),用戶還能夠進(jìn)行高精度的時(shí)間傳遞和高精度的精密定位。
第二、基站定位
移動電話測量不同基站的下行導(dǎo)頻信號,得到不同基站下行導(dǎo)頻的TOA(到達(dá)時(shí)刻)或 TDOA(到達(dá)時(shí)間差),根據(jù)該測量結(jié)果并結(jié)合基站的坐標(biāo),一般采用三角公式估計(jì)算法,就能夠計(jì)算出移動電話的位置。實(shí)際的位置估計(jì)算法需要考慮多基站(3個(gè)或3個(gè)以上)定位的情況,因此算法要復(fù)雜很多。一般而言,移動臺測量的基站數(shù)目越多,測量精度越高,定位性能改善越明顯。
第三、WiFi定位
每一個(gè)無線AP(路由器)都有一個(gè)全球唯一的MAC地址,并且一般來說無線AP在一段時(shí)間內(nèi)不會移動;
設(shè)備在開啟Wi-Fi的情況下,無線路由器默認(rèn)都會進(jìn)行SSID廣播(除非用戶手動配置關(guān)閉該功能),在廣播幀包含了該路由器的MAC地址;采集裝置可以通過接收周圍AP發(fā)送的廣播信息獲取周圍AP的MAC信息和信號強(qiáng)度信息,將這些信息上傳到服務(wù)器,經(jīng)過服務(wù)器的計(jì)算,保存為“MAC-經(jīng)緯度”的映射,當(dāng)采集的信息足夠多時(shí)候就在服務(wù)器上建立了一張巨大的WiFi信息網(wǎng)絡(luò);
當(dāng)一個(gè)設(shè)備處在這樣的網(wǎng)絡(luò)中時(shí),可以將收集到的這些能夠標(biāo)示AP的數(shù)據(jù)發(fā)送到位置服務(wù)器,服務(wù)器檢索出每一個(gè)AP的地理位置,并結(jié)合每個(gè)信號的強(qiáng)弱程度,計(jì)算出設(shè)備的地理位置并返回到用戶設(shè)備,其計(jì)算方式和基站定位位置計(jì)算方式相似,也是利用三點(diǎn)定位或多點(diǎn)定位技術(shù);位置服務(wù)商要不斷更新、補(bǔ)充自己的數(shù)據(jù)庫,以保證數(shù)據(jù)的準(zhǔn)確性。當(dāng)某些WiFi信息不在數(shù)據(jù)庫中時(shí),可以根據(jù)附近其他的WiFi位置信息推斷出未知WiFi的位置信息,并上傳服務(wù)器。
第四、AGPS定位
AGPS(AssistedGPS:輔助全球衛(wèi)星定位系統(tǒng))是結(jié)合GSM/GPRS與傳統(tǒng)衛(wèi)星定位,利用基地臺代送輔助衛(wèi)星信息,以縮減GPS芯片獲取衛(wèi)星信號的延遲時(shí)間,受遮蓋的室內(nèi)也能借基地臺訊號彌補(bǔ),減輕GPS芯片對衛(wèi)星的依賴度。AGPS利用手機(jī)基站的信號,輔以連接遠(yuǎn)程定位服務(wù)器的方式下載衛(wèi)星星歷 (英語:Almanac Data),再配合傳統(tǒng)的GPS衛(wèi)星接受器,讓定位的速度更快。是一種結(jié)合網(wǎng)絡(luò)基站信息和GPS信息對移動臺進(jìn)行定位的技術(shù),既利用全球衛(wèi)星定位系統(tǒng)GPS,又利用移動基站,解決了GPS覆蓋的問題,可以在2代的G、C網(wǎng)絡(luò)和3G網(wǎng)絡(luò)中使用。
在Android中關(guān)于這幾種定位都有具體的調(diào)用方法,所以如果想修改系統(tǒng)的定位信息,那么就必須先了解這幾種調(diào)用方式,在之前的一篇文章中也說到了,Hook的最關(guān)鍵一點(diǎn)就是需要找到Hook的地方,這個(gè)就需要去閱讀源碼來查找了。在Android中一般獲取位置信息就涉及到下面的幾個(gè)類和方法:
第一個(gè):采用基站定位信息
android.telephony.TelephonyManager
+getCellLocation
+getPhoneCount
+getNeighboringCellInfo
+getAllCellInfo
android.telephony.PhoneStateListener
+onCellLocationChanged
+onCellInfoChanged
第二個(gè):采用Wifi定位信息
android.NET.wifi.WifiManager
+getScanResults
+getWifiState
+isWifiEnabled
android.Net.wifi.WifiInfo
+getMacAddress
+getSSID
+getBSSID
android.net.NetworkInfo
+getTypeName
+isConnectedOrConnecting
+isConnected
+isAvailable
android.telephony.CellInfo
+isRegistered
第三個(gè):采用GPS定位
android.location.LocationManager
+getGpsStatus
+getLastLocation
+getLastKnownLocation
+getProviders
+getBestProvider
+addGpsStatusListener
+addNmeaListener
三、攔截操作
有了這些方法和類,下面就開始攔截操作了,但是本文采用是這種攔截方式,因?yàn)樵诙啻卧囼?yàn)之后,發(fā)現(xiàn)Android中很多定位app絕大部分都是采用基站+GPS+Wifi這三種混合方式來進(jìn)行定位的,但是如果我們要去都攔截這三種方式那就太費(fèi)勁了,所以這里我們這么干,只攔截操作GPS定位,而其他兩種方式攔截之后返回值全部設(shè)置空,這樣讓系統(tǒng)強(qiáng)制的使用GPS定位,為什么要采用GPS定位這種方式呢?因?yàn)槠渌膬煞N方式在攔截之后去構(gòu)造假的數(shù)據(jù)有點(diǎn)麻煩,而對于GPS這種方式咋們只需要構(gòu)造一個(gè)假的Location對象就可以了,操作非常方便。到這里咋們思路有了,下面就來開始操作了:
首先咋們先把其他的定位方式信息攔截之后全部返回null值,這樣就可以強(qiáng)制系統(tǒng)使用GPS定位數(shù)據(jù)了,接下來就開始攔截GPS定位系統(tǒng)數(shù)據(jù)了,因?yàn)楸救藟粝肴ヅ_灣看看五月天,所以這里就構(gòu)造一個(gè)假的臺北數(shù)據(jù):
直接構(gòu)造一個(gè)假的Location對象,然后設(shè)置成參數(shù)即可,因?yàn)檫@里的location對象是通過回調(diào)方式傳回去的,所以需要修改參數(shù)而不是返回值哦。這里如果有同學(xué)想去其他地方,又不知道具體的經(jīng)緯度信息,該怎么辦呢?這個(gè)可以使用百度地圖的拾取器功能:
點(diǎn)擊去之后就可以隨意選擇地理位置了:

選中之后,可以看到了經(jīng)緯度信息,在右上角處就可以賦值信息了:

好了,到這里咋們就成功了修改了系統(tǒng)中的地理位置信息,接下來咋們就開始運(yùn)行了,運(yùn)行步驟也很簡單,先運(yùn)行模塊,然后XposedInstaller工具會提示模塊更新或者有新模塊需要激活,進(jìn)入工具點(diǎn)擊激活或者更新,然后重啟設(shè)備生效即可。
四、操作結(jié)果演示
當(dāng)我們再次重啟之后,打開百度地圖驚奇的發(fā)現(xiàn)沒什么數(shù)據(jù)?這里不是我們攔截出錯(cuò)了,而是我們在室內(nèi),所以GPS定位可能會失敗,所以如果想看到數(shù)據(jù)需要去室外操作即可,下面是我的百度地圖的截圖:
有了這地圖,咋們就要開始真正的裝逼了,先搜索一下附近的美女哈:
哈哈,看到了,這個(gè)逼裝的我措手不及,自己都差點(diǎn)相信了,看到這里的定位信息點(diǎn)擊去看到也是真實(shí)的,而不是我們以往看到的:"該位置由用戶自己定義的",到這里咋們這個(gè)逼算是裝成功了。
項(xiàng)目源碼:源碼下載
五、總結(jié)
本文主要介紹了Xposed框架的一個(gè)實(shí)際使用案例,就是修改設(shè)備的地理位置信息,讓自己裝個(gè)逼,本文使用了修改地理位置信息實(shí)現(xiàn)了周末去一趟臺北的愿望功能,以上就是本文的全部內(nèi)容,希望對大家的學(xué)習(xí)有所幫助,也希望大家多多支持腳本之家。
相關(guān)文章
Android中TextureView與SurfaceView用法區(qū)別總結(jié)
TextureView和SurfaceView都是繼承自View類的,TextureView在Andriod4.0之后才引入的,SurfaceView不能加上動畫、平移、縮放,TextureView可以但有1-3幀的延遲2018-04-04
Android編程實(shí)現(xiàn)支持拖動改變位置的圖片中疊加文字功能示例
這篇文章主要介紹了Android編程實(shí)現(xiàn)支持拖動改變位置的圖片中疊加文字功能,可實(shí)現(xiàn)Android圖片與文字動態(tài)操作功能,涉及視圖及圖片動態(tài)運(yùn)算相關(guān)操作技巧,需要的朋友可以參考下2017-01-01
android實(shí)現(xiàn)程序自動升級到安裝示例分享(下載android程序安裝包)
這篇文章主要介紹了android實(shí)現(xiàn)下載android程序安裝包自動升級的示例,大家參考使用吧2014-01-01
Android設(shè)置PreferenceCategory背景顏色的方法
這篇文章主要介紹了Android設(shè)置PreferenceCategory背景顏色的方法,涉及Android設(shè)置背景色的技巧,需要的朋友可以參考下2015-05-05
Android中應(yīng)用多進(jìn)程的整理總結(jié)
Android平臺支持多進(jìn)程通信,也支持應(yīng)用內(nèi)實(shí)現(xiàn)多進(jìn)程,下面這篇文章主要給大家介紹了關(guān)于Android中應(yīng)用多進(jìn)程的相關(guān)資料,文中介紹的很詳細(xì),相信對大家具有一定的參考借鑒價(jià)值,有需要的朋友們下面來一起看看吧。2017-01-01
android開發(fā)實(shí)現(xiàn)文件讀寫
這篇文章主要為大家詳細(xì)介紹了android開發(fā)實(shí)現(xiàn)文件讀寫,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2020-07-07
Android解決ScrollView下嵌套ListView和GridView中內(nèi)容顯示不全的問題
今天小編就為大家分享一篇關(guān)于Android解決ScrollView下嵌套ListView和GridView中內(nèi)容顯示不全的問題,小編覺得內(nèi)容挺不錯(cuò)的,現(xiàn)在分享給大家,具有很好的參考價(jià)值,需要的朋友一起跟隨小編來看看吧2018-12-12

