首页
社区
课程
招聘
[原创]微信打飞机变无敌,详细分析
发表于: 2013-8-11 11:13 32793

[原创]微信打飞机变无敌,详细分析

2013-8-11 11:13
32793
坛友neite给出了个插件(http://bbs.pediy.com/showthread.php?p=1208300#post1208300),可以很方便的调成无敌模式以及取消,但是没有讲诉技术细节,花点时间用IDA看了下,发现还是挺容易实现的,和大家分享下分析过程,希望能帮到和我一样的菜鸟们。
纯属技术交流,切勿用于非法用途,否则后果自负。

打飞机游戏中,击落敌方战机或者死亡等都会有音乐效果,微信程序目录下有很多音乐文件,如图:


因为要实现无敌功能,我们就从game_over.mp3文件下手吧,这个就是游戏结束时候的音效,我们要分析下看什么情况会走到这个流程里进来,并且想办法修改跳转,让game永不over.

打开IDA的字符串索引窗口,搜索到game_over.mp3字符串


双击跳到字符串所在地址,连续两次查看交叉索引,可以看到这个字符串在一个叫killPlayer的函数被引用了。







发现killPlayer这个函数里面没什么判断,一进来就肯定game over了,所以继续查找对这个函数的引用,可以发现这个函数会被collisionDetection函数调用:


很明显,collisionDetection函数就是判断是否撞机了,如果撞机就killPlayer。在这个函数里,可以看到一个很明显的跳转,如果跳转成功,就会结束游戏,否则继续:



猜测NOP掉0B2A63E处的跳转皆可实现无敌,于是用DBG验证。
启动微信,查找微信进程号,GDB 附加

root# ps ax | grep MicroM
27017 ?? Ss 0:11.52 /var/mobile/Applications/C7119A9B-18E3-44C8-ACA7-FB31C0CC3F30/MicroMessenger.app/MicroMessenger

root# gdb -p 27017


然后NOP掉跳转指令(4字节),并确认。(我用的是pp助手下的微信,貌似PIE标志位已经被清除,基址固定,不需要进行偏移转换,否则需要用info sh指令查看MicroMessenger的加载地址,加上偏移,算出内存真实地址)

(gdb) set *(unsigned int*)0x00b2a63e = 0x46c046c0
(gdb) disassem 0x0B2A63E 0x0B2A63E+10
Dump of assembler code from 0xb2a63e to 0xb2a648:
0x00b2a63e <_ZNKSt8_Rb_treeISsSt4pairIKSsSsESt10_Select1stIS2_ESt4lessISsESaIS2_EE4findERS1_+171566>: nop (mov r8, r8)
0x00b2a640 <_ZNKSt8_Rb_treeISsSt4pairIKSsSsESt10_Select1stIS2_ESt4lessISsESaIS2_EE4findERS1_+171568>: nop (mov r8, r8)
0x00b2a642 <_ZNKSt8_Rb_treeISsSt4pairIKSsSsESt10_Select1stIS2_ESt4lessISsESaIS2_EE4findERS1_+171570>: b.n 0xb2a83c <_ZNKSt8_Rb_treeISsSt4pairIKSsSsESt10_Select1stIS2_ESt4lessISsESaIS2_EE4findERS1_+172076>
0x00b2a644 <_ZNKSt8_Rb_treeISsSt4pairIKSsSsESt10_Select1stIS2_ESt4lessISsESaIS2_EE4findERS1_+171572>: add r0, sp, #80
0x00b2a646 <_ZNKSt8_Rb_treeISsSt4pairIKSsSsESt10_Select1stIS2_ESt4lessISsESaIS2_EE4findERS1_+171574>: str r4, [sp, #56]
End of assembler dump.


然后输入命令c并回车,继续运行微信,去玩打飞机游戏,发现已经无敌了。
有个问题就是不死貌似就不能上传积分。。所以想死的时候就gdb断下,把跳转指令恢复即可。

[培训]内核驱动高级班,冲击BAT一流互联网大厂工作,每周日13:00-18:00直播授课

上传的附件:
收藏
免费 6
支持
分享
最新回复 (29)
雪    币: 78
活跃值: (15)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
2
拜师学打飞机
2013-8-11 11:25
1
雪    币: 2323
活跃值: (4113)
能力值: ( LV12,RANK:530 )
在线值:
发帖
回帖
粉丝
3
不错,学习,不知道用到cocos2d引擎没?改天有时间也用Hopper看看
2013-8-11 12:01
0
雪    币: 223
活跃值: (516)
能力值: ( LV13,RANK:520 )
在线值:
发帖
回帖
粉丝
4
你这种方法,需要越狱才行的.
2013-8-11 14:07
0
雪    币: 5855
活跃值: (438)
能力值: ( LV4,RANK:45 )
在线值:
发帖
回帖
粉丝
5
请教不越狱刷分方法,莫非是直接伪造分数数据提交?
2013-8-11 14:37
0
雪    币: 223
活跃值: (516)
能力值: ( LV13,RANK:520 )
在线值:
发帖
回帖
粉丝
6
之前我打飞机没有排第一,这两天手打的,在好友里面排名第一了,150W+的分.  
我正准备尝试无越狱刷分.
不过最近太忙.还没有时间深入研究.
我的思路就如你所说的, 不过不是伪造,只是改包.
2013-8-11 14:47
0
雪    币: 93
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
7
我来回复下吧,打飞机的插件我也有写,而且还是附加了改色子改猜拳的,方法就如上面所讲
楼上所说的改包什么的就不用试了,肯定是不行的,服务器会记录你的开始时间,对应算法获取一个合理的数值范围,超过这个范围都将不记录在内。
2013-8-12 13:15
0
雪    币: 5855
活跃值: (438)
能力值: ( LV4,RANK:45 )
在线值:
发帖
回帖
粉丝
8
难怪我找到设置分数的地方,直接修改分数,界面显示成功了,但是没提交。。
如果封包没加密,或者加密很简单,在数据包发出去之前修改,就不会碰到分数是否合理的检测了。如果开始结束时间也发给服务器,那这两个一起改了就是
2013-8-12 13:40
0
雪    币: 223
活跃值: (516)
能力值: ( LV13,RANK:520 )
在线值:
发帖
回帖
粉丝
9
不知你们修改包 是在IPHONE里面修改的? 还是在windows或者linux上修改的? 还是在模拟器之类的平台上修改的?
2013-8-12 15:23
0
雪    币: 2166
活跃值: (11)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
10
如果你想不越狱操作,应该没法在iphone上修改吧。
2013-8-12 18:44
0
雪    币: 5855
活跃值: (438)
能力值: ( LV4,RANK:45 )
在线值:
发帖
回帖
粉丝
11
没改过封包。。如果不是https,哪里改都方便吧
2013-8-12 18:51
0
雪    币: 223
活跃值: (516)
能力值: ( LV13,RANK:520 )
在线值:
发帖
回帖
粉丝
12
应该还是有办法改的吧?
2013-8-12 22:33
0
雪    币: 223
活跃值: (516)
能力值: ( LV13,RANK:520 )
在线值:
发帖
回帖
粉丝
13
https 用 MITM attack也都一样吧.
2013-8-12 22:34
0
雪    币: 5855
活跃值: (438)
能力值: ( LV4,RANK:45 )
在线值:
发帖
回帖
粉丝
14
那就不算是iphone上改了
不过我对MITM也不了解,没用过
2013-8-13 10:32
0
雪    币: 223
活跃值: (516)
能力值: ( LV13,RANK:520 )
在线值:
发帖
回帖
粉丝
15
用IPHONE访问WEB.通过WEB来处理packet也算是在IP上处理了吧?
2013-8-13 11:00
0
雪    币: 93
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
16
自然是不行的,服务器肯定校验本地时间,根本无法修改你所谓的时间,不要想得这么简单
2013-8-13 11:12
0
雪    币: 93
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
17
还有如果你仔细观察会发现服务器分2次收取时间,然后比对服务器时间,你怎么可能超过它的服务器时间呢。所以算法会控制分数在合理范围内。
2013-8-13 11:15
0
雪    币: 466
活跃值: (1372)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
18
一群牛人啦。。
2013-8-18 23:29
0
雪    币: 20
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
19
厉害,支持一下
2013-8-23 08:22
0
雪    币: 261
活跃值: (83)
能力值: ( LV3,RANK:20 )
在线值:
发帖
回帖
粉丝
20
可否详细分享一下?
2013-9-2 21:18
0
雪    币: 261
活跃值: (83)
能力值: ( LV3,RANK:20 )
在线值:
发帖
回帖
粉丝
21
1、在linux上如何进行这一系列的操作?
2、貌似除了win就只有mac平台可以安装调试环境了吧?
3、如果“1”可以,那么有没有相关的环境搭建教程? for linux的
4、难道是在linux上用virtualbox虚拟一个MAC??
2013-9-2 21:20
0
雪    币: 13
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
22
很犀利,学习之
2013-9-3 10:33
0
雪    币: 5855
活跃值: (438)
能力值: ( LV4,RANK:45 )
在线值:
发帖
回帖
粉丝
23
有linux版IDA,静态分析不是问题。
调试的话直接用iphone上的gdb调试就可以了,ssh到手机就好了,linux完全可以
2013-9-3 14:18
0
雪    币: 218
活跃值: (17)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
24
搞不懂 不知道怎么搞。
2013-9-3 17:28
0
雪    币: 2166
活跃值: (11)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
25
这样还真得算是在ip上处理了
<竟然找不到赞的表情>
2013-11-22 11:03
0
游客
登录 | 注册 方可回帖
返回
//