CTF
화이트해커리그 예선 write up
Gyeongje
2017. 11. 17. 22:10
+ 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 | f = 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 % 4 == 0: data1.append(int(en_data[i], 16)) elif (i - 1) % 4 == 0: data2.append(int((en_data[i] + en_data[i + 1]), 16)) elif (i + 1) % 4 == 0: data3.append(int(en_data[i], 16)) for i in range(0, (len(en_data) / 4)): for j in range(0, 256): 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값을 알아낼 수 있다.