羊城杯 2020 Bytecode
恢复的代码块
def test():
en = [3,37,72,9,6,132]
output = [101,96,23,68,112,42,107,62,96,53,176,179,98,53,67,29,41,120,60,106,51,101,178,189,101,48]
print(b'welcome to GWHT2020')
flag = 'GWHT{fc2a8bb7f347a6f8a05c5c69f3aeff73}'
str = flag
a = len(str)
if a < 38:
print('lenth wrong!')
exit(0)
else:
if ((((ord(str[0])*2020 + ord(str[1]))*2020 + ord(str[2]))*2020 + ord(str[3]))*2020 + ord(str[4]) == 1182843538814603):
print('good!continue\xe2\x80\xa6\xe2\x80\xa6')
else:
print('bye~')
exit(0)
x = []
k = 5
for i in range(13):
b = ord(str[k])
c = ord(str[k+1])
a11 = en^c[i%6]
a22 = en^b[i%6]
x.append(a11)
x.append(a22)
k += 2
if (x == output):
print('good!continue\xe2\x80\xa6\xe2\x80\xa6')
else:
print('oh,you are wrong!')
exit(0)
l = len(str)
a1 = ord(str[l-7])
a2 = ord(str[l-6])
a3 = ord(str[l-5])
a4 = ord(str[l-4])
a5 = ord(str[l-3])
a6 = ord(str[l-2])
if (a1*3 + a2*2 + a3*5 == 1003):
if (a1*4 + a2*7 + a3*9 == 2013):
if (a1 + a2*8 + a3*2 == 1109):
if (a4*3 + a5*8 + a6*5 == 671):
if (a4*4 + a5*7 + a6*9 == 1252):
if (a4 + a5*8 + a6*2 == 644):
print('congraduation!you get the right flag!')
return
test()```
主要逆向脚本
```python
output = [101,96,23,68,112,42,107,62,96,53,176,179,98,53,67,29,41,120,60,106,51,101,178,189,101,48]
output1 =[]
output2 =[]
for i in range(0,len(output)):
if (i%2 ==0):
output1.append(output[i])
else:
output2.append(output[i])
#print output1,output2
en = [3,37,72,9,6,132]
input1 =[]
input2 =[]
inputx = []
for i in range(13):
for x in range(32,256):
a11 = en[i%6] ^x
if a11 == output1[i]:
input1.append(x)
break
for i in range(13):
for x in range(32,256):
a11 = en[i%6] ^x
if a11 == output2[i]:
input2.append(x)
break
for i in range(13):
inputx.append(input2[i])
inputx.append(input1[i])
for i in inputx:
print chr(i),
版权声明:本文为pondzhang原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接和本声明。