手把手教你当微信运动第一名 – 利用Android Hook进行微信运动作弊

蒸米 2015-09-06 10:29:00

0x00 序


随着带协处理器和买手环的人越来越多,微信运动一下子火了,只要你在微信关注微信运动,手机就能自动记录你每天行走的步数,还可以跟朋友圈里的好友PK运动量。并且每日排名第一的用户可以占据当日排行榜的封面。这充分激起了大家的求胜的欲望,于是出现了很多励志的和悲伤的故事……

0x01微信运动作弊大法


其实想要拿第一没有那么麻烦,只要会一点Android的Hook知识,就可以轻松冲到排行榜第一名。接下来我就手把手教你如何变成第一。

首先我们需要一台带协处理的root后的android机器,比如说nexus 5。然后我们装上作弊用的XPosed Hook框架和作弊插件。这两个apk可以在我的github上下载到。

https://github.com/zhengmin1989/WechatSportCheat

下载完后,先安装XPosed.apk。接着打开Xposed,选择“安装/更新”,然后根据提示重启手机。

重启完后,再安装xposedwechat.apk插件。然后打开Xposed的模块界面,会看到xposedwechat这个插件。我们在这里将它选中,然后再根据提示重启手机。

接下来就是见证奇迹的时刻…你随意走两步,然后打开微信运动,咦,怎么就多了1000步?再随便走几步,咦,怎么又多了1000步?… demo视频如下:

仅仅刷步数还是不够过瘾吧?微信运动还推出了益行家活动,可以用每天的步数换取爱心捐款。有了微信运动作弊大法,我们可以每天在家随便走几步然后换取爱心捐款(如图所示)。

0x02 微信运动作弊原理


我们是如何作弊的呢?简单来说,当微信运动想要知道我们走了多少步的时候,微信app会询问android系统的计数传感器,随后计数传感器会返回我们行走的步数。因此,如果我们能够拦截微信运动和计数传感器之间的对话,然后伪造一个步数传递给微信运动就可以达到我们想要的作弊效果。

具体怎么做呢?首先我们可以用Xposed框架来hook计数传感器的队列函数dispatchSensorEvent(),这个函数在android.hardware.SystemSensorManager$SensorEventQueue这个类中。随后在微信运动每次询问行走步数的时候,我们先获取当前步数,然后在目前的步数的基础上加1000步,然后将信息返回给微信运动。微信运动就会误以为我们运动了1000步,从而达到了欺骗的效果。

关键代码如下:

首先hook android.hardware.SystemSensorManager$SensorEventQueue这个类的dispatchSensorEvent()函数:

final Class<?> sensorEL = findClass("android.hardware.SystemSensorManager$SensorEventQueue",lpparam.classLoader);
XposedBridge.hookAllMethods(sensorEL, "dispatchSensorEvent", new XC_MethodHook() 

接着我们在记步传感器把步数信息返回给微信运动之前,将返回的步数加上1000步:

protected void beforeHookedMethod(MethodHookParam param) throws
Throwable {
XposedBridge.log(" mzheng  Hooked method: " +  param.method);
 ((float[]) param.args[1])[0]=((float[]) param.args[1])[0]+1000*WechatStepCount;
WechatStepCount+=1;

另外我们还可以使用一些传感器的接口获取一些数据的信息:

Sensor ss = ((SparseArray<Sensor>) field.get(0)).get(handle);                            
XposedBridge.log("   SensorEvent: sensor=" + ss);

比如说x就代表开机以来行走的步数,timestamp是获取步数时候的时间戳等。

另外,我们不仅在android上可以hook计步器,在iOS上也是可以通过越狱后hook iHealth的API接口达到同样的作弊效果,有兴趣的同学可以继续研究。

0x03微信运动反作弊建议


如何防止这种作弊发生呢?我的第一个建议是加强服务器端的逻辑检测功能。比如说一个人是不可能十分钟内走一万步的,如果他做到了,那么他一定是在作弊。 我的第二个建议是增加对hook的检测功能。虽然微信运动作下弊无非就是满足一下大家争强好胜的虚荣心,并不会对大家的隐私和财产产生损失。但是既然微信运动可以被hook,同样也意味着语音聊天,微信支付等功能也是可以被hook的,当黑客利用hook技术对你的隐私和财产产生危害的时候可就不是那么好玩的事了。之前我们在Hacking Team事件中也亲眼目睹了利用hook技术来获取微信语音消息的android木马,所以一定要增加针对hook的检测才行。

0x04 总结


此文只是介绍了Android Hook的简单场景应用,关于Android Hook的原理以及更多的利用方式,比如说调试,关键API拦截,外挂等技巧,敬请期待WooYun Book系列的文章《安卓动态调试七种武器之离别钩 - Hooking》。 https://github.com/zhengmin1989/TheSevenWeapons

0x05 参考文章


  1. Android.Hook框架xposed篇(Http流量监控)

  2. 人手一份核武器 - Hacking Team 泄露(开源)资料导览手册

评论

瘦蛟舞 2015-09-06 10:54:42

哈哈,前阵子还有问我咋针对这个记步的作弊了...

路人甲 2015-09-06 11:02:57

三星s5 9008w 不兼容

夏殇 2015-09-06 11:09:04

不能愉快的玩耍了

W

winsyk 2015-09-06 11:31:14

狠。。。。。

路人甲 2015-09-06 14:11:01

#傻蛋分享#

路人甲 2015-09-06 14:22:41

微信运动是个好东西,它让人们被动的重视运动,不过也相继出现了很多广告暴走族。经过揭秘我们知道原来还有“狗流”、“电机流”等民间神技,到现在技术流也出现了。

路人甲 2015-09-06 14:26:09

iOS系统的的可以用我刚写的APP,可以直接刷任意步数 http://t.cn/RyLFsG7

J

JoyChou 2015-09-06 23:15:22

当然还有第三方和微信运动联调的数据源

phith0n 2015-09-07 02:18:05

我说那些混蛋怎么每天都走99999步

G

GixMore 2015-09-07 09:51:04

忍不住评论一下

mramydnei 2015-09-08 07:17:08

awesome

路人甲 2015-10-18 23:16:05

微信运动刷步数 100%可用 https://item.taobao.com/item.htm?spm=a1z10.3-c.w4002-86958057.12.HtfPq5&id=523146660304

路人甲 2015-12-08 09:15:31

似乎不能刷步捐款了

路人甲 2015-12-16 12:55:30

可以把1000的数字改小一点吗?比如100,500这样?

路人甲 2016-02-13 09:51:43

救命啊,魅族note刷机后,微信运动一直是0啊!

路人甲 2016-04-02 19:21:53

你好,这个插件挺好用的。使用两天后觉得占领全部好友封面实在太酷了。可是有时候这个步数实在太多,有没有考虑过改小一点,不要超过朋友太多。

M

masker 2016-04-14 20:52:47

好像已经失效了

路人甲 2016-05-13 23:15:08

好像不行了。。

蒸米

香港中文大学博士,关注iOS&android系统安全研究。

随机分类

Android 文章:89 篇
Python安全 文章:13 篇
前端安全 文章:29 篇
神器分享 文章:71 篇
无线安全 文章:27 篇

扫码关注公众号

WeChat Offical Account QRCode

最新评论

Article_kelp

因为这里的静态目录访功能应该理解为绑定在static路径下的内置路由,你需要用s

N

Nas

师傅您好!_static_url_path那 flag在当前目录下 通过原型链污

Z

zhangy

你好,为什么我也是用windows2016和win10,但是流量是smb3,加密

K

k0uaz

foniw师傅提到的setfge当在类的字段名成是age时不会自动调用。因为获取

Yukong

🐮皮

目录