본문 바로가기

CTF

화이트해커리그 예선 write up


화이트해커리그 예선 write up.docx


+ MISC 1


[MISC 1_solve.py]

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
= open("C:/test\enc/flag.enc""rb")
string = f.read()
f.close()
 
data1 = []
data2 = []
data3 = []
flag = ''
 
en_data = string.encode('hex')
 
for i in range(len(en_data)):
    if i % == 0:
        data1.append(int(en_data[i], 16))
    elif (i - 1) % == 0:
        data2.append(int((en_data[i] + en_data[i + 1]), 16))
    elif (i + 1) % == 0:
        data3.append(int(en_data[i], 16))
 
for i in range(0, (len(en_data) / 4)):
    for j in range(0256):
        if (j // data1[i]) == data2[i] and (j % data1[i]) == data3[i]:
            flag += chr(j)
            break
 
 
out = open("C:/test\enc/flag.png""wb")
out.write(flag)
out.close()
 
cs

해당 misc 문제는 flag.png 파일을 random 값을 이용해 hex암호화를 진행하는데 역으로 분석해 정상 png 파일 hex를 알아내면 된다.

지금 코드는 brute force를 이용해 값을 추출해냈지만 지금 생각해 보니 랜덤값 * 몫 + 나머지 를 통해 정상 hex값을 알아낼 수 있다.