CTF/MISC

[rgbCTF] A Basic Challenge - MISC / Encoding

SecurityMan 2022. 9. 4. 11:00

 

빵점 방지용 간단한 문제

 

말 그대로 basic challenge 수준이다.

 

반응형

 

 

문제파일로 basic_chall.txt 파일이 주어진다.

 

110100 1100100 100000 110101 110100 100000 110101 111001 100000 110111 111001 100000 110100 111001 100000 110100 110100 100000 110100 110101 100000 110011 110000 100000 110100 1100101 100000 110111 111001 100000 110100 110001 100000 110111 111000 100000 110100 1100101 100000 110100 110100 100000 110100 111001 100000 110110 110111 100000 110100 1100100 100000 110101 110100 100000 110100 110001 100000 110111 1100001 100000 110100 111001 100000 110100 110100 100000 110100 110101 100000 110111 111001 100000 110100 1100101 100000 110100 110011 100000 110100 110001 100000 110111 111000 100000 110100 1100100 100000 110100 110100 100000 110101 111001 100000 110110 110111 100000 110100 1100100 100000 110101 110100 100000 110110 110011 100000 110111 1100001 100000 110100 111001 100000 110100 110100 100000 110100 110101 100000 110011 110000 100000 110100 1100100 100000 110111 111001 100000 110100 110001 100000 110011 110010 100000 110100 1100100 100000 110100 110011 100000 110100 110001 100000 110111 111000 100000 110100 1100101 100000 110101 110100 100000 110101 111001 100000 110110 110111 100000 110100 1100100 100000 110101 110100 100000 110101 110001 100000 110011 110011 100000 110100 111001 100000 110100 110100 100000 110100 110101 100000 110011 110010 100000 110100 1100100 100000 110110 111001 100000 110100 110001 100000 110011 110010 100000 110100 1100101 100000 110100 110011 100000 110100 110001 100000 110111 111000 100000 110100 1100101 100000 110110 1100001 100000 110101 110001 100000 110110 110111 100000 110100 1100100 100000 110101 110100 100000 110101 111001 100000 110111 1100001 100000 110100 111001 100000 110100 110100 100000 110100 110101 100000 110111 1100001 100000 110100 1100101 100000 110111 111001 100000 110100 110001 100000 110011 110010 100000 110100 1100100 100000 110100 110011 100000 110100 110001 100000 110111 111000 100000 110100 1100101 100000 110101 110100 100000 110101 111001 100000 110110 110111 100000 110100 1100100 100000 110101 110100 100000 110100 1100100 100000 110011 110011 100000 110100 111001 100000 110100 110100 100000 110100 110101 100000 110011 110000 100000 110100 1100100 100000 110110 111001 100000 110100 110001 100000 110011 110010 100000 110100 1100100 100000 110111 111001 100000 110100 110001 100000 110111 111000 100000 110100 1100101 100000 110101 110100 100000 110100 110101 100000 110110 110111 100000 110100 1100100 100000 110101 110100 100000 110101 110101 100000 110011 110010 100000 110100 111001 100000 110100 110100 100000 110100 110101 100000 110011 110000 100000 110100 1100101 100000 110111 111001 100000 110100 110001 100000 110111 111000 100000 110100 1100100 100000 110111 1100001 100000 110110 110011 100000 110110 110111 100000 110100 1100100 100000 110101 110100 100000 110100 110001 100000 110111 111001 100000 110100 111001 100000 110100 110100 100000 110101 111001 100000 110011 110000 100000 110100 111001 100000 110100 110100 100000 110100 110101 100000 110111 111001 100000 110100 1100100 100000 110111 111001 100000 110100 110001 100000 110111 111000 100000 110100 1100100 100000 110101 110100 100000 110100 110101 100000 110110 110111 100000 110100 1100100 100000 110101 110100 100000 110100 110001 100000 110111 1100001 100000 110100 111001 100000 110100 110100 100000 110100 110101 100000 110011 110011 100000 110100 1100101 100000 110101 110001 100000 110011 1100100 100000 110011 1100100

 

txt 파일을 열어보면 이렇게 0과 1로된 문자열이 길게 늘어져있는걸 볼 수 있다.

 

이런 인코딩과 관련된 문제는 온라인 도구를 이용해 쉽게 풀 수 있다.

 

 

CyberChef(https://gchq.github.io/CyberChef) 를 이용해 디코딩을 시도해봤다.

 

오른쪽 아래 Output 을 보면 글자가 상당히 깨져보이는데

 

From Binary 를 선택할경우 byte length 를 기본으로 8로 받지만,

 

주어진 txt 파일에 있는 값들은 길이가 6 또는 7이기 때문이다.

 

모든 값의 길이가 6 이었다면 byte length 만 조절해주면되는데,

 

byte length가 통일되지 않았기에 정제작업이 사전에 필요하다.

 

f = open('bin.txt','r').read()

tmp = f.split(' ')

for i in range(len(tmp)):
    if len(tmp[i])==6:
        tmp[i] = '00' + tmp[i]
    if len(tmp[i])==7:
        tmp[i] = '0' + tmp[i]

print(tmp)

 

정제작업은 python 을 이용해 쉽게 할 수 있다.

 

파일을 읽어서 스페이스바를 기준으로 split 해주고

 

길이가 6일경우 맨 앞에 00을 붙이고, 길이가 7인 경우에는 맨 앞에 0을 붙여주었다.

 

 

코드를 실행시키면 이렇게 예쁘게 8자리 코드로 만들어준다.

 

 

다시한번 CybefChef에서 From Binary 를 선택하면

 

이번에는 깔끔하게 Output이 잘 나온다.

 

생긴것을 보니 hex 값인거 같다.

 

 

다시한번 From Hex 를 이용해 디코딩해주었다.

 

그랬더니 이번엔 알수없는 알파벳들이 나왔는데

 

맨 뒤에 == 이 오는것을 보니 Base64 인코딩을 사용한 것이다.

 

 

Base64 디코딩을 해주면

 

이렇게 두~세자리 숫자로 이루어진 값들이 나온다.

 

보통 이렇게 생긴 값은 Octal 값이다.

 

 

마지막으로 From Octal 을 이용해 디코딩해주면

 

플래그를 찾을 수 있다.

반응형