攻防世界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}