当前位置:WooYun >> 漏洞信息

漏洞概要 关注数(24) 关注此漏洞

缺陷编号:wooyun-2012-04488

漏洞标题:腾讯3366小游戏站算法被破解

相关厂商:腾讯

漏洞作者: only_guest

提交时间:2012-02-14 04:04

修复时间:2012-03-30 04:05

公开时间:2012-03-30 04:05

漏洞类型:设计缺陷/逻辑错误

危害等级:高

自评Rank:20

漏洞状态:厂商已经确认

漏洞来源: http://www.wooyun.org,如有疑问或需要帮助请联系 [email protected]

Tags标签:

4人收藏 收藏
分享漏洞:


漏洞详情

披露状态:

2012-02-14: 细节已通知厂商并且等待厂商处理中
2012-02-14: 厂商已经确认,细节仅向厂商公开
2012-02-24: 细节向核心白帽子及相关领域专家公开
2012-03-05: 细节向普通白帽子公开
2012-03-15: 细节向实习白帽子公开
2012-03-30: 细节向公众公开

简要描述:

对于这样一个网站来说.积分算法被破解.就等于可以随意修改自己的分数.严重程度可想而知.

详细说明:

某日和我家程序员一起出差去做一个项目.然后夜里俩人打赌,谁先破解出来3366的算法,输的人第二天就要请胜利者足疗.于是乎便有了下面的故事.最终的结果是我家伟大的程序员取得了整场比赛的胜利!恭喜她,她就是verkey!!!!!
好,下面我来分析下整个算法的破解过程.
我在3366.com上选取了一款玩的人最多的积分游戏.
名字叫做彩色砖块,由于我水平太差,第一盘只得了31分,如下图


1.对上图数据抓包得到以下内容
qzversion=0&platform=1&key=bgvbapy1c89f901d0cdf89334b994e429c0100992e3b90692abe6fadd&submit=true&uin=2443199410&score=31&act=set&pid=1000132
可以看到分数为31分,key值为bgvbapy1c89f901d0cdf89334b994e429c0100992e3b90692abe6fadd
2.去掉这个key值的后48位
得到bgvbapy1c
3、剩余key值的第一位:
如果是a,则从第2位开始计算。
如果是b,则从第3位开始计算。
....依次类推。
对应如下:
a-2
b-3
c-4
d-5
e-6
f-7
.....
该key的第一位为b,所以从第3位开始计算,第3位为v.
3、计算剩余key的长度,按照如下对应关系,取有效计算范围。
如剩余key值长度为9,那么取1位计算。
如剩余key值长度为10,那么取2位计算。
如剩余key值长度为11,那么取3位计算。
如剩余key值长度为12,那么取4位计算。
.....
剩余的key值的长度为9,那么从第3位"v"开始,取1位,即"v"。
4、计算"v"的值,怎么计算呢?
其实分数的算法为36进制,0-9,a-z等36个数字字符构成如下对应关系:
0-0
1-1
2-2
3-3
4-4
5-5
6-6
7-7
8-8
9-9
a-10
b-11
c-12
d-13
e-14
f-15
g-16
h-17
i-18
j-19
k-20
l-21
m-22
n-23
o-24
p-25
q-26
r-27
s-28
t-29
u-30
v-31
w-32
x-33
y-34
z-35
.....
从z之后,再往下推,可得到:
10 36
11 37
12 38
13 39
14 40
15 41
16 42
17 43
18 44
19 45
1a 46
1b 47
1c 48
1d 49
1e 50
1f 51
1g 52
1h 53
1i 54
1j 55
1k 56
1l 57
1m 58
1n 59
1o 60
1p 61
1q 62
1r 63
1s 64
1t 65
1u 66
1v 67
1w 68
1x 69
1y 70
1z 71
由上得知v等于31
那么更大一点的数字呢?
比如说"1a"这样的值呢?
这样推导太麻烦,怎么用公式进行计算呢?
其实很简单,看如下示例:
1a=1*36+a=36+10=46
再看几个例子相信你就会推导了:
9位长度的key:
ad5x7lsyb 1d79f349cc25551adff77cbdf5768509acf99812b656119c
计算:d=13
c1imrwe0d 36443325bec5f7f4f1b0b56b04804bee90f25ecf931c2c08
计算:m=22
10位长度的key:
a3dfcfdqvc 36443325bec5f7f4f1b0b56b04804bee90f25ecf931c2c08
计算:3d=3*36+d=108+13=121
b53h20htmd c829da8e21bc82ea9b964a6094bb7d92f9f7f50aa04e5fc7
计算:3h=3*36+h=108+17=125
11位长度的key:
b38p4nvtb6e eec693296a4a49131ed70461f5e354f2018f6cf5ccb8957e
计算:8p4=((8*36)+p)*36+4=313*36+4=11272
a9662iq0u4d eec693296a4a49131ed70461f5e354f2018f6cf5ccb8957e
计算:966=((9*36)+6)*36+6=(324+6)*36+6=11880+6=11886
依次类推。。。。
截断.修改数据包就可以改你的游戏分数了.
但是貌似key的长度不能变.
破解算法无恶意,只做研究.发出来大家学习下.
另外确实想要几只腾讯的新版公仔了...之前送的那只被领导收留了...

漏洞证明:


http://www.3366.com/game/1000190.shtml
弹粉笔
欢迎挑战

修复方案:

修改得分机制吧.再复杂一点.

版权声明:转载请注明来源 only_guest@乌云


漏洞回应

厂商回应:

危害等级:中

漏洞Rank:10

确认时间:2012-02-14 21:12

厂商回复:

thx

最新状态:

暂无