一句话概括本文

简单的二十行代码,利用Xposed Hook掉计步传感器,以此达到刷步数的目的。


引言

现在的年轻都喜欢用各种各样的计步APP来记录每天的步数,微信自带的 微信运动因为用户群体基数大,很多人都在用,还有钉钉也整个钉钉 运动...看到别人天天走2W步就是为了占领封面,多走路本来是个好东西, 却变成了一种攀比的行为,走路这种东西不是越多越好的,我...

本节就来Hook一波微信运动,来试试那种霸占封面的快感。


1.胡乱分析

手机APP计步基本都是依靠的手机自带的传感器,只是不同的计步软件的算法 可能不一样。以4.4为分水岭,在4.4之前步数采集基本都是通过 加速度传感器, 需要一个后台常驻服务实现计步功能,如果后台服务被杀死,会导致计步功能 无法使用。而在4.4之后,大部分手机开始新增计步传感器,官方对此的介绍: developer.android.com/about/versi…

该传感器是系统级别的,从手机开机开始记录步数,关机时会重置为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来实现,敬请期待~


附:最终代码(都可以在:github.com/coder-pig/C… 找到):

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)}})}}}
}
复制代码

原文链接:https://juejin.im/post/5adf1d846fb9a07abb234015

抱歉,Xposed真的可以为所欲为——3.微信运动占领封面出售广告位(转载)相关推荐

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

    抱歉,Xposed真的可以为所欲为--3.微信运动占领封面出售广告位 标签: 2018 一句话概括本文 简单的二十行代码,利用Xposed Hook掉计步传感器,以此达到刷步数的目的. 引言 现在的年 ...

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

    一句话概括本文 简单的二十行代码,利用Xposed Hook掉计步传感器,以此达到刷步数的目的. 引言 现在的年轻都喜欢用各种各样的计步APP来记录每天的步数,微信自带的 微信运动因为用户群体基数大, ...

  3. 抱歉,Xposed真的可以为所欲为——4.猜拳投骰子你能赢算我输

    抱歉,Xposed真的可以为所欲为--4.猜拳投骰子你能赢算我输 标签: 2018 一句话概括本文 人品大法利用Xposed Hook掉微信猜拳和投骰子,让你无需再担忧拿外卖和搞卫生. 引言 关于这节 ...

  4. 抱歉,Xposed真的可以为所欲为——6.你的表白撤不回了

    抱歉,Xposed真的可以为所欲为--6.你的表白撤不回了 标签: 2018 一句话概括本文 一步步Hook微信,实现微信消息防撤回. 引言 上周六下班,与往常一样,和公司同事去吃个饭,然后打个球,在 ...

  5. 抱歉,Xposed真的可以为所欲为——5.我自己刷的Xposed凭什么不给我用

    抱歉,Xposed真的可以为所欲为--5.我自己刷的Xposed凭什么不给我用 标签: 2018 一句话概括本文 分析定位排查下厨房APP检测手机是否安装了Xposed框架的方法,然后一步步 Hook ...

  6. 抱歉,Xposed真的可以为所欲为——2.改为OV机型流畅玩耍高帧率王者农药

    抱歉,Xposed真的可以为所欲为--2.改为OV机型流畅玩耍高帧率王者农药 标签:2018 一句话概括本文: 只需20行代码,利用Xposed Hook掉王者农药王者获取手机系统机型的方法, 改成O ...

  7. 抱歉,Xposed真的可以为所欲为——4.猜拳投骰子你能赢算我输(转载)

    一句话概括本文 人品大法利用Xposed Hook掉微信猜拳和投骰子,让你无需再担忧拿外卖和搞卫生. 引言 关于这节,我是看代码看到头皮发麻,逆向APP并没有想想中的简单, 特别是微信这种,要投入的学 ...

  8. 抱歉,Xposed真的可以为所欲为——6.你的表白撤不回了(转载)

    一句话概括本文 一步步Hook微信,实现微信消息防撤回. 引言 上周六下班,与往常一样,和公司同事去吃个饭,然后打个球,在支付的时候突然却意外发现我的微信号 被封了,出现了一个这样的页面(别人的截图, ...

  9. 抱歉,Xposed真的可以为所欲为——1.基础知识储备(转载)

    一句话概括本文: 本节简单介绍了什么是Xposed,基本原理,如何创建一个Xposed项目以及Xposed常用的类与方法. 引言: 前面用Python利用itchat库撸了篇: 小猪的Python学习 ...

最新文章

  1. 自学web前端的方法都有哪些?新手怎么学HTML5
  2. Python教程:with ... as 语句你懂嘛?
  3. SQL注入法攻击一日通
  4. 转——C# DataGridView控件 动态添加新行
  5. 利用Azure backup备份和恢复Azure虚拟机(1)
  6. 【端午送福】13000 人正在学习的数据分析实战课,抽奖送送送!
  7. EasyMock 常见异常
  8. aop中joinpoint_Spring AOP示例教程–方面,建议,切入点,JoinPoint,注释,XML配置...
  9. python全局变量一般没有缩进_python全局变量与局部变量
  10. laravel较优雅的分表关联查询(性能较好,SQL的数量=表的数量,涵盖了较多laravel手册推荐的方法)...
  11. 一键保存网页为PDF
  12. [iOS]手把手教你实现微信小视频
  13. Anton and Chess
  14. 顺序查找 折半查找 二叉排序树
  15. 探讨Linux CPU的上下文切换原由
  16. 如何透彻理解 Paxos 算法?
  17. Ecall测试,ITU-T P.1140 车载紧急呼叫系统语音测试
  18. 滴滴拼车变绿:下沉、烧钱、焦虑
  19. Nature Metabolism I 衰老的单细胞组学研究进展及展望
  20. Unity 相机自适应不同分辨率

热门文章

  1. MySQL数据库导入BIN格式定长文件
  2. 【算法】【华为】2019华为笔试 找终点:给定一个正整数数组,最大为100个成员,从第一个成员开始,走到数组最后一个成员最少的步骤数,
  3. oracle 月份是英文,月份单词怎么写
  4. python逻辑回归识别猫(持续更新中)
  5. CTR预估模型的进化之路
  6. 毕业设计-基于SpringBoot餐饮管理系统
  7. C语言标准输入scanf()函数
  8. zotero中文期刊论文题录中姓名被逗号分开
  9. 我的专业我的梦作文计算机,我的世界,我的梦作文500字
  10. 蓝桥_Java实用总结