1. 程式人生 > >Android中Xposed框架篇---修改系統位置資訊實現自身隱藏功能

Android中Xposed框架篇---修改系統位置資訊實現自身隱藏功能

一、前言

前文已經介紹了Xposed框架的基本使用規則,本文主要來介紹一個實際案例就是如何通過這個框架來修改系統的地理位置資訊來實現隱藏功能,在如今社交工具的發展特別是微信,他有一個實時位置共享功能,那麼對於那些不是單身狗的同學來說可能會有些蛋疼,哪天媳婦要查崗傳送位置,結果你不在她期望的位置這時候就尷尬了,而且朋友圈在分享內容的時候可以選擇當前位置,有的屌絲就像我一樣沒錢但是又想到處旅遊,那麼這時候咋們就可以一本正經的裝個逼了。

二、定位原理

看到上面說的那麼多,感覺這個功能必須要搞起來了,好處太多了,下面咋們就開始操作了,但是在這之前一定要先熟悉Xposed框架的使用規則,還不瞭解的同學可以去這裡檢視:Xposed框架的使用規則 在這篇文章中我們瞭解到了我們只需要在實現了IXposedHookLoadPackage介面的類中的回撥方法handleLoadPackage中做攔截操作即可。但是這裡我們還得先做一件事,那就是關於Android中的定位系統知識,我們知道手機定位有多種方式,一般有這幾種方式:

第一、衛星定位
GPS(Global Positioning System)即全球定位系統,是由美國建立的一個衛星導航定位系統,利用該系統,使用者可以在全球範圍內實現全天候、連續、實時的三維導航定位和測速;另外,利用該系統,使用者還能夠進行高精度的時間傳遞和高精度的精密定位。

第二、基站定位

行動電話測量不同基站的下行導頻訊號,得到不同基站下行導頻的TOA(到達時刻)或 TDOA(到達時間差),根據該測量結果並結合基站的座標,一般採用三角公式估計演算法,就能夠計算出行動電話的位置。實際的位置估計演算法需要考慮多基站(3個或3個以上)定位的情況,因此演算法要複雜很多。一般而言,移動臺測量的基站數目越多,測量精度越高,定位效能改善越明顯。

第三、WiFi定位


每一個無線AP(路由器)都有一個全球唯一的MAC地址,並且一般來說無線AP在一段時間內不會移動;
裝置在開啟Wi-Fi的情況下,無線路由器預設都會進行SSID廣播(除非使用者手動配置關閉該功能),在廣播幀包含了該路由器的MAC地址;採集裝置可以通過接收周圍AP傳送的廣播資訊獲取周圍AP的MAC資訊和訊號強度資訊,將這些資訊上傳到伺服器,經過伺服器的計算,儲存為“MAC-經緯度”的對映,當採集的資訊足夠多時候就在伺服器上建立了一張巨大的WiFi資訊網路;
當一個裝置處在這樣的網路中時,可以將收集到的這些能夠標示AP的資料傳送到位置伺服器,伺服器檢索出每一個AP的地理位置,並結合每個訊號的強弱程度,計算出裝置的地理位置並返回到使用者裝置,其計算方式和基站定位位置計算方式相似,也是利用三點定位或多點定位技術;位置服務商要不斷更新、補充自己的資料庫,以保證資料的準確性。當某些WiFi資訊不在資料庫中時,可以根據附近其他的WiFi位置資訊推斷出未知WiFi的位置資訊,並上傳伺服器。


第四、AGPS定位

AGPS(AssistedGPS:輔助全球衛星定位系統)是結合GSM/GPRS與傳統衛星定位,利用基地臺代送輔助衛星資訊,以縮減GPS晶片獲取衛星訊號的延遲時間,受遮蓋的室內也能借基地臺訊號彌補,減輕GPS晶片對衛星的依賴度。AGPS利用手機基站的訊號,輔以連線遠端定位伺服器的方式下載衛星星曆 (英語:Almanac Data),再配合傳統的GPS衛星接受器,讓定位的速度更快。是一種結合網路基站資訊和GPS資訊對移動臺進行定位的技術,既利用全球衛星定位系統GPS,又利用移動基站,解決了GPS覆蓋的問題,可以在2代的G、C網路和3G網路中使用。

在Android中關於這幾種定位都有具體的呼叫方法,所以如果想修改系統的定位資訊,那麼就必須先了解這幾種呼叫方式,在之前的一篇文章中也說到了,Hook的最關鍵一點就是需要找到Hook的地方,這個就需要去閱讀原始碼來查找了。在Android中一般獲取位置資訊就涉及到下面的幾個類和方法:

第一個:採用基站定位資訊

android.telephony.TelephonyManager
+getCellLocation
+getPhoneCount
+getNeighboringCellInfo
+getAllCellInfo

android.telephony.PhoneStateListener
+onCellLocationChanged
+onCellInfoChanged

第二個:採用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

第三個:採用GPS定位
android.location.LocationManager

+getGpsStatus
+getLastLocation
+getLastKnownLocation
+getProviders
+getBestProvider
+addGpsStatusListener
+addNmeaListener

三、攔截操作

有了這些方法和類,下面就開始攔截操作了,但是本文采用是這種攔截方式,因為在多次試驗之後,發現Android中很多定位app絕大部分都是採用基站+GPS+Wifi這三種混合方式來進行定位的,但是如果我們要去都攔截這三種方式那就太費勁了,所以這裡我們這麼幹,只攔截操作GPS定位,而其他兩種方式攔截之後返回值全部設定空,這樣讓系統強制的使用GPS定位,為什麼要採用GPS定位這種方式呢?因為其他的兩種方式在攔截之後去構造假的資料有點麻煩,而對於GPS這種方式咋們只需要構造一個假的Location物件就可以了,操作非常方便。到這裡咋們思路有了,下面就來開始操作了:


首先咋們先把其他的定位方式資訊攔截之後全部返回null值,這樣就可以強制系統使用GPS定位資料了,接下來就開始攔截GPS定位系統資料了,因為本人夢想去臺灣看看五月天,所以這裡就構造一個假的臺北資料:


直接構造一個假的Location物件,然後設定成引數即可,因為這裡的location物件是通過回撥方式傳回去的,所以需要修改引數而不是返回值哦。這裡如果有同學想去其他地方,又不知道具體的經緯度資訊,該怎麼辦呢?這個可以使用百度地圖的拾取器功能:


點選去之後就可以隨意選擇地理位置了:


選中之後,可以看到了經緯度資訊,在右上角處就可以賦值資訊了:


好了,到這裡咋們就成功了修改了系統中的地理位置資訊,接下來咋們就開始運行了,執行步驟也很簡單,先執行模組,然後XposedInstaller工具會提示模組更新或者有新模組需要啟用,進入工具點選啟用或者更新,然後重啟裝置生效即可。

四、操作結果演示

當我們再次重啟之後,開啟百度地圖驚奇的發現沒什麼資料?這裡不是我們攔截出錯了,而是我們在室內,所以GPS定位可能會失敗,所以如果想看到資料需要去室外操作即可,下面是我的百度地圖的截圖:


有了這地圖,咋們就要開始真正的裝逼了,先搜尋一下附近的美女哈:


這臺灣的妹子除了會嗲之外,總是喜歡用英文名哈!先不管了,找個妹子聊聊先~

然後咋們再去去朋友圈晒一晒:


這裡先選擇地理位置哈。


哈哈,看到了,這個逼裝的我措手不及,自己都差點相信了,看到這裡的定位資訊點選去看到也是真實的,而不是我們以往看到的:"該位置由使用者自己定義的",到這裡咋們這個逼算是裝成功了。

五、總結

本文主要介紹了Xposed框架的一個實際使用案例,就是修改裝置的地理位置資訊,讓自己裝個逼,但是還是的說,晒圖有風險,裝逼需謹慎!一切珍重。本文使用了修改地理位置資訊實現了週末去一趟臺北的願望功能,也希望大家能夠藉助這篇文章滿足自己多年來的旅遊願望,最後也希望臺灣早日回到祖國的懷抱!

《Android應用安全防護和逆向分析》

點選立即購買:京東  天貓

更多內容:點選這裡

關注微信公眾號,最新技術乾貨實時推送


掃一掃加小編微信
新增時註明:“編碼美麗”否則不予通過!