zoukankan      html  css  js  c++  java
  • X-CTF(REVERSE高级) notsequence

    代码逻辑:

    用户输入string,通过两个检查函数sub_80486CD和sub_8048783,如图

    sub_80486CD:

    i循环,i[0]=0,i[1]=1,i[2]=3,i[3]=6........i[n]=v5*(v5+1)/2   

    j循环,a1是用户输入string的首地址,所以循环结果是v3累加string[i]到string[i+j]的值

    j最终循环的v3值要等于2^v5

    其实这像数据的金字塔,随着i越大j循环的次数越多,每层要加的数据也变多了,从之后的代码可以知道v5的长度为20,也就是说20次累加每层的数据相加都等于2^v5。

    i=0:                             string[0] = 2^0

    i=1:                       string[1] + string[2] = 2^1

    i=3:                string[3] + string[4] + string[5] =2^2

                                                 ......

    i=190:   string[19] + string[20] + string[21]+...+string[39] = 2^19

    sub_8048783:

    传入用户输入string和a2=v5=20

    while循环v4的值等于前v6层(包括v6)首位string之和

    if判断,i比v6多1而且if结束v3又加了1所以(4 * (v3 * (v3 + 1) / 2 + i) + a1)指的是下一层首位右边那个string的值

    也就是说金字塔斜边的前i层首位和等于i层第二位string

                       string[0]                                                       string[0]=1

                 string[1] . string[2]                                             string[0]+string[1]=string[2]

           string[3] . string[4] . string[5]                                   string[0]+string[1]+string[3]=string[4]

        string[6] . string[7] . string[8] . string[9]

                          ......                                                            

    string[19] . string[20] . string[21]. ... . string[39]            string[0]+string[1]+...+string[19]=string[20]


    写出解密代码:

    后面补充在想....

    代码直接想不出来,根据已知等式,算出string[0]=1、string[1]=1、string[2]=1、string[3]=1、、string[4]=2、string[5]=1、string[7]=3

                       string[0]                                                                  1

                 string[1] . string[2]                                                    1        1

           string[3] . string[4] . string[5]                                      1        2       1

        string[6] . string[7] . string[8] . string[9]                             3

                          ......                                                            

    根据结构大胆猜测斜边都是1,这样下一层的第二个数字才不会太大让v3超出2^v5,所以string[6]=1、string[8]=3、string[9]=1,黄色部分不能瞎猜,陷入瓶颈...

    百度,是杨辉三角???

    百度百科里已有杨辉三角的各种代码,值得注意的是在杨辉三角13条判定定理里逆向代码只给了我们两条,单靠逆向代码是写不出来的,要知道这是杨辉三角才能得到所有数字

    附代码:

     1     import hashlib
     2 
     3     LL = [[1]]
     4 
     5     for i in range(1,20):
     6 
     7               LL.append([(0 if j== 0 else LL[i-1][j-1])+ (0 if j ==len(LL[i-1]) else LL[i-1][j]) for j in range(i+1)])
     8 
     9     #上面的是百度百科里有的代码
    10 
    11     s=''
    12 
    13     for i in range(20):
    14 
    15               for j in range(len(LL[i])):
    16 
    17                         s=s+str(LL[i][j])
    18 
    19     print(s+"
    ")
    20 
    21     out = hashlib.md5(s.encode()).hexdigest()
    22 
    23     print("md5加密后:"+"RCTF{"+out+"}")
  • 相关阅读:
    数列变形中隐含条件的指向作用
    有效挖掘题目中的隐含条件[高阶辅导]
    三角模板函数使用示例
    【Machine Learning in Action --2】K-近邻算法构造手写识别系统
    【Machine Learning in Action --2】K-近邻算法改进约会网站的配对效果
    Python使用os.listdir()函数来获得目录中的内容
    【python问题系列--1】SyntaxError:Non-ASCII character 'xe5' in file kNN.py on line 2, but no encoding declared;
    【Python爬虫实战--1】深入理解urllib;urllib2;requests
    Centos7下安装numpy+matplotlib+scipy
    【Machine Learning in Action --1】机器学习入门指南
  • 原文地址:https://www.cnblogs.com/blackicelisa/p/12263669.html
Copyright © 2011-2022 走看看