重庆分公司,新征程启航
为企业提供网站建设、域名注册、服务器等服务
Android应用中怎么利用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) 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) 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修改微信运动步数的方法了吗?如果还想学到更多技能或想了解更多相关内容,欢迎关注创新互联行业资讯频道,感谢各位的阅读!