Cryptography(암호학) 부분의 가장 첫번째 문제이다.
문제를 풀어보기에 앞서 Binary Code (이진코드)가 뭔지 간단히 설명하겠다.
Binary Code는 간단히 2진수로만 이루어진 데이터를 의미힌다.
예를 들어 riemannk를 Binary Code로 나타내보겠다.
먼저 riemannk의 ASCII Code는 114 105 101 109 097 110 110 107 (10진수) 이다.
※ ASCII Code : 문자를 숫자로 표현하는 규칙 ko.wikipedia.org/wiki/ASCII
이제 해당 ASCII Code를 Binary Code로 바꾸어보면
1110010 1101001 1100101 1101101 1100001 1101110 1101110 1101011
r i e m a n n k 가 된다.
이제 문제를 클릭해보면
위와 같이 다운받을 수 있는 zip파일이 나오고
위 파일을 압축해제시키면 아래와 같이 2진수들이 나온다.
위의 2진수들을 잘 살펴보면 8bit 간격으로 떨어져 있는 것을 확인해 볼 수 있다.
그러니 저 8bit를 기준으로 2진수를 분리하면 된다는 것을 유추할 수 있고,
해당 2진수들을 각각 8진수, 10진수, 16진수로 바꾸어 보면 (프로그래밍 언어를 사용하면 쉽게 할 수 있다.)
8진수 :
110 141 143 153 103 124 106 173 143 162 171 160 164 157 137 166 62 162 171 137 145 141 163 171 137 160 162 60 142 61 145 155 175
10진수 :
72 97 99 107 67 84 70 123 99 114 121 112 116 111 95 118 50 114 121 95 101 97 115 121 95 112 114 48 98 49 101 109 125
16진수 :
48 61 63 6b 43 54 46 7b 63 72 79 70 74 6f 5f 76 32 72 79 5f 65 61 73 79 5f 70 72 30 62 31 65 6d 7d
그리고 이를 ASCII코드로 변환해보면
8진수 :
HackCTF{crypto_v2ry_easy_pr0b1em}
10진수 :
HackCTF{crypto_v2ry_easy_pr0b1em}
16진수 :
HackCTF{crypto_v2ry_easy_pr0b1em}
즉, 답은 HackCTF{crypto_v2ry_easy_pr0b1em}이다.
ctf.j0n9hyun.xyz/challenges#Great%20Binary
HackCTF
Do you wanna be a God? If so, Challenge!
ctf.j0n9hyun.xyz
C언어 변환 코드
// 이 코드는 C언어로 작성했습니다.
#include <stdio.h>
int main()
{
int arr[33][8] = { {0,1,0,0,1,0,0,0}, {0,1,1,0,0,0,0,1}, {0,1,1,0,0,0,1,1},
{0,1,1,0,1,0,1,1}, {0,1,0,0,0,0,1,1}, {0,1,0,1,0,1,0,0},
{0,1,0,0,0,1,1,0}, {0,1,1,1,1,0,1,1}, {0,1,1,0,0,0,1,1},
{0,1,1,1,0,0,1,0}, {0,1,1,1,1,0,0,1}, {0,1,1,1,0,0,0,0},
{0,1,1,1,0,1,0,0}, {0,1,1,0,1,1,1,1}, {0,1,0,1,1,1,1,1},
{0,1,1,1,0,1,1,0}, {0,0,1,1,0,0,1,0}, {0,1,1,1,0,0,1,0},
{0,1,1,1,1,0,0,1}, {0,1,0,1,1,1,1,1}, {0,1,1,0,0,1,0,1},
{0,1,1,0,0,0,0,1}, {0,1,1,1,0,0,1,1}, {0,1,1,1,1,0,0,1},
{0,1,0,1,1,1,1,1}, {0,1,1,1,0,0,0,0}, {0,1,1,1,0,0,1,0},
{0,0,1,1,0,0,0,0}, {0,1,1,0,0,0,1,0}, {0,0,1,1,0,0,0,1},
{0,1,1,0,0,1,0,1}, {0,1,1,0,1,1,0,1}, {0,1,1,1,1,1,0,1} };
int dec = 0;
int units;
int i, j;
for (i = 0; i < 33; ++i)
{
dec = 0;
units = 0;
for (j = 7; j >= 0; --j)
{
if (arr[i][j] == 1) dec += 1 << units;
++units;
}
//printf("%o ", dec); // 8진수
printf("%d ", dec); // 10진수
//printf("%x ", dec); // 16진수
}
return 0;
}
배열부분이 예쁘게 안나와서 사진으로 다시 올립니다.
'Layer7 > CTF & Wargame' 카테고리의 다른 글
Write-Up: [고등해커3][Web] Cookie (0) | 2020.12.19 |
---|---|
Write-Up: [HackCTF][Web] Hidden (0) | 2020.11.06 |
Write-Up: [HackCTF][Forensics] Question? (0) | 2020.11.06 |
Write-Up: [HackCTF][Forensics] So easy? (0) | 2020.11.06 |
Write-Up: [HackCTF][Web] Login (0) | 2020.11.06 |