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