5分鐘發(fā)布一個(gè)Xposed Module

本文from https://blog.dreamtobe.cn/xposed_module/
以隱藏微信發(fā)現(xiàn)頁(yè)面游戲中心的入口為例子上陕,源碼在這: https://github.com/Jacksgong/wechat-hunter

1. Xposed原理淺談

在此之前建議通過(guò)這幾篇文章簡(jiǎn)單的了解下Android簡(jiǎn)要的知識(shí): ART童叠、Dalvik伤靠、Android GC很洋、ActivityManagerService渡冻。

常用方法

通常我們?nèi)バ薷钠渌麘?yīng)用的行為,要通過(guò)反編譯竿滨,然后重新編譯芭碍、重新簽名才行徒役。

Xposed做法

Xposed是通過(guò)hook方法的方式來(lái)實(shí)現(xiàn),由于Xposed修改了系統(tǒng)在啟動(dòng)時(shí)加載的Zygote進(jìn)程相關(guān)的邏輯以及加載的資源(并且所有應(yīng)用的啟動(dòng)都是從Zygote進(jìn)程中拷貝出來(lái)的)窖壕,因此幾乎可以架空一切安全忧勿,做所有事情,包括修改系統(tǒng)行為艇拍。

hook的大概原理

hook方法是XposedBridge中的一個(gè)私有native方法hookMethodNative改變被hook方法的類(lèi)型為native并且link方法實(shí)現(xiàn)到它自己的native方法中狐蜕,并且對(duì)調(diào)用者透明宠纯,該native方法調(diào)用XposedBridge中的handleHookedMethod方法卸夕,將參數(shù),this引用等傳進(jìn)來(lái)婆瓜,之后在回調(diào)回去快集,這樣我們就可以在任意方法執(zhí)行前后做任何的事情了(當(dāng)然xposed框架還支持替換各類(lèi)資源)。

2. 編寫(xiě)code

2.1. 創(chuàng)建空Android項(xiàng)目

首先創(chuàng)建一個(gè)空的Android項(xiàng)目

本文案例使用:

  • compileSdkVersion: 25
  • buildToolsVersion: 25.0.2
  • minSdkVersion: 9
  • targetSdkVersion: 25

2.2. 申明為Xposed module項(xiàng)目

在AndroidManifest中通過(guò)meta-data申明:

  • xposeddescription: 該模塊的簡(jiǎn)要描述
  • xposedminversion: 最低依賴(lài)的xposed版本(這里主要看你要使用的xposed的功能在該版本之下是否已經(jīng)支持)
<application android:label="WechatHunt">
    <meta-data
        android:name="xposedmodule"
        android:value="true" />
    <meta-data
        android:name="xposeddescription"
        android:value="The hunter for wechat" />
    <meta-data
        android:name="xposedminversion"
        android:value="30" />
</application>

2.3. 引入依賴(lài)

由于這些依賴(lài)庫(kù)在安裝了Xposed框架手機(jī)的Zygote進(jìn)程上默認(rèn)就已經(jīng)有加載了廉白,所以我們這邊只需要保證當(dāng)前寫(xiě)代碼時(shí)候找得到依賴(lài)个初,并不需要打入apk包中,因此使用provided關(guān)鍵字即可猴蹂,還有一個(gè)是為了我們?cè)赾ode中看得到Java-Doc院溺,因此兩個(gè)都引接口:

  • 這里的[latest version]替換為目前最新版本,如這邊文章編寫(xiě)的時(shí)候最新版本是82
provided 'de.robv.android.xposed:api:[latest version]'
provided 'de.robv.android.xposed:api:[latest version]:sources'

2.4. CODING

  • 實(shí)現(xiàn)IXposedHookLoadPackage來(lái)在應(yīng)用被加載的時(shí)候生效hook方法磅轻。
  • 實(shí)現(xiàn)好之后珍逸,創(chuàng)建assets目錄逐虚,默認(rèn)情況下是在app/src/main/assets
  • 在assets目錄中創(chuàng)建xposed_init文件
  • 在xposed_init中申明加載器(完整的加載器路徑),如cn.dreamtobe.xposed.wechathunt.WechatHunt

3. 實(shí)現(xiàn)隱藏游戲中心入口

下載微信谆膳,解壓縮叭爱,反編譯,搜索關(guān)鍵字:


找到混淆后的類(lèi)名后买雾,進(jìn)行編寫(xiě)

// 找到需要hook的類(lèi)
final Class<?> pluginHelper = findClass("com.tencent.mm.ay.c", lpparam.classLoader);
// 以及需要hook的方法FZ(String)
findAndHookMethod(pluginHelper, "FZ", String.class, new XC_MethodHook() {
    // 對(duì)方法執(zhí)行后進(jìn)行hook
    @Override
    protected void afterHookedMethod(MethodHookParam param) throws Throwable {
        super.afterHookedMethod(param);
        final String plugin = (String) param.args[0];
        if (plugin.equals("game")) {
            // 將返回值修改為false
            param.setResult(false);
        }
    }
});

4.發(fā)布到Xposed Module Repo

當(dāng)然如果是混淆的話(huà),即可要keep加載器杨帽,因?yàn)槭窃赼ssets中申明的漓穿,如這個(gè)案例中:

-keep class cn.dreamtobe.xposed.wechathunt.WechatHunt{*;}
-keepnames class cn.dreamtobe.xposed.wechathunt.WechatHunt
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個(gè)濱河市注盈,隨后出現(xiàn)的幾起案子器净,更是在濱河造成了極大的恐慌,老刑警劉巖当凡,帶你破解...
    沈念sama閱讀 216,496評(píng)論 6 501
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件山害,死亡現(xiàn)場(chǎng)離奇詭異,居然都是意外死亡沿量,警方通過(guò)查閱死者的電腦和手機(jī)浪慌,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 92,407評(píng)論 3 392
  • 文/潘曉璐 我一進(jìn)店門(mén),熙熙樓的掌柜王于貴愁眉苦臉地迎上來(lái)朴则,“玉大人权纤,你說(shuō)我怎么就攤上這事∥诙剩” “怎么了汹想?”我有些...
    開(kāi)封第一講書(shū)人閱讀 162,632評(píng)論 0 353
  • 文/不壞的土叔 我叫張陵,是天一觀的道長(zhǎng)撤蚊。 經(jīng)常有香客問(wèn)我古掏,道長(zhǎng),這世上最難降的妖魔是什么侦啸? 我笑而不...
    開(kāi)封第一講書(shū)人閱讀 58,180評(píng)論 1 292
  • 正文 為了忘掉前任槽唾,我火速辦了婚禮,結(jié)果婚禮上光涂,老公的妹妹穿的比我還像新娘庞萍。我一直安慰自己,他們只是感情好忘闻,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,198評(píng)論 6 388
  • 文/花漫 我一把揭開(kāi)白布钝计。 她就那樣靜靜地躺著,像睡著了一般。 火紅的嫁衣襯著肌膚如雪私恬。 梳的紋絲不亂的頭發(fā)上交播,一...
    開(kāi)封第一講書(shū)人閱讀 51,165評(píng)論 1 299
  • 那天,我揣著相機(jī)與錄音践付,去河邊找鬼秦士。 笑死,一個(gè)胖子當(dāng)著我的面吹牛永高,可吹牛的內(nèi)容都是我干的隧土。 我是一名探鬼主播,決...
    沈念sama閱讀 40,052評(píng)論 3 418
  • 文/蒼蘭香墨 我猛地睜開(kāi)眼命爬,長(zhǎng)吁一口氣:“原來(lái)是場(chǎng)噩夢(mèng)啊……” “哼曹傀!你這毒婦竟也來(lái)了?” 一聲冷哼從身側(cè)響起饲宛,我...
    開(kāi)封第一講書(shū)人閱讀 38,910評(píng)論 0 274
  • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤皆愉,失蹤者是張志新(化名)和其女友劉穎,沒(méi)想到半個(gè)月后艇抠,有當(dāng)?shù)厝嗽跇?shù)林里發(fā)現(xiàn)了一具尸體幕庐,經(jīng)...
    沈念sama閱讀 45,324評(píng)論 1 310
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 37,542評(píng)論 2 332
  • 正文 我和宋清朗相戀三年家淤,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了异剥。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點(diǎn)故事閱讀 39,711評(píng)論 1 348
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡絮重,死狀恐怖冤寿,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情青伤,我是刑警寧澤督怜,帶...
    沈念sama閱讀 35,424評(píng)論 5 343
  • 正文 年R本政府宣布,位于F島的核電站狠角,受9級(jí)特大地震影響号杠,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜擎厢,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,017評(píng)論 3 326
  • 文/蒙蒙 一究流、第九天 我趴在偏房一處隱蔽的房頂上張望辣吃。 院中可真熱鬧动遭,春花似錦、人聲如沸神得。這莊子的主人今日做“春日...
    開(kāi)封第一講書(shū)人閱讀 31,668評(píng)論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)。三九已至宵蕉,卻和暖如春酝静,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背羡玛。 一陣腳步聲響...
    開(kāi)封第一講書(shū)人閱讀 32,823評(píng)論 1 269
  • 我被黑心中介騙來(lái)泰國(guó)打工别智, 沒(méi)想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留,地道東北人稼稿。 一個(gè)月前我還...
    沈念sama閱讀 47,722評(píng)論 2 368
  • 正文 我出身青樓薄榛,卻偏偏與公主長(zhǎng)得像,于是被迫代替她去往敵國(guó)和親让歼。 傳聞我的和親對(duì)象是個(gè)殘疾皇子敞恋,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 44,611評(píng)論 2 353

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

  • Android 自定義View的各種姿勢(shì)1 Activity的顯示之ViewRootImpl詳解 Activity...
    passiontim閱讀 172,077評(píng)論 25 707
  • 安全博客 > 技術(shù)研究 > 淺談android hook技術(shù) 淺談android hook技術(shù) 您當(dāng)前的位置:...
    光劍書(shū)架上的書(shū)閱讀 6,164評(píng)論 0 8
  • 前言 Xposed這位老兄大家可能不認(rèn)識(shí),微信自動(dòng)搶紅包大家聽(tīng)過(guò)吧谋右、微信記錄器作弊大家聽(tīng)過(guò)吧硬猫、地理位置模擬大家聽(tīng)過(guò)...
    王永迪閱讀 31,114評(píng)論 15 62
  • 久違的暖和陽(yáng)光 多么適合 晾衣服 曬被子 大掃除 洗好頭發(fā)去見(jiàn)你 也多么適合啊
    胡韻寶閱讀 174評(píng)論 0 0
  • 不知道從何時(shí)開(kāi)始,一部分創(chuàng)業(yè)的人并不夢(mèng)想著將自己的企業(yè)做大做強(qiáng)改执,甚至上市啸蜜,而是要做一個(gè)小而美的公司。對(duì)于什...
    RealStudios_KZ閱讀 469評(píng)論 0 1