+ 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값을 알아낼 수 있다.
'CTF' 카테고리의 다른 글
제 1회 서울디지텍고등학교 청소년 해킹방어대회 (0) | 2017.12.09 |
---|---|
TUCTF 2017 write up (0) | 2017.12.03 |
제 12회 정보보호올림피아드 본선후기 (20) | 2017.10.30 |
제 12회 정보보호올림피아드 예선풀이 (2) | 2017.10.30 |
ASIS CTF Final 2017 Write up (ABC Reversing challenge) (0) | 2017.09.19 |