학회_공부해요/워게임

[Dreamhack] Write up - likeb64

yenas0 2024. 2. 27. 14:46
반응형

https://dreamhack.io/wargame/challenges/1020

 

likeb64

Description 드림이가 base64를 공부하고 자신만의 암호를 만들었어요. 다음 주어진 암호문에서 플래그를 구해보세요! IREHWYJZMEcGCODGMMbTENDDGcbGEMJZGEbGEZTFGYaGKNRTMIcGIMBSGRQTSNDDGAaWGYZRHEbGCNRQMUaDOMbEMRTGEYJYGUaWGOJQM

dreamhack.io


IREHWYJZMEcGCODGMMbTENDDGcbGEMJZGEbGEZTFGYaGKNRTMIcGIMBSGRQTSNDDGAaWGYZRHEbGCNRQMUaDOMbEMRTGEYJYGUaWGOJQMYZHa===

 

이 암호문에서 플래그를 구하라는데,,

문제이름이 likeb64이니 아마 base64랑 비슷한 방식일 것 같다.

 

먼저 base64로 디코딩 해보았다.

!YY0G0YF(S0 RHQFP1F81XFP1G

 

이상한거.. 나옴

 

 

hint: ABCDEFGHIJKLMNOPQRSTUVWXYZabcdef

이게 힌트라는데 a~z까지 대문자주고 a~f까지 소문자로 줬다.

 

32글자? base32 디코딩하는건가

안됨

 

 

좀 더 찾아봤는데,, 원래 base64는 6bit씩 연산한다고 한다.

base32가 안되니까 5bit씩 연산하는건가 싶어서 C언어로 코드를 새로 짜봤다..

 

#define _CRT_SECURE_NO_WARNINGS
#include <stdio.h>

char base64chars[] = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/";

int base64_decode(char c) {
    if (c >= 'A' && c <= 'Z')
        return c - 'A';
    if (c >= 'a' && c <= 'z')
        return c - 'a' + 26;
    if (c >= '0' && c <= '9')
        return c - '0' + 52;
    if (c == '+')
        return 62;
    if (c == '/')
        return 63;
    return -1;
}

void decode_base64(const char* input) {
    unsigned int bit_buffer = 0;
    int bit_count = 0;

    while (*input) {
        char c = *input++;

        int value = base64_decode(c);
        if (value == -1) continue;

        bit_buffer = (bit_buffer << 5) | value;
        bit_count += 5;

        while (bit_count >= 8) {
            bit_count -= 8;
            putchar((bit_buffer >> bit_count) & 0xFF);
        }
    }
}

int main() {
    char* base64_string = "IREHWYJZMEcGCODGMMbTENDDGcbGEMJZGEbGEZTFGYaGKNRTMIcGIMBSGRQTSNDDGAaWGYZRHEbGCNRQMUaDOMbEMRTGEYJYGUaWGOJQMYZHa===";
    decode_base64(base64_string);
    return 0;
}

사실 내가 짰다기 보다는 지피티한테 base64 디코딩 달라한 다음에 비트만 5로 수정했다.

 

 

실행시키니까 flag가 출력되었다.

반응형

'학회_공부해요 > 워게임' 카테고리의 다른 글

[H4CGM] Write up - Paint  (0) 2024.03.19
[H4CGM] Write up - Hello, Postman  (1) 2024.03.19
[Dreamhack] Write up - whatsdifferent  (1) 2024.02.26
[Dreamhack] Write up - Type c-j  (0) 2024.02.06
[Dreamhack] Write up - simple-operation  (0) 2024.02.06