时间:2021-05-20
前言:Zygote 是 Android 的核心,每打开一个 app,Zygote 就会 fork 一个虚拟机实例来运行 app,基于Xposed我们可以使用android hook技术对APK中的方法进行调试、关键API拦截、外挂等。
这篇文章建立在Xposed模块开发的基础之上,没有开发过Xposed模块的请先看这篇入门教程《Xposed模块开发入门教程》
一、微信运动修改步数原理
当点击微信运动排行榜的时候微信APP会获取手机上计数传感器的数值,然后传感器会返回我们行走的步数。此时我们使用Xposed框架来hook计数传感器的队列函数dispatchSensorEvent(),该函数在Android.hardware.SystemSensorManager$SensorEventQueue这个类中。当询问传感器的时候我们在数值上加上相应步数返回给微信运动达到欺骗效果。
二、开发Xposed模块
1.新建一个类WeixinSport,具体代码如下
package com.example.administrator.weixinsport; import static de.robv.android.xposed.XposedHelpers.findClass; import java.lang.reflect.Field; import android.hardware.Sensor; import android.util.SparseArray; import de.robv.android.xposed.IXposedHookLoadPackage; import de.robv.android.xposed.XC_MethodHook; import de.robv.android.xposed.XposedBridge; import de.robv.android.xposed.callbacks.XC_LoadPackage; /** * Created by Administrator on 2016/5/11. */ public class WeixinSport implements IXposedHookLoadPackage { private static int stepCount = 1; @Override public void handleLoadPackage(XC_LoadPackage.LoadPackageParam loadPackageParam) throws Throwable { // filter if (!loadPackageParam.packageName.equals("com.tencent.mm")) { return; } final Class<?> sensorEL = findClass("android.hardware.SystemSensorManager$SensorEventQueue", loadPackageParam.classLoader); XposedBridge.hookAllMethods(sensorEL, "dispatchSensorEvent", new XC_MethodHook() { @Override protected void beforeHookedMethod(MethodHookParam param) throws Throwable { ((float[]) param.args[1])[0] = ((float[]) param.args[1])[0] + 1168 * stepCount; stepCount++; Field field = param.thisObject.getClass().getEnclosingClass().getDeclaredField("sHandleToSensor"); field.setAccessible(true); int handle = (Integer) param.args[0]; Sensor sensor = ((SparseArray<Sensor>) field.get(0)).get(handle); XposedBridge.log("sensor = " + sensor); } }); } }这段代码中我们首先通过equals("com.tencent.mm")过滤出了来自微信的请求:
if (!loadPackageParam.packageName.equals("com.tencent.mm")) { return; }然后hook了android.hardware.SystemSensorManager$SensorEventQueue这个类中的dispatchSensorEvent()函数:
final Class<?> sensorEL = findClass("android.hardware.SystemSensorManager$SensorEventQueue", loadPackageParam.classLoader); XposedBridge.hookAllMethods(sensorEL, "dispatchSensorEvent", new XC_MethodHook()在计数传感器将步数返回微信运动之前修改步数,加上了1168步:
((float[]) param.args[1])[0] = ((float[]) param.args[1])[0] + 1168 * stepCount; stepCount++;为了便于调试,将传感器的一些数据打印了出来:
int handle = (Integer) param.args[0]; Sensor sensor = ((SparseArray<Sensor>) field.get(0)).get(handle); XposedBridge.log("sensor = " + sensor);2.修改xposed_init
com.example.administrator.weixinsport.WeixinSport将xposed_init的入口设定为该WeixinSport类。
注:该类中的代码参考了乌云上蒸米大神的文章,该文章地址:http://drops.wooyun.org/tips/8416
三、测试
将该APK安装重启后打开微信运动,行走几步后再点击排行榜,发现步数增加了1168。
以上所述是小编给大家介绍的Android基于Xposed修改微信运动步数实例,希望对大家有所帮助,如果大家有任何疑问请给我留言,小编会及时回复大家的。在此也非常感谢大家对网站的支持!
声明:本页内容来源网络,仅供用户参考;我单位不保证亦不表示资料全面及准确无误,也不保证亦不表示这些资料为最新信息,如因任何原因,本网内容或者用户因倚赖本网内容造成任何损失或损害,我单位将不会负任何法律责任。如涉及版权问题,请提交至online#300.cn邮箱联系删除。
微信运动怎么计算步数?微信运动计算步数原理是什么?你是不是在微信上经常看微信好友的微信运动步数嗮图哦,您自己的也可以做到哦。微信运动怎么计算步数的?下边是小
微信运动怎么开启?微信运动在哪?微信开启了微信运动功能以后,微信就会每天计算您的运动步数了,而且在晚上的时候,会把您的运动步数和别人的步数进行比较哦,那么微
微信运动1步等于多少米?微信运动步数等于实际距离多少?微信运动是可以来计算步数的,那么微信运动每步多少米?以下是小编对微信运动1步等于多少米的回答了,如果您
现在很流行微信运动步数点赞,但是有些朋友可能遇到,自己的微信步数不能显示的情况,究竟微信运动为什么监控不了步数?微信不显示步数怎么办?遇到这种情况的朋友,也
微信开启了微信运动功能以后,微信就会每天计算您的运动步数了,而且在晚上的时候,会把您的运动步数和别人的步数进行比较哦,但是如果你不喜欢别人看到怎么办?下面小