워게임/CTFlearn

[CTFlearn] The Simpsons - 암호학 / HxD / Vigenere Cipher

SecurityMan 2023. 2. 25. 11:00

 

CTFlearn의 일흔 세번째 문제

 

이번엔 Hard 난이도의 암호학 문제이다.

 

Hard 치고는 그렇게 어렵지 않다.

 

이번 문제부터 풀이수가 1,000 밑으로 떨어지기 시작했다.

 

반응형

 

 

문제에서는 ItsKrumpingTime.jpg 파일이 주어진다.

 

 

해당 파일을 먼저 HxD 로 열어보았다.

 

맨앞이 FF D8 FF E0 로 시작하는걸 볼 수 있는데

 

 

FF D8 FF E0 로 시작하는것은 JPG 파일의 특징이다.

 

 

마찬가지로 JPG 파일은 FF D9 로 끝이 난다.

 

저 뒤에 더이상 데이터가 있으면 안되지만

 

뭔가 숫자로 된 데이터가 많이 들어있는것이 보인다.

 

Ahh! Realistically the Simpsons would use octal instead of decimal!
encoded = 152 162 152 145 162 167 150 172 153 162 145 170 141 162
key = chr(SolutionToDis(110 157 167 040 155 165 143 150 040 144 151 144 040 115 141 147 147 151 145 040 157 162 151 147 151 156 141 154 154 171 040 143 157 163 164 077 040 050 104 151 166 151 144 145 144 040 142 171 040 070 054 040 164 157 040 164 150 145 040 156 145 141 162 145 163 164 040 151 156 164 145 147 145 162 054 040 141 156 144 040 164 150 145 156 040 160 154 165 163 040 146 157 165 162 051))
key = key + key + chr(ord(key)-4)
print(DecodeDat(key=key,text=encoded))

 

좀더 깔끔하게 내용을 가져와서 보면 위와 같다.

 

encoded 와 key 변수 두개가 보이는데

 

변수들에는 세자리 숫자로 된 값들이 들어있다.

 

이것들은 문제에서 언급한것처럼 Octal(8진수) 값이다.

 

 

CyberChef(https://gchq.github.io/CyberChef)에서 디코딩이 가능하다.

 

먼저 encoded 에 들어있는 값은 jrjerwhzkrexar 이고,

 

 

SolutionToDis() 안에 들어있는 값은 이런 내용이다.

 

메기가 얼마인지 물어보고, 

 

메기의 가격을 8로 나눈 뒤, 가장 가까운 정수에서 4를 더하라고 한다.

 

 

질문을 보고 이게 대체 무슨 소린가 했는데

 

그대로 검색해보니 관련된 심슨 에피소드가 있었나 보다.

 

메기의 가격은 847.63 달러이다;;

 

847.63 달러를 8로 나눈 값은 105.95375 이고,

 

가장 가까운 정수는 106, 여기에 4를 더한 값은 110이 된다.

 

그럼 SolutionToDis() 의 값은 110이 되는것이다.

 

결국 key = chr(110) 으로 정리가 되고

 

 

chr(110) 은 알파벳 소문자 n을 의미한다.

 

그다음 key = key + key + chr(ord(key)-4) 를 계산해준다.

 

key 가 n 이므로 chr(ord(key) - 4) 는 알파벳 4칸 뒤인 j 가 된다.

 

결론적으로 key 값은 nnj 가 된다.

 

다음으로 생각할 부분은

 

print(DecodeDat(key=key,text=encoded)) 인데

 

어떤 암호 알고리즘으로 암호화 되었는지 알아내야 한다.

 

암호문의 길이가 상대적으로 짧고, 정해진 길이가 있는게 아닌것처럼 보였고,

 

key 값을 쓰는것은 Vigenere 암호이다.

 

 

마찬가지로 CyberChef에서 디코딩이 가능하다.

 

암호문과 key를 넣어주면 Output에 있는 플래그를 찾을 수 있다.

반응형