日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

抱歉,Xposed真的可以为所欲为——3.微信运动占领封面出售广告位

發布時間:2024/3/26 编程问答 51 豆豆
生活随笔 收集整理的這篇文章主要介紹了 抱歉,Xposed真的可以为所欲为——3.微信运动占领封面出售广告位 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

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

標簽: 2018


一句話概括本文

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


引言

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

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


1.胡亂分析

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

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

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

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

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

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

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

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

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

這個方法是在一個靜態內部類中:

上上節講過了,內部類用 $ 符號進行連接。

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


2.代碼編寫

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

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

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

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

注意兩點:

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

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

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

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

流程:

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

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


3.為所欲為

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

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

噗呲


4.小結

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


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

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交易啊

想加群一起學習Py的可以加下,智障機器人小Pig,驗證信息里包含:
PythonpythonpyPy加群交易屁眼 中的一個關鍵詞即可通過;

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


總結

以上是生活随笔為你收集整理的抱歉,Xposed真的可以为所欲为——3.微信运动占领封面出售广告位的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。