李维强-15级 发表于 2015-10-19 20:46:46

顾老师 趁现在APP安全不完善,我在此抛砖引玉一下

随着带协处理器和买手环的人越来越多,微信运动一下子火了,只要你在微信关注微信运动,手机就能自动记录你每天行走的步数,还可以跟朋友圈里的好友PK运动量。并且每日排名第一的用户可以占据当日排行榜的封面。这充分激起了大家的求胜的欲望,于是出现了很多励志的和悲伤的故事……
http://static.wooyun.org/drops/20150906/2015090602134969936image3.png
http://static.wooyun.org/drops/20150906/2015090602141147056image4.png
0x01微信运动作弊大法其实想要拿第一没有那么麻烦,只要会一点Android的Hook知识,就可以轻松冲到排行榜第一名。接下来我就手把手教你如何变成第一。
首先我们需要一台带协处理的root后的android机器,比如说nexus 5。然后我们装上作弊用的XPosed Hook框架和作弊插件。这两个apk可以在我的github上下载到。
https://github.com/zhengmin1989/WechatSportCheat
下载完后,先安装XPosed.apk。接着打开Xposed,选择“安装/更新”,然后根据提示重启手机。
http://static.wooyun.org/drops/20150906/2015090602141550096image5.png
重启完后,再安装xposedwechat.apk插件。然后打开Xposed的模块界面,会看到xposedwechat这个插件。我们在这里将它选中,然后再根据提示重启手机。
http://static.wooyun.org/drops/20150906/2015090602141817265image6.png
接下来就是见证奇迹的时刻…你随意走两步,然后打开微信运动,咦,怎么就多了1000步?再随便走几步,咦,怎么又多了1000步?… demo视频如下:

仅仅刷步数还是不够过瘾吧?微信运动还推出了益行家活动,可以用每天的步数换取爱心捐款。有了微信运动作弊大法,我们可以每天在家随便走几步然后换取爱心捐款(如图所示)。
http://static.wooyun.org/drops/20150906/2015090602142565803image7.png
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) throwsThrowable {XposedBridge.log(" mzhengHooked method: " +param.method); ((float[]) param.args)=((float[]) param.args)+1000*WechatStepCount;WechatStepCount+=1;…另外我们还可以使用一些传感器的接口获取一些数据的信息:
Sensor ss = ((SparseArray<Sensor>) field.get(0)).get(handle);                            XposedBridge.log("   SensorEvent: sensor=" + ss);http://static.wooyun.org/drops/20150906/2015090602143136869image8.png
比如说x就代表开机以来行走的步数,timestamp是获取步数时候的时间戳等。
另外,我们不仅在android上可以hook计步器,在iOS上也是可以通过越狱后hook iHealth的API接口达到同样的作弊效果,有兴趣的同学可以继续研究。
http://static.wooyun.org/drops/20150906/2015090602144786551image9.jpeg
http://static.wooyun.org/drops/20150906/2015090602150140215image10.png
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 参考文章
[*]Android.Hook框架xposed篇(Http流量监控)

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


顾福源 发表于 2015-10-20 19:52:32

强哥威武,
页: [1]
查看完整版本: 顾老师 趁现在APP安全不完善,我在此抛砖引玉一下