欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

Android中利用Xposed框架實(shí)現(xiàn)攔截系統(tǒng)方法

 更新時(shí)間:2016年11月18日 13:07:42   作者:JiangWei_App  
這篇文章主要介紹了Android中利用Xposed框架實(shí)現(xiàn)攔截系統(tǒng)方法的相關(guān)資料,需要的朋友可以參考下

一、前言

關(guān)于Xposed框架相信大家應(yīng)該不陌生了,他是Android中Hook技術(shù)的一個(gè)著名的框架,還有一個(gè)框架是CydiaSubstrate,但是這個(gè)框架是收費(fèi)的,而且個(gè)人覺得不怎么好用,而Xposed框架是免費(fèi)的而且還是開源的,網(wǎng)上也有很多文章介紹了Xposed框架的原理實(shí)現(xiàn),不了解的同學(xué)可以自行查閱即可,本文主要介紹如何通過這個(gè)框架來進(jìn)行系統(tǒng)方法的攔截功能,比如我們開發(fā)過程中,對(duì)于一些測(cè)試環(huán)境很難模擬,特別是測(cè)試同學(xué)有時(shí)候像隨機(jī)改變?cè)O(shè)備的imei,mcc等信息用來模擬不同測(cè)試場(chǎng)景,這時(shí)候如果可以去修改系統(tǒng)的這個(gè)值的話對(duì)于測(cè)試來說就非常方便了,其實(shí)這些在網(wǎng)上已經(jīng)有很多類似的小工具了,下面就來詳細(xì)的講解如何使用這個(gè)框架。

二、需要解決的前提問題

在介紹如何使用這個(gè)框架之前,咋們得先解決這幾個(gè)問題:

第一個(gè)問題:首先我們知道這個(gè)框架的核心點(diǎn)就是系統(tǒng)進(jìn)程注入技術(shù),那么如果要注入系統(tǒng)進(jìn)程,就必須要root權(quán)限,所以你如果想用這個(gè)框架的話就必須得現(xiàn)有一個(gè)root的設(shè)備。

第二個(gè)問題:還有一個(gè)問題就是這個(gè)框架的適配問題,不是所有的設(shè)備所有的系統(tǒng)都支持這個(gè)框架的使用的,本人在實(shí)驗(yàn)的過程中就遇到了小米3+MIUI7就操作失敗了,結(jié)果重新刷了一個(gè)Android原生4.4系統(tǒng)才成功的。

第三個(gè)問題:最后一個(gè)問題就是Xposed框架本身的版本問題,他針對(duì)不同系統(tǒng)也發(fā)布了多個(gè)版本,所以你得針對(duì)于自己的設(shè)備系統(tǒng)安裝正確的Xposed版本。

解決了這三個(gè)問題咋們才能成功的安裝Xposed框架的,而在這個(gè)過程中我們會(huì)發(fā)現(xiàn)遇到這兩個(gè)問題是最多的:

第一個(gè)問題是不兼容問題:

第二個(gè)問題是提示安裝框架問題:

這兩個(gè)問題都是比較普遍和蛋疼的,因?yàn)榈紫碌陌惭b按鈕點(diǎn)擊不了,后續(xù)沒辦法操作了,所以很無助的,我也是遇到了這兩個(gè)問題,最后也是沒有找到合適的答案,所以一激動(dòng)就刷了一個(gè)原生的Android4.4系統(tǒng),

三、環(huán)境搭建

上面就提到了現(xiàn)階段這個(gè)框架使用會(huì)遇到的一些問題,下面在來看一下具體的環(huán)境搭建,如果上面的問題都解決了,咋們?cè)诖蜷_應(yīng)用點(diǎn)擊安裝框架:

這里還是提示未激活,點(diǎn)擊進(jìn)入:

這時(shí)候看到了正常了,可以點(diǎn)擊安裝了,直接點(diǎn)擊安裝即可:

這里是需要root授權(quán)的,點(diǎn)擊允許,安裝成功之后也會(huì)提示你重啟生效的,因?yàn)橐⑷胂到y(tǒng)進(jìn)程,必須重啟才有效果的。

到這里我們就成功的安裝了Xposed框架了,在這個(gè)過程中肯定有同學(xué)會(huì)遇到問題,而最多的問題就是上面提到的那兩個(gè)問題,關(guān)于解決辦法我也沒有找到。我解決的最根本辦法就是刷機(jī)了,所以本文我操作的環(huán)境是:

小米3移動(dòng)版+Android原生4.4系統(tǒng)+Xposed_v33版本

四、編寫模塊功能

環(huán)境搭建好了,下面就開始操作了,上面安裝的那個(gè)工具其實(shí)是一個(gè)模塊管理器,我們?nèi)绻胱鲆恍﹉ook操作還得自己編寫模塊也就是應(yīng)用程序,然后把這個(gè)模塊安裝到設(shè)備中,這個(gè)工具就可以檢測(cè)出來了,會(huì)提示你加載這模塊然后在重啟設(shè)備,模塊功能就有效果了。那么下面來看一下如何編寫一個(gè)Xposed模塊呢?

第一步:新建一個(gè)Android項(xiàng)目,導(dǎo)入Xposed工具包

這里一定要注意,不能使用libs文件夾而是lib文件夾,如果這里使用了libs文件夾的話,在安裝成功模塊之后重啟會(huì)發(fā)現(xiàn)Hook是失敗的,通過打印tag為xposed的日志信息會(huì)發(fā)現(xiàn)這樣的錯(cuò)誤:

Java.lang.IllegalAccessError: Class ref in pre-verified class resolved to unexpected implementation

這個(gè)錯(cuò)誤我們?cè)谝郧伴_發(fā)插件的時(shí)候遇到過,主要是因?yàn)榘呀涌诎搅瞬寮こ讨辛?,那么這里我們可以猜想錯(cuò)誤問題也是這個(gè)xposed工具導(dǎo)致的。那么我們只需要把libs文件夾改成lib,然后在add buildpath一下即可。

注意:在Eclipse中,如果把工具包放到libs文件中,默認(rèn)是加入到編譯路徑中的,同時(shí)在編譯出來的程序中也是包含了這個(gè)工具包中的所有類,而對(duì)于其他非libs文件夾,我們添加工具包之后在add buildpath之后只是做到了工程引用工具包的功能,而最終并不會(huì)把這個(gè)工具包包含到程序中的。

第二步:編寫模塊代碼

模塊代碼編寫還是比較簡單的,我們只要新建一個(gè)實(shí)現(xiàn)IXposedHookLoadPackage接口的類,然后在handleLoadPackage回調(diào)方法中進(jìn)行攔截操作即可,而具體的攔截操作是借助XposedHelpers.findAndHookMethod方法和XposedBridge.hookMethod方法實(shí)現(xiàn)的,這兩個(gè)方法也是比較簡單的,從參數(shù)含義可以看到,主要是Hook的類名和方法名,然后還有一個(gè)就是攔截的回調(diào)方法,一般是攔截之前做什么的一個(gè)beforeHookedMethod方法和攔截之后做什么的一個(gè)afterHookedMethod方法。

對(duì)于IXposedHookLoadPackage這個(gè)接口和回調(diào)方法,我們可以知道,應(yīng)該是攔截系統(tǒng)中所有應(yīng)用的運(yùn)行信息,這里傳遞回來的一個(gè)LoadPackageParam參數(shù)類型就是包括了Hook應(yīng)用的具體信息,我們可以打印應(yīng)用的包名就可以看到效果了。

注意:

如果你想Hook一個(gè)類的具體方法,那么就必須要清楚的了解到這個(gè)方法的相信信息,比如參數(shù)類型和個(gè)數(shù),返回類型等。因?yàn)樵跀r截的過程中必須要對(duì)這個(gè)方法進(jìn)行分析,比如得到方法參數(shù)來進(jìn)行具體參數(shù)修改,返回值信息來進(jìn)行返回值修改,這里看到了獲取imei值的方法是一個(gè)無參數(shù)的返回字符串類型的方法,那么如果要攔截他的返回值,就需要修改他的返回值使用setResult方法即可。所以從這里可以看到不管是你hook系統(tǒng)的方法,還是日后去hook第三方應(yīng)用的具體類方法,第一步都得了解到你hook對(duì)象的具體信息,關(guān)于系統(tǒng)方法咋們可以通過查看源碼來得到信息,而對(duì)于第三方應(yīng)用的話那么只能借助反編譯技術(shù)了,比如修改游戲金幣功能,你必須先反編譯游戲知道修改金幣的類和具體方法才可行。

這里我不僅Hook了系統(tǒng)的imei信息,也簡單的Hook了系統(tǒng)的地理位置信息,在Android中獲取經(jīng)緯度信息有三種方式,這里為了演示簡單,用了GPS定位功能,一般獲取經(jīng)緯度信息的代碼主要是兩處:一處是初始化的時(shí)候調(diào)用getLastKnowLocation方法獲取最后一次系統(tǒng)中的地理位置信息

還有一處就是監(jiān)聽地理位置變化的回調(diào)接口中的onLocationChanged回調(diào)方法:

所以如果想Hook系統(tǒng)的地理位置信息進(jìn)行攔截,那么就需要操作這兩處代碼了,而他們有一個(gè)區(qū)別就是,第一處是通過返回值得到的,第二處是通過回調(diào)方法中的參數(shù)得到的。下面來看一下具體的Hook代碼:Hook第一處代碼比較簡單,直接構(gòu)造一個(gè)假的Location對(duì)象然后設(shè)置返回值即可。

Hook第二處代碼有點(diǎn)復(fù)雜,需要先找到添加位置監(jiān)聽的方法requestLocationUpdates,然后通過反射得到這個(gè)回調(diào)對(duì)象,找到具體的回調(diào)方法,然后在進(jìn)行操作,因?yàn)榛卣{(diào)方法是通過參數(shù)把Location對(duì)象傳遞回來的,所以這里需要修改參數(shù)值。

好了,到這里我們就編寫好了Hook系統(tǒng)的imei值和地理位置信息的模塊了。

第三步:添加模塊入口

這一步是非常重要的,也是最容易忘記的,就是要告訴Xposed框架一個(gè)模塊中Hook的入口,這里可以看到模塊的入口是Main類,所以需要在模塊的assets中添加一個(gè)xposed_init文件:

這里的內(nèi)容很簡單,就是模塊入口類的全稱名稱即可:

第四步:添加模塊的額外信息

最后一步就是需要在模塊的AndroidManifest.xml文件添加額外信息,具體包括模塊的描述信息,版本號(hào)等:

xposedmodule:代表的是Android程序作為Xposed中的一個(gè)模塊,所以值為true;xposeddescription:代表的是對(duì)本模塊的功能的描述,可以自己簡單敘述下就可以了;xposedminversion:代表的是本模塊開發(fā)時(shí)用到的xposed的jar包的最低版本號(hào),這里是30,而我所用的xposed的jar包版本是54;

經(jīng)過上面四步之后咋們就完成了模塊的定義了,最后咋們?yōu)榱蓑?yàn)證我們Hook的結(jié)果,在新建一個(gè)Activity類,在內(nèi)部調(diào)用一下系統(tǒng)的獲取imei方法以及位置信息方法,并且顯示在屏幕中:

六、運(yùn)行模塊

下面咋們就來運(yùn)行一下模塊程序,安裝到設(shè)備之后,Xposed會(huì)提示模塊未激活:

這個(gè)XposedInstaller程序應(yīng)該是通過安裝廣播,然后得到這個(gè)應(yīng)用信息分析他是否包含了Xposed模塊的特殊屬性來判斷的。我們點(diǎn)擊進(jìn)行激活:

這時(shí)候看到,激活成功之后,會(huì)提示你再次重啟設(shè)備才能生效,所以這里可以看到每次如果有新的模塊或者是模塊代碼有更新了,比如這樣:

都是需要重啟設(shè)備,模塊才能生效的,這一點(diǎn)還是有點(diǎn)蛋疼的和麻煩的。然后咋們重啟設(shè)備之后,在運(yùn)行我們的模塊代碼看看效果:

從這顯示結(jié)果看到了,Hook成功了,在沒有Hook之前的效果是:

這時(shí)候咋們?cè)趤砜匆幌麓蛴〉娜罩拘畔ⅲ?/p>

看到了,百度地圖在獲取我們?cè)O(shè)備的imei和位置信息,當(dāng)然這是符合正常情況的,從這里可以看到,我們還可以利用這個(gè)技術(shù)來觀察設(shè)備中有哪些應(yīng)用在獲取設(shè)備的一些隱私數(shù)據(jù)。

項(xiàng)目下載地址:http://download.csdn.net/detail/jiangwei0910410003/9654604

七、實(shí)際用途

本文主要是介紹了Xposed框架的基本使用以及一個(gè)簡單作用,但是在實(shí)際過程中,這個(gè)框架是非常有用的,比如在文章開頭就說到了,我們可以通過修改系統(tǒng)的一些信息來幫助測(cè)試模擬復(fù)雜的測(cè)試環(huán)境,但是這個(gè)框架現(xiàn)在用的最廣泛的當(dāng)屬破解了,這個(gè)也是我們后續(xù)講解的重點(diǎn),用這個(gè)框架咋們可以進(jìn)行應(yīng)用的脫殼,游戲的外掛等。

八、總結(jié)

本文是介紹Xposed的基礎(chǔ)篇,主要介紹了Xposed的具體使用,XposedInstaller.apk其實(shí)是一個(gè)模塊載體和管理器,如果想實(shí)現(xiàn)具體的Hook操作,就必須自己在編寫模塊程序,然后在激活加載方可生效。后續(xù)會(huì)繼續(xù)介紹用這個(gè)框架咋們來進(jìn)行其他一些操作,比如應(yīng)用的脫殼,游戲外掛編寫,系統(tǒng)信息篡改等知識(shí),期待大家多多期盼和點(diǎn)贊啦啦??!

相關(guān)文章

最新評(píng)論