前言:最近在學習Xposed框架,越來越感覺這是一個神器可以利用這個框架做到微信自動搶紅包,定位,加固脫殼,所以現(xiàn)在開始記錄xpose學習過程。
一、什么是Hook技術
Hook英文翻譯是“鉤子”的意思,“鉤子”顧名思義就是可以勾起東西的工具,那么程序中這個“鉤子”又是怎么用的呢?在Android操作系統(tǒng)中系統(tǒng)維護著自己的一套事件分發(fā)機制。應用程序,包括應用觸發(fā)事件和后臺邏輯處理,也是根據(jù)事件流程一步步地向下執(zhí)行。而“鉤子”的意思,就是在事件傳送到終點前截獲并監(jiān)控事件的傳輸,像個鉤子鉤上事件一樣,并且能夠在鉤上事件時,處理一些自己特定的事件。較為形象的流程如圖所示。
Hook的這個本領,使它能夠將自身的代碼“融入”被勾?。℉ook)的程序的進程中,成為目標進程的一個部分。我們也知道,在Android系統(tǒng)中使用了沙箱機制,普通用戶程序的進程空間都是獨立的,程序的運行彼此間都不受干擾。這就使我們希望通過一個程序改變其他程序的某些行為的想法不能直接實現(xiàn),但是Hook的出現(xiàn)給我們開拓了解決此類問題的道路。當然,根據(jù)Hook對象與Hook后處理的事件方式不同,Hook還分為不同的種類,如消息Hook、API Hook等。
二、Xposed框架介紹
在日常工作學習中,我們希望使用Hook技術來完成某功能其實是相當煩瑣的,我們很難手動地自己編寫一個Hook工具,大多數(shù)情況下都是使用第三方提供的框架來做演示。常用的Hook框架有Xposed、CydiaSubstrate和ADBI/DDI,它們各自都有自己的特點,這里我們專門選擇Xposed框架來進行介紹。
Github開源地址: https://github.com/rovo89/Xposed
1、Xposed框架原理
Xposed框架是由rovo89開發(fā)的一款針對Android平臺的動態(tài)劫持項目,是一款可以在不修改APK的情況下影響程序運行(修改系統(tǒng))的框架服務,通過替換/system/bin/app_process 程序控制 zygote 進程,從而使 app_process 在啟動過程中加載XposedBridge.jar 這個jar包,從而完成對Zygote進程及其創(chuàng)建的Dalvik虛擬機的劫持。
Zygote進程在啟動過程中,除了創(chuàng)建一個Dalvik虛擬機實例之外,還會將Java運行時庫加載到進程中來,同時還會注冊一些Android核心類的JNI方法到前面創(chuàng)建的Dalvik虛擬機實例中去。
一個應用程序被孵化出來的時候,其不僅會獲得Zygote進程中的Dalvik虛擬機實例,還會與Zygote一起共享Java運行時庫,這也是可以將XposedBridge.jar這個jar包加載到每一個Android應用中的原因。
XposedBridge有一個私有的Native方法:hookMethodNative,這個方法也在app_process中使用。該函數(shù)提供一個方法對象利用Java的反射機制來對內置的方法覆寫。
2、Xposed框架的使用步驟
Xposed框架是基于一個Android的本地服務應用XposedInstaller與一個提供API的jar文件來完成的。所以,安裝使用Xposed框架我們需要完成以下幾個步驟。
1)安裝Xposed準備
手機必須root,沒有root是無法使用的?。?!我的手機是紅米手機,所以我去小米官網(wǎng)刷了一個開發(fā)版系統(tǒng),一些第三方Root軟件雖然能成功刷入Root ,但是經(jīng)常手機開機重啟之后就失效了,為了穩(wěn)定最好去刷個小米開發(fā)版的,Root權限就可以隨心控制管理。
http://www.miui.com/zt/miui8/dev.html 小米開發(fā)版系統(tǒng)下載
2)安裝Xposed的本地服務
點擊下載最新版本 https://xposed-installer.cn.uptodown.com/android
如圖所示,這個是我自己手機已經(jīng)成功激活的,安裝apk點進去之后點擊版本號啟動本地服務

下面是我手機安裝xposed的工具模塊,點擊旁邊的選擇框確定是否開啟

這里有一個需要提醒的是,安裝了xposed模塊開啟本地服務的時候,必須重啟設備才能生效,所以如果裝了新的xposed模塊的時候,必須重啟設備才能開始使用