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

二、需要解決的前提問(wèn)題

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

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

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

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

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

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

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

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

三、環(huán)境搭建

上面就提到了現(xiàn)階段這個(gè)框架使用會(huì)遇到的一些問(wèn)題,下面在來(lái)看一下具體的環(huán)境搭建,如果上面的問(wèn)題都解決了,咋們?cè)诖蜷_(kāi)應(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è)過(guò)程中肯定有同學(xué)會(huì)遇到問(wèn)題,而最多的問(wèn)題就是上面提到的那兩個(gè)問(wèn)題,關(guān)于解決辦法我也沒(méi)有找到。我解決的最根本辦法就是刷機(jī)了,所以本文我操作的環(huán)境是:

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

四、編寫模塊功能

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

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

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

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

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

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

第二步:編寫模塊代碼

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

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

注意:

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

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

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

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

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

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

第三步:添加模塊入口

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

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

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

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

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

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

六、運(yùn)行模塊

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

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

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

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

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

這時(shí)候咋們?cè)趤?lái)看一下打印的日志信息:

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

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

七、實(shí)際用途

本文主要是介紹了Xposed框架的基本使用以及一個(gè)簡(jiǎn)單作用,但是在實(shí)際過(guò)程中,這個(gè)框架是非常有用的,比如在文章開(kāi)頭就說(shuō)到了,我們可以通過(guò)修改系統(tǒng)的一些信息來(lái)幫助測(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è)框架咋們來(lái)進(jìn)行其他一些操作,比如應(yīng)用的脫殼,游戲外掛編寫,系統(tǒng)信息篡改等知識(shí),期待大家多多期盼和點(diǎn)贊啦啦??!

相關(guān)文章

  • ListView的Adapter使用(綁定數(shù)據(jù)) 之 自定義每一項(xiàng)的布局去綁定數(shù)據(jù)

    ListView的Adapter使用(綁定數(shù)據(jù)) 之 自定義每一項(xiàng)的布局去綁定數(shù)據(jù)

    之前寫的綁定數(shù)據(jù)是只是簡(jiǎn)單的綁定了字符串,這次我們將一次綁定多條數(shù)據(jù)并且嘗試用自定義的布局。在這篇文章中首先講解的是用Hashmap 去綁定數(shù)據(jù),第二個(gè)例子,講解自定義布局然后綁定數(shù)據(jù)
    2013-06-06
  • 快速掌握Android屏幕的知識(shí)點(diǎn)

    快速掌握Android屏幕的知識(shí)點(diǎn)

    相信不少設(shè)計(jì)師和工程師都被安卓設(shè)備紛繁的屏幕搞得暈頭轉(zhuǎn)向,我既做UI設(shè)計(jì),也做過(guò)一點(diǎn)安卓界面布局,剛好對(duì)這塊內(nèi)容比較熟悉,所以在此我將此部分知識(shí)重新梳理出來(lái)分享給大家!有需要的朋友們可以參考借鑒,下面來(lái)一起學(xué)習(xí)學(xué)習(xí)吧。
    2016-11-11
  • Android 關(guān)機(jī)彈出選擇菜單的深入解析

    Android 關(guān)機(jī)彈出選擇菜單的深入解析

    本篇文章是對(duì)Android 關(guān)機(jī)彈出選擇菜單進(jìn)行了詳細(xì)的分析介紹,需要的朋友參考下
    2013-06-06
  • Android實(shí)現(xiàn)價(jià)格走勢(shì)自定義曲線圖

    Android實(shí)現(xiàn)價(jià)格走勢(shì)自定義曲線圖

    本篇文章主要介紹了Android實(shí)現(xiàn)價(jià)格走勢(shì)曲線圖,非常具有實(shí)用價(jià)值,需要的朋友可以參考下
    2017-04-04
  • Android Tablayout 自定義Tab布局的使用案例

    Android Tablayout 自定義Tab布局的使用案例

    這篇文章主要介紹了Android Tablayout 自定義Tab布局的使用案例,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧
    2020-08-08
  • flutter封裝點(diǎn)擊菜單工具欄組件checkBox多選版

    flutter封裝點(diǎn)擊菜單工具欄組件checkBox多選版

    這篇文章主要為大家介紹了flutter封裝一個(gè)點(diǎn)擊菜單工具欄組件,checkBox多選版的示例示例詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪
    2022-05-05
  • Android Studio 視頻播放失敗 start called in state1 異常怎么解決

    Android Studio 視頻播放失敗 start called in state1 異常怎么解決

    很多朋友問(wèn)小編在使用MediaPlayer播放音頻時(shí)報(bào)出 E/MediaPlayerNative: start called in state 1, mPlayer(0x0)問(wèn)題,該如何處理呢,今天小編給大家?guī)?lái)了Android Studio 視頻播放失敗 start called in state1 異常問(wèn)題,需要的朋友可以參考下
    2020-03-03
  • Android入門之ProgressBar的使用教程

    Android入門之ProgressBar的使用教程

    Android里的ProgressBar默認(rèn)為一個(gè)不斷轉(zhuǎn)圈的圓,它也可以自定義。這篇文章主要通過(guò)示例和大家介紹下ProgressBar的使用,感興趣的可以了解一下
    2022-11-11
  • 源碼分析Android?LayoutInflater的使用

    源碼分析Android?LayoutInflater的使用

    簡(jiǎn)單來(lái)說(shuō),LayoutInflater的工作就是將使用xml文件編寫的布局轉(zhuǎn)換成Android里的View對(duì)象,并且這也是Android中將xml布局轉(zhuǎn)換成View的唯一方式。本文將從源碼帶大家了解一下LayoutInflater的具體使用
    2023-04-04

最新評(píng)論