워게임/CTFlearn

[CTFlearn] Hextroadinary - 암호학 / XOR

SecurityMan 2022. 8. 17. 11:00

 

CTFlearn 의 열 세번째 문제

 

이번에는 암호학 문제이다.

 

CTFlearn 에서 제공하는 문제들을 보면

 

아주아주 쉬운문제부터 아주 천천히 난이도를 올려가는거 같다.

 

조금 더 어려운 문제를 풀면서 포스팅 하고 싶은데 

 

아직까진 너무 쉬운 문제들만 나와서 좀 아쉽다.

 

이 문제역시 암호학 카테고리에 있지만 암호라고 보기엔 너무 간단하다.

 

반응형

 

문제 설명을 읽어보면

 

세계 최고의 해커가 되기 위해서는 ROXy 라는 코더를 만나야 한다고 한다.

 

ROXy는 짧은 코드의 암호를 만드는 대가라고 한다.

 

0xc4115 0x4cf8

 

그러면서 주어지는건 두 개의 16진수 값이다.

 

조금 경험이 있다면 ROXy 의 이름에서 벌써 눈치를 챘을 것이다.

 

ROXy를 거꾸로 써보면 yXOR 이되는데,

 

대문자만 읽으면 XOR, Exclusive or (배타적 논리합) 이 된다.

 

XOR은 두 명제 가운데 한 개만 참일 경우를 판단하는 논리 연산이다.

 

  • 0 XOR 0 = 0
  • 0 XOR 1 = 1
  • 1 XOR 0 = 1
  • 1 XOR 1 = 0

이렇게 둘다 0이거나 1일 경우 0이되고,

 

두 값이 1과 0으로 서로 다를경우 1이 되는 논리연산이다.

 

문제에서 주어진 16진수 값도 두 개 이므로 두값을 XOR 시켜주면 된다.

 

 

윈도우 계산기로 쉽게 계산할 수 있다.

 

C4115 와 4CF8 을 XOR 해주면

 

C0DED 라는 값이 나온다.

 

왜 그렇게 되는지 살펴보자

 

 

16진수 C4115의 각 자릿수를 2진수로 표현하면 위와 같다.

 

여기서 C는 알파벳 C가 아니라 숫자 12를 표시하는 16진수의 방식이다.

 

 C = 1100 / 4 = 0100 / 1 = 0001 / 5 = 0101 로 나타낼 수 있다.

 

 

마찬가지로 16진수 4CF8 을 2진수로 표현하면 위와 같다.

 

아까랑 똑같이 여기서도 F는 알파벳이 아니라 숫자 15를 의미한다.

 

 

C4115 와 4CF8 을 2진수로 바꾼 값을 맞춰 써준 후에,

 

각 자릿수에 있는 숫자를 비교하여

 

같으면 0, 다르면 1을 써주면 된다.

 

그렇게하면 1100 0000 1101 1110 1101 값이 나오게 되는데

 

네자리씩 끊어서 2진수를 16진수로 바꿔주면 된다.

 

1100 = C / 0000 = 0 / 1101 = D / 1110 = E / 1101 = D 로 바꿀 수 있다.

 

아까 계산기에서 본 C0DED 와 같은 값이다.

 

해당 값을 16진수 형태로 제출하면 문제가 풀리게 된다.

반응형