xposed系列1:hook偷厦、xposed概念和demo

一商叹、原理

一句話,替換所有程序的/system/bin/app_process只泼,控制 zygote 進程剖笙,從而使 app_process 在啟動過程中加載XposedBridge.jar 這個jar包,從而完成對Zygote進程及其創(chuàng)建的Dalvik虛擬機的劫持辜妓,進而控制所有程序

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的反射機制來對內(nèi)置的方法覆寫字管。

xposed只是個框架,對用戶來說本身并不沒有什么卵用信不,真正厲害的是xposed上面的模塊嘲叔,下面博主就來推薦幾個好玩的模塊。如果沒有給出下載鏈接抽活,默認這些模塊都是可以在xposed中直接搜索到然后下載的硫戈。

但是作為開發(fā),我們更加關心自己開發(fā)模塊

準備

  • 1下硕、已經(jīng)root的手機
  • 2丁逝、先安裝Xposed Installer
  • 3、安裝自己或者別人開發(fā)的 xposed module

Xposed Installer

4.4是一個分水嶺卵牍,如果有可能果港,直接在4.4上開發(fā)

xposed官網(wǎng)安裝教程:
http://repo.xposed.info/module/de.robv.android.xposed.installer

  • Android 5.0糊昙、5.1、6.0 安裝 xposed
    從Android 5.0開始谢谦,谷歌使用ART替換Dalvik释牺,所以xposed安裝有點麻煩萝衩,分為兩個部分:xposed*.zip 和 XposedInstaller_3.1.apk。zip文件是框架主體没咙,需要進入Recovery后刷入猩谊,apk文件是xposed模塊管理應用,主要用于下載祭刚、激活牌捷、是否啟用模塊等管理功能。

    Android 5.0涡驮、5.1暗甥、6.0 安裝 xposed 官網(wǎng)教程:
    http://forum.xda-developers.com/showthread.php?t=3034811

開發(fā)一個module

S1、安裝 XposedBridgeApi

我們這里用的是:XposedBridgeApi-54

[XposedBridgeApi-54官方下載地址]
https://forum.xda-developers.com/attachment.php?s=5903ce1b3edb1032faba7292b21e1801&attachmentid=2748878&d=1400342298

除了XposedBridgeApi-54捉捅,還有XposedBridgeApi-82.jar撤防、XposedBridgeApi-87.jar、XposedBridgeApi-89.jar等版本

XposedBridgeApi 特殊存放位置

一句話:XposedBridgeApi分版本棒口,可以引用XposedBridgeApi本地jar寄月,也可以依賴引用。

本地jar

下載完畢后我們需要將 Xposed Library 復制到 lib目錄(注意是 lib 目錄不是Android提供的 libs 目錄)无牵,然后將這個 jar 包添加到 Build PATH 中

如果直接將jar包放置到了libs目錄下漾肮,很可能會產(chǎn)生錯 誤“IllegalAccessError: Class ref in
pre-verified class resolved to unexpected
implementation”。
估計Xposed作者在其框架內(nèi)部也引用了BridgeApi茎毁,這樣操作避免重復引用克懊。

引入包

dependencies {
    ……
    implementation files('lib/XposedBridgeApi-54.jar')
}

As 依賴引入

As,也可以依賴引入

比如

provided 'de.robv.android.xposed:api:82'
  //如果需要引入文檔充岛,方便查看的話
  provided 'de.robv.android.xposed:api:82:sources'

S2保檐、配置

<?xml version="1.0" encoding="utf-8"?>
<manifest package="com.fine.hookfoo"
          xmlns:android="http://schemas.android.com/apk/res/android">

    <application
        android:allowBackup="true"
        android:icon="@mipmap/ic_launcher"
        android:label="@string/app_name"
        android:roundIcon="@mipmap/ic_launcher_round"
        android:supportsRtl="true"
        android:theme="@style/AppTheme">

        <!--xposed 配置開始-->

        <!--xposedmodule: 表示這是一個xposed模塊-->
        <meta-data
            android:name="xposedmodule"
            android:value="true"/>

        <!--xposeddescription: 描述該模塊的用途,可以引用string.xml中的字符串-->
        <meta-data
            android:name="xposeddescription"
            android:value="何夜無月崔梗,何處無好module"/>

        <!--xposedminversion:要求支持的Xposed Framework最低版本 并不是指定82 就寫82-->
        <meta-data
            android:name="xposedminversion"
            android:value="30"/>
        <!--xposed 配置開始-->


        <activity android:name=".MainActivity">
            <intent-filter>
                <action android:name="android.intent.action.MAIN"/>

                <category android:name="android.intent.category.LAUNCHER"/>
            </intent-filter>
        </activity>
    </application>

</manifest>
  • xposedmodule: 表示這是一個xposed模塊
  • xposeddescription: 描述該模塊的用途夜只,可以引用string.xml中的字符串
  • xposedminversion:要求支持的Xposed Framework最低版本,引入的是82蒜魄,mix寫30也沒關系

S3扔亥、最簡單的模塊

創(chuàng)建一個類,并實現(xiàn)IXposedHookLoadPackage,IXposedHookZygoteInit或者其他IXposedMod的子接口谈为。

我們這里例子實現(xiàn)的是:IXposedHookLoadPackage

public class XposedMainInit implements IXposedHookLoadPackage {

    public void handleLoadPackage(final XC_LoadPackage.LoadPackageParam lpparam) throws Throwable {
        XposedBridge.log("XposedMainInit handleLoadPackage 執(zhí)行");
        XposedBridge.log("Loaded app: " + lpparam.packageName);
    }
}

XposedBridge.log會將日志輸出到logcat旅挤,并寫入日志文件

當然,也可以用 android.util.Log輸出到logcat伞鲫。

S4粘茄、聲明xposed入口

我們需要新建一個assets文件夾,并創(chuàng)建文件xposed_init,在里面填上xposed模塊的入口柒瓣。

這里我們聲明自己的類儒搭,比如:“com.fine.hookfoo.XposedMainInit”

image.png
image.png

安裝

這時候,安裝apk芙贫,然后Xposed搂鲫。

第一次安裝,需要進入到Xposed Install——模塊磺平,勾選我們的模塊魂仍,然后重啟機器。

每次修改完代碼安裝apk拣挪,都需要重啟機器擦酌,新代碼才會生效。

當然媒吗,我們這里的代碼沒人任何實則性的操作仑氛。

通過log,我看到:

  • 1闸英、模塊安裝成功了
  • 2锯岖、我們通過XposedBridge.jar,劫持 了所有app甫何。
image.png

如果無效出吹,可以試著裝上release包。

xposed一出辙喂,寸草不生捶牢。

本文完扯罐。

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末掠河,一起剝皮案震驚了整個濱河市,隨后出現(xiàn)的幾起案子猾警,更是在濱河造成了極大的恐慌炬太,老刑警劉巖灸蟆,帶你破解...
    沈念sama閱讀 217,657評論 6 505
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場離奇詭異亲族,居然都是意外死亡炒考,警方通過查閱死者的電腦和手機,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 92,889評論 3 394
  • 文/潘曉璐 我一進店門霎迫,熙熙樓的掌柜王于貴愁眉苦臉地迎上來斋枢,“玉大人,你說我怎么就攤上這事知给∪恐悖” “怎么了?”我有些...
    開封第一講書人閱讀 164,057評論 0 354
  • 文/不壞的土叔 我叫張陵,是天一觀的道長缘滥。 經(jīng)常有香客問我轰胁,道長谒主,這世上最難降的妖魔是什么朝扼? 我笑而不...
    開封第一講書人閱讀 58,509評論 1 293
  • 正文 為了忘掉前任,我火速辦了婚禮霎肯,結(jié)果婚禮上擎颖,老公的妹妹穿的比我還像新娘。我一直安慰自己观游,他們只是感情好搂捧,可當我...
    茶點故事閱讀 67,562評論 6 392
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著懂缕,像睡著了一般允跑。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上搪柑,一...
    開封第一講書人閱讀 51,443評論 1 302
  • 那天聋丝,我揣著相機與錄音,去河邊找鬼工碾。 笑死弱睦,一個胖子當著我的面吹牛,可吹牛的內(nèi)容都是我干的渊额。 我是一名探鬼主播况木,決...
    沈念sama閱讀 40,251評論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼旬迹!你這毒婦竟也來了火惊?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 39,129評論 0 276
  • 序言:老撾萬榮一對情侶失蹤奔垦,失蹤者是張志新(化名)和其女友劉穎屹耐,沒想到半個月后,有當?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體宴倍,經(jīng)...
    沈念sama閱讀 45,561評論 1 314
  • 正文 獨居荒郊野嶺守林人離奇死亡张症,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 37,779評論 3 335
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發(fā)現(xiàn)自己被綠了鸵贬。 大學時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片俗他。...
    茶點故事閱讀 39,902評論 1 348
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖阔逼,靈堂內(nèi)的尸體忽然破棺而出兆衅,到底是詐尸還是另有隱情,我是刑警寧澤,帶...
    沈念sama閱讀 35,621評論 5 345
  • 正文 年R本政府宣布羡亩,位于F島的核電站摩疑,受9級特大地震影響,放射性物質(zhì)發(fā)生泄漏畏铆。R本人自食惡果不足惜雷袋,卻給世界環(huán)境...
    茶點故事閱讀 41,220評論 3 328
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望辞居。 院中可真熱鬧楷怒,春花似錦、人聲如沸瓦灶。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,838評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽贼陶。三九已至刃泡,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間碉怔,已是汗流浹背烘贴。 一陣腳步聲響...
    開封第一講書人閱讀 32,971評論 1 269
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留眨层,地道東北人庙楚。 一個月前我還...
    沈念sama閱讀 48,025評論 2 370
  • 正文 我出身青樓,卻偏偏與公主長得像趴樱,于是被迫代替她去往敵國和親馒闷。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當晚...
    茶點故事閱讀 44,843評論 2 354

推薦閱讀更多精彩內(nèi)容

  • Android 自定義View的各種姿勢1 Activity的顯示之ViewRootImpl詳解 Activity...
    passiontim閱讀 172,116評論 25 707
  • 用兩張圖告訴你叁征,為什么你的 App 會卡頓? - Android - 掘金 Cover 有什么料纳账? 從這篇文章中你...
    hw1212閱讀 12,723評論 2 59
  • 安全博客 > 技術(shù)研究 > 淺談android hook技術(shù) 淺談android hook技術(shù) 您當前的位置:...
    光劍書架上的書閱讀 6,166評論 0 8
  • 一,apk以進程的形式運行捺疼,進程的創(chuàng)建是由zygote疏虫。 參考文章《深入理解Dalvik虛擬機- Android應...
    Kevin_Junbaozi閱讀 2,846評論 0 12
  • 當我還在想創(chuàng)業(yè),卻沒人支持我的時候啤呼,當我還在參加招聘會卧秘,還是失敗的時候,當我還在到處借錢官扣,卻借不到的時候翅敌,我遇見了...
    寧燕澤閱讀 503評論 15 20