반응형
https://dreamhack.io/wargame/challenges/1020
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 |