zoukankan      html  css  js  c++  java
  • 腾讯3366小游戏站算法被破解

    简要描述:

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

    详细说明:

    某日和我家程序员一起出差去做一个项目.然后夜里俩人打赌,谁先破解出来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.wooyun.org/bugs/wooyun-2010-04488

    更多安全文章:http://edu.pkav.net/#subject

  • 相关阅读:
    浅谈 facebook .net sdk 应用
    数据库中各种字符串的截取函数
    初、中、高级测试工程师面试题汇总(附答案)
    包管理器 scoop
    ModuleNotFoundError: No module named 'pymouse'解决办法
    Python 正则表达式(分组)
    7个Python实战项目代码,让你分分钟晋级大神!
    经典SQL查询题目
    linux中软件的安装和卸载方法
    测试常用工具
  • 原文地址:https://www.cnblogs.com/milantgh/p/3645689.html
Copyright © 2011-2022 走看看