워게임/CTFlearn

[CTFlearn] Symbolic Decimals - 암호학 / Python

SecurityMan 2023. 1. 23. 11:00

 

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 코드를 영어 대소문자로 바꿀 수 있다.

 

 

코드를 실행시키면 플래그를 찾을 수 있다.

반응형