羊城杯 2020 Bytecode

羊城杯 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版权协议,转载请附上原文出处链接和本声明。