python 广告牌_抱歉,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来实现,敬请期待~

image

class XposedInit : IXposedHookLoadPackage {

companion object {

var xsp by Delegates.notNull()

}

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,验证信息里包含:

Python,python,py,Py,加群,交易,屁眼 中的一个关键词即可通过;

image

验证通过后回复 加群 即可获得加群链接(不要把机器人玩坏了!!!)~~~

欢迎各种像我一样的Py初学者,Py大神加入,一起愉快地交流学♂习,van♂转py。

image

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值