暑期CTF练习——第四周

攻防世界reverse进阶区notsequence

其实这题在我做完逆向题目最基本的操作后就卡死了,数学渣渣在此膜拜杨辉,没看到wp之前实在想不到这是个验证杨辉三角的算法……

查壳,找main函数之类的都省略吧,我们看到main函数生成的伪代码
在这里插入图片描述
可以看到有两个check,执行完后判断个什么20次再转换MD5即可得到flag

先看下这两个check上的函数吧

sub_80486CD
在这里插入图片描述
这个是验证杨辉三角的某条定理:第n行数字的和为2^(n-1)

第14行就是表示验证2^v5==v3

sub_8048783
在这里插入图片描述
这是杨辉三角的另外一个特征:斜线上数字的和等于其向左(从左上方到右下方的斜线)或向右拐弯(从右上方到左下方的斜线),拐角上的数字。1+1=2,1+1+1=3,1+1+1+1=4,1+2=3,1+2+3=6,1+2+3+4=10,1+3=4,1+3+6=10,1+4=5。

之前看到了20,可知这个三角形输入了20行数

Python:(借鉴了https://www.cnblogs.com/DirWang/p/11461903.html

def triangles():
    N=[1]
    while True:
        yield N
        N.append(0)
        N=[N[i-1] + N[i] for i in range(len(N))]
n=0
x=''
for t in triangles():
    # print(t)
    x+=''.join(map(str,t))
    n=n+1
    if n == 20:
        break
import hashlib
m=hashlib.md5(x.encode()).hexdigest()
# print(x)
print('RCTF{'+m+'}')

flag是:RCTF{37894beff1c632010dd6d524aa9604db}

猜你喜欢

转载自blog.csdn.net/AlienEowynWan/article/details/107722018