CTF/1337UP LIVE CTF 2022

[Clear]1337UP LIVE CTF Warmup Encoder Writeup

Vardy 2022. 3. 14. 06:50

주어진 파일은 아래와 같다.

# ENCRYPT.py

from sympy import isprime, prime

flag = '<REDACTED>'

def Ord(flag):
    x0r([ord(i) for i in flag])
    
def x0r(listt):
    ff = []
    for i in listt:
        if isprime(i) == True:
            ff.append(prime(i) ^ 0x1337)
        else:
            ff.append(i ^ 0x1337)
    b1n(ff)

def b1n(listt):
    ff = []
    for i in listt:
        ff.append(int(bin(i)[2:]))
    print(ff)
    
if __name__ == "__main__":
    Ord(flag)

'''
 OUTPUT :
[1001100000110, 1001100000100, 1001100000100, 1001100000000, 1001101100010, 1001101100111, 1001101001100, 1001101001111, 1001100000111, 1001101000101, 1001101101000, 1001100000011, 1001101011001, 1001101110011, 1001101101000, 1001101110101, 1001101011110, 1001101011001, 1001100000011, 1001011001010, 1001101100101, 1001101001110, 1001101101000, 1001101110010, 1001101011001, 1001001111100, 1001100000111, 1001101010011, 1001100000100, 1001101000101, 1001101101000, 1001100000011, 1001101000101, 1001100000100, 1001101101000, 1001101000011, 1001101111111, 1001100000100, 1001101101000, 1001101100000, 1001100000100, 1001100000011, 1000101111100, 1001100000100, 1001111000110, 1001101000011, 1001101101000, 1001100001111, 1001100000111, 1001100000000, 1001100001110, 1001100000111, 1001100000000, 1001111000110, 1001100000001, 1001101001010]
'''

 

isprime() 함수는 소수여부를 판단하는 함수이고, prime(n) 함수는 n번째 소수를 찾는 함수임을 참고하여 아래와같이 역연산 코드를 작성하였다.

# ex.py

from sympy import isprime, prime
import sympy
import math

flag = '1337UP{testflag}'

def Ord(flag):
    x0r([ord(i) for i in flag])
    
def x0r(listt):
    print("[*] ord(i) = ")
    print(listt)
    ff = []
    for i in listt:
        print("[*] i = "+str(i))
        if isprime(i) == True:
            print("[*] before prime(i) = "+str(i))
            print("[*] after prime(i) = "+str(prime(i)))
            ff.append(prime(i) ^ 0x1337)
        else:
            ff.append(i ^ 0x1337)
    print("[*] ff = ")
    print(ff)
    b1n(ff)

def b1n(listt):
    ff = []
    for i in listt:
        ff.append(int(bin(i)[2:]))
    print(ff)
    for i in range(len(ff)) :
        rollback = "0b"+str(ff[i])
        print(int(rollback,2))
        print((ff[i]))
        print(rollback)
        print(type(ff[i]))

def x0r_decypt(listt) :
    ff = []
    for i in listt :
        ff.append(i ^ 0x1337)
    return ff
    
if __name__ == "__main__":
    Ord(flag)
    OUTPUT = [1001100000110, 1001100000100, 1001100000100, 1001100000000, 1001101100010, 1001101100111, 1001101001100, 1001101001111, 1001100000111, 1001101000101, 1001101101000, 1001100000011, 1001101011001, 1001101110011, 1001101101000, 1001101110101, 1001101011110, 1001101011001, 1001100000011, 1001011001010, 1001101100101, 1001101001110, 1001101101000, 1001101110010, 1001101011001, 1001001111100, 1001100000111, 1001101010011, 1001100000100, 1001101000101, 1001101101000, 1001100000011, 1001101000101, 1001100000100, 1001101101000, 1001101000011, 1001101111111, 1001100000100, 1001101101000, 1001101100000, 1001100000100, 1001100000011, 1000101111100, 1001100000100, 1001111000110, 1001101000011, 1001101101000, 1001100001111, 1001100000111, 1001100000000, 1001100001110, 1001100000111, 1001100000000, 1001111000110, 1001100000001, 1001101001010]
    OUTPUT_int = []
    for i in range(len(OUTPUT)) :
        rollback = "0b"+str(OUTPUT[i])
        a = int(rollback,2)
        print(a)
        print(type(a))
        OUTPUT_int.append(a)
    print(OUTPUT_int)
    OUTPUT_int_xor = []
    OUTPUT_int_xor = x0r_decypt(OUTPUT_int)
    print(OUTPUT_int_xor)
    
    primes = list(sympy.primerange(0, 1000))
    
    realflag = ''
    
    for i in range(len(OUTPUT_int_xor)) :
        if isprime(OUTPUT_int_xor[i]) == False :
            realflag += chr(OUTPUT_int_xor[i])
        else :
            print(OUTPUT_int_xor[i])
            for j in range(1,168) :
                if prime(j) == OUTPUT_int_xor[i] :
                    realflag += chr(j)
    print(realflag)

 

 

FLAG = 1337UP{x0r_4nD_Bin4aRy_EnC0d3r_4r3_tH3_W34k35t_80790756}

반응형