HackCTF : Cryptography, Smooth CipherText, Classic Cipher
Sunrin/Layer7

HackCTF : Cryptography, Smooth CipherText, Classic Cipher

Cryptography

 

더보기

단순히 변환기만 돌리긴 좀 그래서 할 수 있는데까진 직접 코드를 작성했다.


1. Great Binary

파일을 열면 2진수 같아 보이는 숫자가 8bit씩 나열되어있다.

01001000 01100001 01100011 01101011 01000011 01010100 01000110 01111011 01100011 01110010 01111001 01110000 01110100 01101111 01011111 01110110 00110010 01110010 01111001 01011111 01100101 01100001 01110011 01111001 01011111 01110000 01110010 00110000 01100010 00110001 01100101 01101101 01111101

처음엔 확실하지가 않아서 앞에 두 글자만 10진수로 바꾼다음 아스키코드문자가 무엇인지 확인했다.

 

01001000(2)는 72(10)과 같았고 문자는 H,

01100001(2)는 97(10)로 문자는 a였다.

 

Ha를 보니 2진수를 문자로 출력하는 코드를 작성한다음에 돌리면 문장이 나올 것 같았다.

숫자를 배열에 넣고 반복문을 돌려서 문자로 출력했다.

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
#include <stdio.h>
 
int main() {
    int num[33= { 0b010010000b011000010b011000110b011010110b010000110b01010100
                    0b010001100b011110110b011000110b011100100b011110010b01110000
                    0b011101000b011011110b010111110b011101100b001100100b01110010
                    0b011110010b010111110b011001010b011000010b011100110b01111001
                    0b010111110b011100000b011100100b001100000b011000100b00110001
                    0b011001010b011011010b01111101 };
    for(int i = 0; i<33; i++){
        printf("%c",num[i]);
    }
 
    return 0;
}
cs

 

 

2. Smooth CipherText


Rijvsmysmysmy Itovwyrc! Ns wyy ixsu Glm kq G? wc lkqc sw qwsmdlkkr sr...M ixsu fipi acvp urer iss geld! Md iss mel niastfov rrmq mvwzxmqvyw, cme gyx kcd xfo gmbvcmx yxwuov. qy, jjkk gc LymoADJ{t_tzwi_3vxbd0p3_vff.afy'q_wzoxpq_dp_qfz}

 

맨 마지막 LymoADJ{...}이 플래그 형식인 것을 보니 치환 암호인 것 같았다.

먼저 카이사르인줄 알고 시도해봤다.

코드 중 주요부분

 

이런식으로 알파벳 철자를 한칸 한칸씩 옮겨가면서 10번정도 돌려봤는데

딱히 플래그처럼 보이는 문자열은 안 나왔다.

 

 

비즈네르 암호를 찾아보았다.

ko.wikipedia.org/wiki/%EB%B9%84%EC%A6%88%EB%84%A4%EB%A5%B4_%EC%95%94%ED%98%B8

위와 같은 비즈네르 표를 이용하는데 한줄 내려갈 때마다 한 칸씩 오른쪽으로 이동한다.

 

비즈네르는 카이사르의 확장개념인데 둘의 차이를 비교하자면

카이사르를 한 쪽으로 같은 간격으로 밀기만 한다면 비즈네르는 값마다 다른 간격으로 값을 변경한다.

 

비즈네르를 이용해서 값을 변환하면

 

hackctf{v_jvyy_3rzrz0r3_lbh.qba'g_sbetrg_zr_gbb} 가 나온다.

 

중괄호 안에 있는 문자열이 아직 덜 풀린 것 같아서 한번 더 돌려보았더니 결과적으로

i_will_3emem0e3_you.don't_forget_me_too가 나왔다.

 

 

3. Classic Cipher


zip파일 압축 해제 후 안에 있는 txt파일을 vi로 파일을 열어보았다.

Ciphter.txt
hint

저 힌트가 알파벳을 한 칸씩 뒤로 밀라는 뜻인 것 같아서

일단 첫번째 _ 전까지만 뒤로 밀어봤다.

 

?y4zl4J -> ?x4yk4I

 

뭔가 아닌 것 같다.

 

vi 명령으로 ::-1 했을 때 5번줄에 있던 커서가 4번줄로 가는 것을 보고

아예 알파벳 위치가 한 칸씩 뒤로 이동하는 건가 싶어서 문자의 배열을 바꿔보았다.

 

1
2
3
4
5
6
7
8
9
10
11
12
#include <stdio.h>
 
int main() {
    char cipher[] = "?y4zl4J_d0ur_b0f_0K zp nhsm";
    int length = sizeof(cipher);
 
    for (int i = length - 1; i >= 0; i--)
        printf("%c", cipher[i]);
 
 
    return 0;
}
cs

 

의문문처럼 보이는 문자열이 되었다.

 mshn pz K0_f0b_ru0d_J4lz4y?

 

이 다음에는 2번 문제에서 썼던 코드를 다시 가져와 카이사르 암호로 풀어봤다.

10번을 복호화했더니 flag is D0_y0u_kn0w_c4es4r? 이 나왔다.

 

'Sunrin > Layer7' 카테고리의 다른 글

[HackCTF] Basic BOF #1 #2  (0) 2021.01.30
HackCTF Sysrop  (0) 2020.11.27
컨테이너와 도커  (0) 2020.09.16
객체지향 프로그래밍 (Object-Oriented Programming)  (0) 2020.09.09
Stack pivoting  (0) 2020.09.08