[System Hacking][DreamHack][Stage1] Welcome Hackers

marceline·2023년 3월 26일
0

[System Hacking]

목록 보기
2/17

Introduce

아래 C로 작성된 코드를 읽고, "Welcome Hackers:)" 가 출력되는 입력값을 찾아라.

#include <stdio.h>
#include <stdlib.h>
#include <string.h>

int main() {
  int sz = 0x30;
  char *buf = (char *)malloc(sizeof(char) * sz);

  puts("Hello World!");
  printf("Education + Hack = ?\n");
  fgets(buf, sz, stdin);

  if (!strncmp(buf, "DreamHack", 9))
    printf("Welcome Hackers :)\n");
  else
    printf("No No :/\n");

  return 0;
}
#!/usr/bin/python3

quiz = [116, 66, 85, 81, 93, 120, 81, 83, 91]

for i in range(len(quiz)):
    quiz[i] ^= 0x30

quiz = ''.join([chr(_) for _ in quiz])
answer = input()

if answer == quiz:
    print("Welcome Hackers :)")
else:
    print("No No :/")

puts();

문자열 출력 함수

puts("string");

result : string

fgets();

문자열 읽기 함수
현재 stream 위치에서 어느것이 먼저 오건 첫 번째 줄 바꾸기 문자(\n) 까지, 스트림의 끝까지 또는 읽은 문자 수가 n-1 과 같을때 까지 문자를 읽는다.

fgets(buf, sz, stdin);

stdin : 표준 입력을 의미하는 변수
-> 표준입력을 통해서도 문자열 받을 수 있음
즉, 상단의 코드는 buf에 입력받은 string 을 저장하고, sz 크기로 출력한다.

strcmp(string1, string2);

문자열 비교함수
string1 과 string2 를 비교한다.

strncmp(string1, string2, n);

문자열 비교함수
string1 과 string2 를 비교하되, 매개변수로 받은 n 의 길이 까지만 비교한다.

따라서

if(!strncmp(buf, "Dreamhack", 9));
	printf("Welcome Hackers :)\\n");

에서 "Welcome Hackers:)" 가 반환되도록 하기 위해서는 if 문에서 0이 반환이 되어야하고, buf 의 문자열과 "Dreamhack" 의 문자열이 길이 '9' 만큼 같은지 검사 후, 0이 반환되도록 해야하므로 입력값은 "Dreamhack" 이어야만 "Welcome Hackers:)" 가 반환된다.

0개의 댓글