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

一句话概括本文

简单的二十行代码,利用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 找到):

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

想加群一起学习Py的可以加下,智障机器人小Pig,验证信息里包含:
PythonpythonpyPy加群交易屁眼 中的一个关键词即可通过;

image

验证通过后回复 加群 即可获得加群链接(不要把机器人玩坏了!!!)~~~
欢迎各种像我一样的Py初学者,Py大神加入,一起愉快地交流学♂习,van♂转py。

image

©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 203,271评论 5 476
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 85,275评论 2 380
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 150,151评论 0 336
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 54,550评论 1 273
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 63,553评论 5 365
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 48,559评论 1 281
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 37,924评论 3 395
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 36,580评论 0 257
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 40,826评论 1 297
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 35,578评论 2 320
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 37,661评论 1 329
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 33,363评论 4 318
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 38,940评论 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 29,926评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 31,156评论 1 259
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 42,872评论 2 349
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 42,391评论 2 342

推荐阅读更多精彩内容

  • Android 自定义View的各种姿势1 Activity的显示之ViewRootImpl详解 Activity...
    passiontim阅读 171,387评论 25 707
  • 很多人写文章,喜欢把什么行业现状啊,研究现状啊什么的写了一大通,感觉好像在写毕业论文似的,我这不废话,先直接上几个...
    庞哈哈哈12138阅读 2,927评论 1 8
  • 不知不觉中也写了39篇文章,不是说写了这么多就有多么的牛逼,我从来都不敢这么认为;也不敢说我写的这些有多少含金量,...
    小鱼嘻嘻阅读 307评论 0 4
  • 曾经有两个90后美女网红在直播平台上直播撕书,同时称:“我不读书照样开跑车,大学生也得给我打工”。有人质疑...
    smile200709阅读 146评论 0 0
  • 谁撒瓢泼向世人,追也茫然,躲也茫然,晨光无由到眼前。 我本奔徒自红尘,爱上心头,恨上心头,三分痴情七分愁。
    明续阅读 276评论 2 0