android黑科技系列——Xposed架構實現攔截系統方法詳解

來源:互聯網
上載者:User

標籤:介紹   技術   含義   script   搭建   總結   源碼   系統資訊   init   

一、前言

關於Xposed架構相信大家應該不陌生了,他是Android中Hook技術的一個著名的架構,還有一個架構是CydiaSubstrate,但是這個架構是收費的,而且個人覺得不怎麼好用,而Xposed架構是免費的而且還是開源的,網上也有很多文章介紹了Xposed架構的原理實現,不瞭解的同學可以自行查閱即可,本文主要介紹如何通過這個架構來進行系統方法的攔截功能,比如我們開發過程中,對於一些測試環境很難類比,特別是測試同學有時候像隨機改變裝置的imei,mcc等資訊用來類比不同測試情境,這時候如果可以去修改系統的這個值的話對於測試來說就非常方便了,其實這些在網上已經有很多類似的小工具了,下面就來詳細的講解如何使用這個架構。

二、需要解決的前提問題

在介紹如何使用這個架構之前,咋們得先解決這幾個問題:

第一個問題:首先我們知道這個架構的核心點就是系統進程注入技術,那麼如果要注入系統進程,就必須要root許可權,所以你如果想用這個架構的話就必須得現有一個root的裝置。

第二個問題:還有一個問題就是這個架構的適配問題,不是所有的裝置所有的系統都支援這個架構的使用的,本人在實驗的過程中就遇到了小米3+MIUI7就操作失敗了,結果重新刷了一個Android原生4.4系統才成功的。

第三個問題:最後一個問題就是Xposed架構本身的版本問題,他針對不同系統也發布了多個版本,所以你得針對於自己的裝置系統安裝正確的Xposed版本。

解決了這三個問題咋們才能成功的安裝Xposed架構的,而在這個過程中我們會發現遇到這兩個問題是最多的:

第一個問題是不相容問題:


第二個問題是提示安裝架構問題:


這兩個問題都是比較普遍和蛋疼的,因為底下的安裝按鈕點擊不了,後續沒辦法操作了,所以很無助的,我也是遇到了這兩個問題,最後也是沒有找到合適的答案,所以一激動就刷了一個原生的Android4.4系統,

三、環境搭建

上面就提到了現階段這個架構使用會遇到的一些問題,下面在來看一下具體的環境搭建,如果上面的問題都解決了,咋們在開啟應用點擊安裝架構:


這裡還是提示未啟用,點擊進入:


這時候看到了正常了,可以點擊安裝了,直接點擊安裝即可:


這裡是需要root授權的,點擊允許,安裝成功之後也會提示你重啟生效的,因為要注入系統進程,必須重啟才有效果的。

到這裡我們就成功的安裝了Xposed架構了,在這個過程中肯定有同學會遇到問題,而最多的問題就是上面提到的那兩個問題,關於解決辦法我也沒有找到。我解決的最根本辦法就是刷機了,所以本文我操作的環境是:

小米3移動版+Android原生4.4系統+Xposed_v33版本

四、編寫模組功能

環境搭建好了,下面就開始操作了,上面安裝的那個工具其實是一個模組管理器,我們如果想做一些hook操作還得自己編寫模組也就是應用程式,然後把這個模組安裝到裝置中,這個工具就可以檢測出來了,會提示你載入這模組然後在重啟裝置,模組功能就有效果了。那麼下面來看一下如何編寫一個Xposed模組呢?

第一步:建立一個Android項目,匯入Xposed工具包


這裡一定要注意,不能使用libs檔案夾而是lib檔案夾,如果這裡使用了libs檔案夾的話,在安裝成功模組之後重啟會發現Hook是失敗的,通過列印tag為xposed的日誌資訊會發現這樣的錯誤:

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

這個錯誤我們在以前開發外掛程式的時候遇到過,主要是因為把介面包含到了外掛程式工程中了,那麼這裡我們可以猜想錯誤問題也是這個xposed工具導致的。那麼我們只需要把libs檔案夾改成lib,然後在add buildpath一下即可。

注意:

在Eclipse中,如果把工具包放到libs檔案中,預設是加入到編譯路徑中的,同時在編譯出來的程式中也是包含了這個工具包中的所有類,而對於其他非libs檔案夾,我們添加工具包之後在add buildpath之後只是做到了工程參考工具包的功能,而最終並不會把這個工具包包含到程式中的。

第二步:編寫模組代碼

模組代碼編寫還是比較簡單的,我們只要建立一個實現IXposedHookLoadPackage介面的類,然後在handleLoadPackage回調方法中進行攔截操作即可,而具體的攔截操作是藉助XposedHelpers.findAndHookMethod方法和XposedBridge.hookMethod方法實現的,這兩個方法也是比較簡單的,從參數含義可以看到,主要是Hook的類名和方法名,然後還有一個就是攔截的回調方法,一般是攔截之前做什麼的一個beforeHookedMethod方法和攔截之後做什麼的一個afterHookedMethod方法。


對於IXposedHookLoadPackage這個介面和回調方法,我們可以知道,應該是攔截系統中所有應用的運行資訊,這裡傳遞迴來的一個LoadPackageParam參數類型就是包括了Hook應用的具體資訊,我們可以列印應用的包名就可以看到效果了。

注意:

如果你想Hook一個類的具體方法,那麼就必須要清楚的瞭解到這個方法的相信資訊,比如參數類型和個數,傳回型別等。因為在攔截的過程中必須要對這個方法進行分析,比如得到方法參數來進行具體參數修改,傳回值資訊來進行傳回值修改,這裡看到了擷取imei值的方法是一個無參數的返回字串類型的方法,那麼如果要攔截他的傳回值,就需要修改他的傳回值使用setResult方法即可。所以從這裡可以看到不管是你hook系統的方法,還是日後去hook第三方應用的具體類方法,第一步都得瞭解到你hook對象的具體資訊,關於系統方法咋們可以通過查看源碼來得到資訊,而對於第三方應用的話那麼只能藉助反編譯技術了,比如修改遊戲金幣功能,你必須先反編譯遊戲知道修改金幣的類和具體方法才可行。

這裡我不僅Hook了系統的imei資訊,也簡單的Hook了系統的地理位置資訊,在Android中擷取經緯度資訊有三種方式,這裡為了示範簡單,用了GPS定位功能,一般擷取經緯度資訊的代碼主要是兩處:

一處是初始化的時候調用getLastKnowLocation方法擷取最後一次系統中的地理位置資訊


還有一處就是監聽地理位置變化的回調介面中的onLocationChanged回調方法:


所以如果想Hook系統的地理位置資訊進行攔截,那麼就需要操作這兩處代碼了,而他們有一個區別就是,第一處是通過傳回值得到的,第二處是通過回調方法中的參數得到的。下面來看一下具體的Hook代碼:

Hook第一處代碼比較簡單,直接構造一個假的Location對象然後設定傳回值即可。


Hook第二處代碼有點複雜,需要先找到添加位置監聽的方法requestLocationUpdates,然後通過反射得到這個回調對象,找到具體的回調方法,然後在進行操作,因為回調方法是通過參數把Location對象傳遞迴來的,所以這裡需要修改參數值。


好了,到這裡我們就編寫好了Hook系統的imei值和地理位置資訊的模組了。

第三步:添加模組入口

這一步是非常重要的,也是最容易忘記的,就是要告訴Xposed架構一個模組中Hook的入口,這裡可以看到模組的入口是Main類,所以需要在模組的assets中添加一個xposed_init檔案:


這裡的內容很簡單,就是模組入口類的全稱名稱即可:


第四步:添加模組的額外資訊

最後一步就是需要在模組的AndroidManifest.xml檔案添加額外資訊,具體包括模組的描述資訊,版本號碼等:


xposedmodule:代表的是Android程式作為Xposed中的一個模組,所以值為true;
xposeddescription:代表的是對本模組的功能的描述,可以自己簡單敘述下就可以了;
xposedminversion:代表的是本模組開發時用到的xposed的jar包的最低版本號碼,這裡是30,而我所用的xposed的jar包版本是54;

經過上面四步之後咋們就完成了模組的定義了,最後咋們為了驗證我們Hook的結果,在建立一個Activity類,在內部調用一下系統的擷取imei方法以及位置資訊方法,並且顯示在螢幕中:


六、運行模組

下面咋們就來運行一下模組程式,安裝到裝置之後,Xposed會提示模組未啟用:


這個XposedInstaller程式應該是通過安裝廣播,然後得到這個應用資訊分析他是否包含了Xposed模組的特殊屬性來判斷的。我們點擊進行啟用:


這時候看到,啟用成功之後,會提示你再次重啟裝置才會生效,所以這裡可以看到每次如果有新的模組或者是模組代碼有更新了,比如這樣:


都是需要重啟裝置,模組才會生效的,這一點還是有點蛋疼的和麻煩的。然後咋們重啟裝置之後,在運行我們的模組代碼看看效果:


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


這時候咋們在來看一下列印的日誌資訊:


看到了,百度地圖在擷取我們裝置的imei和位置資訊,當然這是符合正常情況的,從這裡可以看到,我們還可以利用這個技術來觀察裝置中有哪些應用在擷取裝置的一些隱私資料。

項目:http://download.csdn.net/detail/jiangwei0910410003/9654604

七、實際用途

本文主要是介紹了Xposed架構的基本使用以及一個簡單作用,但是在實際過程中,這個架構是非常有用的,比如在文章開頭就說到了,我們可以通過修改系統的一些資訊來協助測試類比複雜的測試環境,但是這個架構現在用的最廣泛的當屬破解了,這個也是我們後續講解的重點,用這個架構咋們可以進行應用的脫殼,遊戲的外掛等。

八、總結

本文是介紹Xposed的基礎篇,主要介紹了Xposed的具體使用,XposedInstaller.apk其實是一個模組載體和管理器,如果想實現具體的Hook操作,就必須自己在編寫模組程式,然後在啟用載入方可生效。後續會繼續介紹用這個架構咋們來進行其他一些操作,比如應用的脫殼,遊戲外掛編寫,系統資訊篡改等知識,期待大家多多期盼和點贊啦啦!!

android黑科技系列——Xposed架構實現攔截系統方法詳解

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.