Xposed是什么
Xposed 是一款可以在不修改 APK 的情況下影響程序運行的框架服務,基于 Xposed 能夠制作出許多功能強大的模塊,且在功能不沖突的情況下同時運作。
Xposed 通過替換 /system/bin/app_process 程序控制 zygote 進程,使得 app_process 在啟動過程中會加載 XposedBridge.jar 這個 jar 包,從而完成對系統應用的劫持。
Xposed 不僅僅是一個插件加載功能,而是它從根上 Hook 了 Android Java虛擬機,所以它需要 root,所以每次為它啟用新插件APP 都需要重新啟動。
Xposed能做什么?
能夠修改微信運動的步數,我修改了微信小號走路的步數,其實只是 hook 了傳感器的 api 而已。
能夠修改手機當前位置。我們知道手機的定位一般是混合定位,借助wifi、gps、基站等等來獲取定位數據,如果能 hook 基站、wifi、gps等api,那么就能實現修改手機的當前位置。
用這個思路,做個 AR 搶紅包的外掛也是未嘗不可。
能夠 hook 住 android 任意 api 的 Xposed 能做的遠不止于此,還能夠做很多非常有想象力的事情。
Xpose開發遇到的坑
首先,root 是安裝 Xposed 的前提。有時,即使 root 了也不行,我遇到過一臺三星 s6,已經 root 了仍然無法安裝Xposed :(
每調試一次,都需要重啟手機,經過一天的調試會有一種手機都快被玩壞的錯覺。
最后,曾經被一個配置困擾了一個下午。Xposed 的 jar 包不能使用 compile,而是應該使用provided
,就是因為這個配置錯了,我一個下午拿不到結果:(
對于開發 Xposed 模塊,必須要有足夠的耐心。當然,所有的開發都是如此。
對利用Xposed的思考
在移動互聯網時代,某些數據可能只存在于app之中,非常封閉。如果 app 有對應的網站,還能通過爬蟲抓取內容,如果沒有對應的網站,抓取就會有困難。如果 app 跟后端的通信協議是 protobuf、thrift 之類,那抓取數據包都會比較麻煩。
這幾天一直在玩 Xposed ,所以我想寫一個抓取 app 內容的爬蟲,當然首先需要逆向 app 查找到內容所在的地方,才能借助 Xposed 進行hook。
Xposed 也能幫助測試,既然能修改手機的location,那么對地理位置要求高的lbs應用做一些測試就不在話下了,不再需要人工跑過去。