题目直接给了cxx的原码。这个库说是google上能搜到,位在不知道叫什么的情况下基本也是搜不到。
结合自己理解来吧。程序里有3种不同的结构
- I-------I 这个一开始理解成 I - --(--I) 这样5个减号就得2(I -(I-2))后来看不是这样理解的得2没问题,他理解成一条线段。通过--运算得2
- 第2种构如果知道第1种是线段就好办了,它是平面.A就是算出面积长*宽,第2段就是高3宽5得3*5
- 第3种就是立方体,.V就是算体积 如第4段的 5*3*4
if (p[3]+p[5] != pow((I-------I).A,2) * (I-----I)+(I---I)) error(); // (3*3) ** 2 * 2 + 1 == 163
if (p[3]+p[4] != pow((o-----------o
| !
! !
! !
o-----------o).A,2)+(I---I)) error(); // (5*3) ** 2 + 1 == 226
if (p[4]*p[5] != (pow((o-------------o
| !
! !
! !
o-------------o).A,2)-(I---I))*(I-----I)*pow(I-------I,2)) error(); // ((6*3) ** 2 - 1)*2* 3**2 = 5814
if (p[7]+p[8] != (o-----------o
|L \
| L \
| L \
| o-----------o|! // x=5,y=3,z=4
o | ! // 5*3*4 * 2**2 - (3*2)**2 +1 == 205
L | !
L | !
L| !
o-----------o).V*pow(I-----I,2) - pow((o-------o // x=3,y=2
| !
! !
o-------o).A,2) + (I---I)) error();
有了这个就可以把12个式子算出来了,再通过一个简单爆破得到13个字符
#0-2
flag = ''
for i in range(0x20, 0x7f):
for j in range(0x20, 0x7f):
for k in range(0x20, 0x7f):
if i+j == 101 and j+k==143 and i*k==5035:
flag += chr(i)+chr(j)+chr(k)
print('['+chr(i)+chr(j)+chr(k) + ']')
#50_
#3-5
for i in range(0x20, 0x7f):
for j in range(0x20, 0x7f):
for k in range(0x20, 0x7f):
if i+j == 226 and i+k==163 and j*k==5814:
flag += chr(i)+chr(j)+chr(k)
print('['+chr(i)+chr(j)+chr(k) + ']')
#pr3
for i in range(0x20, 0x7f):
for j in range(0x20, 0x7f):
for k in range(0x20, 0x7f):
if j+k == 205 and i+k==173 and i*j==9744:
flag += chr(i)+chr(j)+chr(k)
print('['+chr(i)+chr(j)+chr(k) + ']')
#Tty
for i in range(0x20, 0x7f):
for j in range(0x20, 0x7f):
for k in range(0x20, 0x7f):
if i+j*k == 5375 and j+i*k==4670 and i+j==205:
flag += chr(i)+chr(j)+chr(k)
print('['+chr(i)+chr(j)+chr(k) + ']')
#_n0
flag +='w'
print(flag)
#50_pr3TtY_n0w
#50_pr3TtYn_0 提交内容
坑:网站上的flag不仅位数少了,而且后一段的字符顺序算错了。只有提交错的才对。