抱歉,Xposed真的可以為所欲為——3.微信運動占領(lǐng)封面出售廣告位

一句話概括本文

簡單的二十行代碼,利用Xposed Hook掉計步傳感器,以此達到刷步數(shù)的目的。


引言

現(xiàn)在的年輕都喜歡用各種各樣的計步APP來記錄每天的步數(shù),微信自帶的
微信運動因為用戶群體基數(shù)大,很多人都在用,還有釘釘也整個釘釘
運動...看到別人天天走2W步就是為了占領(lǐng)封面,多走路本來是個好東西,
卻變成了一種攀比的行為,走路這種東西不是越多越好的,我...

本節(jié)就來Hook一波微信運動,來試試那種霸占封面的快感。


1.胡亂分析

手機APP計步基本都是依靠的手機自帶的傳感器,只是不同的計步軟件的算法
可能不一樣。以4.4為分水嶺,在4.4之前步數(shù)采集基本都是通過 加速度傳感器
需要一個后臺常駐服務(wù)實現(xiàn)計步功能,如果后臺服務(wù)被殺死,會導(dǎo)致計步功能
無法使用。而在4.4之后,大部分手機開始新增計步傳感器,官方對此的介紹:
https://developer.android.com/about/versions/android-4.4.html#UserInput

該傳感器是系統(tǒng)級別的,從手機開機開始記錄步數(shù),關(guān)機時會重置為0,程序可以
直接調(diào)用獲取步數(shù),而不用后臺運行服務(wù)實時跟蹤,省電還不用去擔(dān)心服務(wù)?;畹膯栴}。

新的計步傳感器有兩種,官方是建議使用TYPE_STEP_COUNTER,該傳感器會進行
較多的處理以消除誤報,結(jié)果會更加準(zhǔn)確。

因為不同APP的計步算法可能不一樣,還可能對計步結(jié)果進行校驗之類的,得出不合理
的值可能會增大被監(jiān)測到異常的概率,所以打算從源頭直接Hook掉傳感器返回的值。

PS:如圖是我的Moto xt 1085,5.1的系統(tǒng),沒有計步傳感器,微信直接說手機
不支持,猜測是直接放棄了沒計步傳感器的手機,因為Hook的是微信運動,
所以加速度傳感器就不處理了撒~

先來編寫代碼,看下獲得傳感器數(shù)據(jù)的整個過程:

返回的values里只有一個值,就是我們想要的步數(shù)。

接著開始跟蹤代碼,點進去onSensorChange查看源碼

dispatchSensorEvent方法,留意到上面的注釋了嗎?
該方法native層的代碼進行調(diào)用,所有我們到這里就夠了,values這個float數(shù)組
就是我們想要的數(shù)據(jù)了,我們趕在方法調(diào)用前,獲取里面的步數(shù),然后就可以為所欲為
了,比如加上一個值,又或者乘以一個倍數(shù),走一步等于人家走幾百步或者幾千步。

這個方法是在一個靜態(tài)內(nèi)部類中:

上上節(jié)講過了,內(nèi)部類用 $ 符號進行連接。

到此,整個過程就摸清了,接下來開始編寫代碼。


2.代碼編寫

編寫一個簡單設(shè)置頁面,一個CheckBox,一個Seekbar滑動條。

接著要找東西存儲用戶的選項,是否卡開啟步數(shù)助手,還要記錄倍數(shù),
一開始我像以前一樣直接使用Hawk的,在APP類里實例化了Hawk,
Hawk.init(this).build(),然后在運行的時候我去獲取這些參數(shù),發(fā)現(xiàn)報錯了,
大概是:調(diào)用Hawk前需要先調(diào)用Hawk.build(),原因是Hook的
SystemSensorManager,這個服務(wù),在我這個程序開始前就創(chuàng)建了
所以才會出現(xiàn)這個問題。對于存儲這種需要持久化配置型的數(shù)據(jù),可以采用
Xposed自帶的 XSharedPreferences ,吐槽下,網(wǎng)上關(guān)于這個東西的介紹
模棱兩可,直接懟代碼,一點解釋也沒有,頭皮發(fā)麻。

這個東西呢,本質(zhì)上還是SharedPreferences,正常使用它的時候,我們需要傳入
上下文context,比如:

而在Xposed中,提供了XSharedPreferences 專門讀取自身的 SharedPreferences
而不用傳入context。

注意兩點:

  • 1.生成SharedPreferences,權(quán)限是:Context.MODE_WORLD_READABLE
  • 2.XSharedPreferences實例化后,需要調(diào)用makeWorldReadable(),這個玩意
    只能讀,不能寫?。?!

接著繼續(xù)編寫代碼,寫一個 SharedPreferences 的工具類。

再接著改下設(shè)置頁面的代碼:
點擊Checkbox和Seekbar移動時把結(jié)果寫到SP里,進度值默認(rèn)+1,從0開始。

最后就是核心Xposed代碼的編寫了:

流程:

  • 1.判斷包名是否為微信或者釘釘
  • 2.反射獲取傳感器Class(這里的 \ 是轉(zhuǎn)義,在Kotlin里 $ 用于變量取值)
  • 3.Hook掉dispatchSensorEvent),在這里獲取第二個參數(shù)(下標(biāo)從0開始算),然后修改
    這個float數(shù)組里的第一個參數(shù),乘以我們設(shè)置的倍數(shù)
  • 4.super.beforeHookedMethod(param)調(diào)用下原方法

大概就是這樣,原理非常簡單。


3.為所欲為

接著運行重啟下,設(shè)置1000倍,走一步等于別人走1000步,美滋滋

接著出去溜達以下,或者直接原地搖手機,打開微信運動查看步數(shù):

噗呲


4.小結(jié)

代碼和上節(jié)一樣,非常簡單,都是直接Hook掉某個系統(tǒng)進程,不過非常好玩,
后面會開始慢慢Hook一些應(yīng)用,比如微信,最想做的就是垃圾群聊分組,
還記得之前用無障礙服務(wù)AccessibilityService寫的自動加好友,拉群,
朋友圈自動點贊,搶紅包么?后面都會用Xposed來實現(xiàn),敬請期待~


附:最終代碼(都可以在:https://github.com/coder-pig/CPWechatXposed 找到):

image
class XposedInit : IXposedHookLoadPackage {
    companion object {
        var xsp by Delegates.notNull<XSharedPreferences>()
    }

    init {
        xsp = XSharedPreferences(BuildConfig.APPLICATION_ID, "config")
        xsp.makeWorldReadable()
    }

    @SuppressLint("PrivateApi")
    override fun handleLoadPackage(lpparam: XC_LoadPackage.LoadPackageParam) {
        when (lpparam.packageName) {
            "com.tencent.mm", "com.alibaba.android.rimet" -> {
                val c = Class.forName("android.hardware.SystemSensorManager\$SensorEventQueue")
                XposedBridge.hookAllMethods(c, "dispatchSensorEvent", object : XC_MethodHook() {
                    override fun beforeHookedMethod(param: MethodHookParam) {
                        xsp.reload()
                        if (xsp.getBoolean(Constants.IS_STEP_OPEN, false)) {
                            val muti = xsp.getString(Constants.CUR_STEP_MULT, "1").toInt()
                            (param.args[1] as FloatArray)[0] = (param.args[1] as FloatArray)[0] * muti
                        }
                        super.beforeHookedMethod(param)
                    }
                })
            }
        }
    }
}

來啊,Py交易啊

想加群一起學(xué)習(xí)Py的可以加下,智障機器人小Pig,驗證信息里包含:
Python,python,py,Py,加群交易屁眼 中的一個關(guān)鍵詞即可通過;

image

驗證通過后回復(fù) 加群 即可獲得加群鏈接(不要把機器人玩壞了?。。?~~~
歡迎各種像我一樣的Py初學(xué)者,Py大神加入,一起愉快地交流學(xué)♂習(xí),van♂轉(zhuǎn)py。

image

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

  • Android 自定義View的各種姿勢1 Activity的顯示之ViewRootImpl詳解 Activity...
    passiontim閱讀 179,030評論 25 709
  • 很多人寫文章,喜歡把什么行業(yè)現(xiàn)狀啊,研究現(xiàn)狀啊什么的寫了一大通,感覺好像在寫畢業(yè)論文似的,我這不廢話,先直接上幾個...
    龐哈哈哈12138閱讀 3,065評論 1 8
  • 不知不覺中也寫了39篇文章,不是說寫了這么多就有多么的牛逼,我從來都不敢這么認(rèn)為;也不敢說我寫的這些有多少含金量,...
    小魚嘻嘻閱讀 356評論 0 4
  • 曾經(jīng)有兩個90后美女網(wǎng)紅在直播平臺上直播撕書,同時稱:“我不讀書照樣開跑車,大學(xué)生也得給我打工”。有人質(zhì)疑...
    smile200709閱讀 187評論 0 0
  • 誰撒瓢潑向世人,追也茫然,躲也茫然,晨光無由到眼前。 我本奔徒自紅塵,愛上心頭,恨上心頭,三分癡情七分愁。
    明續(xù)閱讀 313評論 2 0

友情鏈接更多精彩內(nèi)容