CTFlearn의 예순번째 문제
전혀 Hard 하지 않은 Hard 난이도의 암호학 문제이다.
반응형
문제 설명이 좀 친절하지 않았다면 어려울 수 있는 문제인데
문제 설명이 너무 친절하다..
심볼로 메세지를 숨기는 방법을 아냐면서 예를 들어주는데
!@#$%^&*( 같은경우 123456789 와 각각 매칭이 된다고 한다.
이것 그냥 키보드 숫자키를 의미하는 것이다.
^&,*$,&),!@#,*#,!!^,(&,!!$,(%,$^,(%,*&,(&,!!$,!!%,(%,$^,(%,&),!!!,!!$,(%,$^,(%,&^,!)%,!)@,!)!,!@%
문제에서 주어진 이 암호문을
키보드 숫자키에 맞춰서 숫자로 바꾸면
무언가 의미있는 데이터가 나올 것이다.
양이 그렇기 길지 않아서 그냥 수작업으로 일일이 바꿔도 되지만
파이썬 코드를 작성해서 바꿔본다.
cipher = '^&,*$,&),!@#,*#,!!^,(&,!!$,(%,$^,(%,*&,(&,!!$,!!%,(%,$^,(%,&),!!!,!!$,(%,$^,(%,&^,!)%,!)@,!)!,!@%'
output = ''
for i in range(len(cipher)):
if cipher[i] == '!':
output += '1'
elif cipher[i] == '@':
output += '2'
elif cipher[i] == '#':
output += '3'
elif cipher[i] == '$':
output += '4'
elif cipher[i] == '%':
output += '5'
elif cipher[i] == '^':
output += '6'
elif cipher[i] == '&':
output += '7'
elif cipher[i] == '*':
output += '8'
elif cipher[i] == '(':
output += '9'
elif cipher[i] == ')':
output += '0'
elif cipher[i] == ',':
output += ','
print(output)
코드로 이렇게 작성할 수 있다.
코드 쓰는 시간이랑 일일이 수작업 해서 바꾸는시간이랑 얼추 비슷할 것 같다.
문제에서 제공된 암호문의 기호를 처음부터 읽어서
조건문을 이용해 해당하는 숫자로 바꿔주는 것이다.
결과를 출력하면 이런 데이터가 나온다.
숫자범위가 대략 ASCII 코드의 알파벳 대소문자 범위인듯 하다.
arr = output.split(',')
for i in range(len(arr)):
print(chr(int(arr[i])),end='')
위에 쓴 코드 맨 아랫 부분에 이렇게 코드를 추가하면
ASCII 코드를 영어 대소문자로 바꿀 수 있다.
코드를 실행시키면 플래그를 찾을 수 있다.
반응형
'워게임 > CTFlearn' 카테고리의 다른 글
[CTFlearn] abandoned place - 포렌식 / HxD (62) | 2023.01.27 |
---|---|
[CTFlearn] The adventures of Boris Ivanov. Part 1. - 포렌식 / Stereogram (68) | 2023.01.25 |
[CTFlearn] Ambush Mission - MISC / Stegsolve (52) | 2023.01.21 |
[CTFlearn] Blank Page - 포렌식 / Unicode / HxD (56) | 2023.01.18 |
[CTFlearn] Tone dialing - 암호학 / DTMF (80) | 2023.01.16 |