android 黑科技 Xposed框架 hook 全局系統(tǒng)通知


什么是Xposed

Xposed框架(Xposed Framework)是一套開源的、在Android高權限模式下運行的框架服務,可以在不修改APK文件的情況下影響程序運行(修改系統(tǒng))的框架服務羞海,基于它可以制作出許多功能強大的模塊怯伊,且在功能不沖突的情況下同時運作。 ----- 來源百度搜索

背景

首先般堆,先介紹一下之前項目中使用的抓取通知欄內(nèi)容的一套方案:

  • 方案一、自定義繼承 NotificationListenerService 的服務诚啃,并通過監(jiān)聽通知變化回調(diào)獲取通知方式淮摔。

    缺點: android5.0以后,存在應用殺死后服務監(jiān)聽收不到的情況始赎,需要重啟手機才能再次使用和橙。

  • 方案二仔燕、使用android輔助功能,自定義繼承 AccessibilityService 的服務魔招,監(jiān)聽系統(tǒng)通知欄的行為變化晰搀,獲取通知。
    缺點:應用需要一直停留在前臺办斑,后臺服務容易被系統(tǒng)殺死厕隧,導致監(jiān)聽失敗情況,可以采用兩個服務互為守護解決俄周。

下面介紹一下直接hook系統(tǒng) NotificationManager 的 notify 方法實現(xiàn)全局通知監(jiān)聽吁讨,這種方法通過攔截系統(tǒng)通知方法,截取 Notification 來直接從源頭獲取通知內(nèi)容峦朗。

如何使用

先配環(huán)境

  • 安裝android模擬器:Genymotion, 這個模擬器啟動速度快建丧,且系統(tǒng)擁有root權限,使用起來比較流暢波势,具體安裝過程不多提翎朱。當然如果有一臺root的手機就更好了。
    下載地址https://www.genymotion.com/
  • 為模擬器android arm 架構支持(非必須),下載地址
    https://github.com/m9rco/Genymotion_ARM_Translation/tree/master/package尺铣,下載后直接拖拽到模擬器中安裝后重啟模擬器即可拴曲。
  • 安裝Xposed框架下載(andriod 5.0-7.0可用) 下載地址 https://pan.baidu.com/s/1T1s37QowFOVZ9X-ejB8eZg
    下載好的apk凛忿,直接拖拽到模擬器里安裝澈灼,安裝后打開應用,對框架進行激活店溢。
    至此叁熔,基本工作已經(jīng)做好,剩下就是開始寫代碼了床牧。
    image.png

再寫代碼

1.Xposed模塊創(chuàng)建
使用android studio 創(chuàng)建一個工程荣回,并增加Xposed框架依賴。

 compileOnly 'de.robv.android.xposed:api:82'
 compileOnly 'de.robv.android.xposed:api:82:sources'

2.hook 系統(tǒng) NotifacationManager 類的notify方法
新建一個類HookTest類實現(xiàn) IXposedHookLoadPackage 方法并重寫 handleLoadPackage 方法戈咳。

  @Override
  public void handleLoadPackage(XC_LoadPackage.LoadPackageParam loadPackageParam) throws Throwable {
                final Class clazz = XposedHelpers.findClass(
                "android.app.NotificationManager", loadPackageParam.classLoader);
        if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.JELLY_BEAN_MR1) {
            XposedHelpers.findAndHookMethod(clazz, "notify"
                    , String.class, int.class, Notification.class
                    , new XC_MethodHook() {
                        @Override
                        protected void beforeHookedMethod(MethodHookParam param) throws Throwable {
                            super.beforeHookedMethod(param);
                        }

                        @Override
                        protected void afterHookedMethod(MethodHookParam param) throws Throwable {
                            super.afterHookedMethod(param);
                            XposedBridge.log("methodHookParam.args:  " + Arrays.toString(param.args));
                            Notification a = (Notification) param.args[2];
                            String aPackage = notification.contentView.getPackage();
                            String title = "";
                            String text = "";
                            if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.KITKAT) {
                                Bundle bundle = notification.extras;
                                title = (String) bundle.get("android.title");
                                text = (String) bundle.get("android.text");
                                XposedBridge.log("loadpackage"+ aPackage);
                                XposedBridge.log("tickerText" + a.tickerText.toString());
                                XposedBridge.log("title"+ title);
                                XposedBridge.log("text"+ text);
                            }
                        }
                    });
        }
    }
    
}

3.新建assets目錄心软,并創(chuàng)建文件xposed_init, 文件內(nèi)容為hook類的全類名。


image.png

4.AndroidManifest.xml中為application配置meta-data標識為`xposed`框架可識別模塊著蛙。

<meta-data
android:name="xposedmodule"
android:value="true" />
<meta-data
android:name="xposeddescription"
android:value="hookNotification測試" />
<meta-data
android:name="xposedminversion"
android:value="54" />

5.運行應用删铃,并在安裝好的xposed框架應用中,找到配置的模塊册踩,并勾選泳姐,重啟后生效。

image.png

6.直接看效果暂吉。

image.png

6.至此胖秒,hook全局通知完成缎患。具體實現(xiàn)的原理以及xposed的框架這里就不過多介紹了,請自行百度即可阎肝。
項目git地址:https://github.com/lengku8e/XposeDemo

?著作權歸作者所有,轉載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末挤渔,一起剝皮案震驚了整個濱河市,隨后出現(xiàn)的幾起案子风题,更是在濱河造成了極大的恐慌判导,老刑警劉巖,帶你破解...
    沈念sama閱讀 218,122評論 6 505
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件沛硅,死亡現(xiàn)場離奇詭異眼刃,居然都是意外死亡,警方通過查閱死者的電腦和手機摇肌,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 93,070評論 3 395
  • 文/潘曉璐 我一進店門擂红,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人围小,你說我怎么就攤上這事昵骤。” “怎么了肯适?”我有些...
    開封第一講書人閱讀 164,491評論 0 354
  • 文/不壞的土叔 我叫張陵变秦,是天一觀的道長。 經(jīng)常有香客問我框舔,道長蹦玫,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 58,636評論 1 293
  • 正文 為了忘掉前任雨饺,我火速辦了婚禮钳垮,結果婚禮上,老公的妹妹穿的比我還像新娘额港。我一直安慰自己,他們只是感情好歧焦,可當我...
    茶點故事閱讀 67,676評論 6 392
  • 文/花漫 我一把揭開白布移斩。 她就那樣靜靜地躺著,像睡著了一般绢馍。 火紅的嫁衣襯著肌膚如雪向瓷。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 51,541評論 1 305
  • 那天舰涌,我揣著相機與錄音猖任,去河邊找鬼。 笑死瓷耙,一個胖子當著我的面吹牛朱躺,可吹牛的內(nèi)容都是我干的刁赖。 我是一名探鬼主播,決...
    沈念sama閱讀 40,292評論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼长搀,長吁一口氣:“原來是場噩夢啊……” “哼宇弛!你這毒婦竟也來了?” 一聲冷哼從身側響起源请,我...
    開封第一講書人閱讀 39,211評論 0 276
  • 序言:老撾萬榮一對情侶失蹤枪芒,失蹤者是張志新(化名)和其女友劉穎,沒想到半個月后谁尸,有當?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體舅踪,經(jīng)...
    沈念sama閱讀 45,655評論 1 314
  • 正文 獨居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 37,846評論 3 336
  • 正文 我和宋清朗相戀三年良蛮,在試婚紗的時候發(fā)現(xiàn)自己被綠了抽碌。 大學時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點故事閱讀 39,965評論 1 348
  • 序言:一個原本活蹦亂跳的男人離奇死亡背镇,死狀恐怖咬展,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情瞒斩,我是刑警寧澤破婆,帶...
    沈念sama閱讀 35,684評論 5 347
  • 正文 年R本政府宣布,位于F島的核電站胸囱,受9級特大地震影響祷舀,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜烹笔,卻給世界環(huán)境...
    茶點故事閱讀 41,295評論 3 329
  • 文/蒙蒙 一裳扯、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧谤职,春花似錦饰豺、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,894評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至饶套,卻和暖如春漩蟆,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背妓蛮。 一陣腳步聲響...
    開封第一講書人閱讀 33,012評論 1 269
  • 我被黑心中介騙來泰國打工怠李, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留,地道東北人。 一個月前我還...
    沈念sama閱讀 48,126評論 3 370
  • 正文 我出身青樓捺癞,卻偏偏與公主長得像夷蚊,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子翘簇,可洞房花燭夜當晚...
    茶點故事閱讀 44,914評論 2 355

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