Dreamhack/Dreamhack Wargame (Challenge)

[29] IT 비전공자 [dreamhack] littlevsbig (misc)문제 풀기

imaginefuture-1 2024. 10. 8. 08:11

 

 

 

안녕하세요! 28번째 문제네요! 오늘은 좀 특별한 날입니다 tmi긴한데

제 생일이거든요!! 하하

 

생일 기념 문제 맛있게 풀어볼게요~~

 

문제 코드 확인 하러 가보자구~~

 

// Name: chall.c
// Compile Option: gcc chall.c -o chall -fno-stack-protector

#include <stdio.h>
#include <stdlib.h>
#include <signal.h>
#include <unistd.h>
#include <string.h>
#include <fcntl.h>

#define FLAG_SIZE 0x45

void alarm_handler() {
    puts("TIME OUT");
    exit(-1);
}

void initialize() {
    setvbuf(stdin, NULL, _IONBF, 0);
    setvbuf(stdout, NULL, _IONBF, 0);

    signal(SIGALRM, alarm_handler);
    alarm(30);
}


int main(int argc, char *argv[]) {
    int fd;
    char *flag;

    initialize();

    // read flag
    flag = (char *)malloc(FLAG_SIZE);
    fd = open("./flag", O_RDONLY);
    read(fd, flag, FLAG_SIZE);
    close(fd);

    printf("Input: ");

    unsigned char arr[9];
    scanf("%8s", arr);
    printf("arr  | 0x%x  0x%x  0x%x  0x%x  0x%x  0x%x  0x%x  0x%x |\n", arr[0], arr[1], arr[2], arr[3], arr[4], arr[5], arr[6], arr[7]);

    unsigned int * int_arr = (unsigned int *)arr;

    printf("arr  | 0x%x  0x%x |\n", int_arr[0], int_arr[1]);

    if(int_arr[0] == 0x64726d68 && int_arr[1] == 0x636b3a29){
        puts("Nice!");
        puts(flag);
    }
    else{
        puts("No...");
    }

    return 0;
}

지피티는 신의 영역이 맞다.

 

int main(int argc, char *argv[]) {
    int fd;
    char *flag;

    initialize();

    // read flag
    flag = (char *)malloc(FLAG_SIZE);
    fd = open("./flag", O_RDONLY);
    read(fd, flag, FLAG_SIZE);
    close(fd);

    printf("Input: ");

    unsigned char arr[9];
    scanf("%8s", arr);
    printf("arr  | 0x%x  0x%x  0x%x  0x%x  0x%x  0x%x  0x%x  0x%x |\n", arr[0], arr[1], arr[2], arr[3], arr[4], arr[5], arr[6], arr[7]);

    unsigned int * int_arr = (unsigned int *)arr;

    printf("arr  | 0x%x  0x%x |\n", int_arr[0], int_arr[1]);

    if(int_arr[0] == 0x64726d68 && int_arr[1] == 0x636b3a29){
        puts("Nice!");
        puts(flag);
    }
    else{
        puts("No...");
    }

    return 0;
}

 

한번 지피티 말이 맞는지 확인해보자

 

 

 

 

 

drmhck:)확인

 

입력해보자

 

 

에?

 

문제 풀이 블로그를 확인하니 이건 리틀엔디안이라했다

https://hxxxxng.tistory.com/43

 

[Dreamhack] littlevsbig (misc)

문제 설명우분투 터미에서 드림핵 포트번호 입력하고 접속했다.그럼 Input을 입력하라는 줄이 출력되는데, 거기에 사용자가 input 값을 넣으면 해당 문자열을 16진수로 출력한다.이렇게...아마 알

hxxxxng.tistory.com

 

 

 

https://softtone-someday.tistory.com/20

 

[개념정리] 빅엔디안(Big Endian)과 리틀엔디안(Little Endian)

통신을 하다 보면 통신 패킷이 반대로 나갈 때가 있습니다. 예를 들면 1 2 3 4를 보냈는데 막상 받는 쪽에서 들어온 패킷은 4 3 2 1인 거죠 이는 컴퓨터 CPU의 데이터를 저장하는 순서에서 발생하는

softtone-someday.tistory.com

https://anythingcafe.tistory.com/3

 

리틀 엔디언과 빅 엔디언의 차이 (Little-endian, Big-endian)

엔디언이란? 엔디언(Endianness)은 컴퓨터의 메모리와 같은 1차원의 공간에 여러 개의 연속된 대상을 배열하는 방법을 뜻하며, 바이트를 배열하는 방법을 특히 바이트 순서(Byte order)라고 한다. 엔디

anythingcafe.tistory.com

 

하하

 

근데 little endian이랑 bid endian 어떻게 구분함..

 

64 72 6d 68 어.. 작은수로 배열이 안되어있는데... 뭔가 이상한데..

 

 

알려준 코드 실행했는데 오류뜸..

하!!!!

 

어렵다어려워..