
https://dreamhack.io/lecture/courses/35
Welcome Hackers👨💻
시스템 해킹에 입문하려는 분들을 위한 강의
dreamhack.io
기본적인 시스템 공부를 시작하려면 C언어와 파이썬에 대한 기초 지식이 필요하다ㅏㅏ!!
지금 밑에 있는 코드를 보고 "Welcome Hackers :)"가 출력 되는 입력값은 찾는다면
당신은 컴퓨터의 깊고 깊은 심연을 들여다 볼 준비가 되었다는 뜻이다! ㅎㅎ (과연!?!?)

관문은 총 2개로 준비되어 있다!!
#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;
}
먼저 C언어 이다.
16진수 sz 만큼 buf에 동적할당 해주고 buf에 fgets로 값을 저장하면 된다!
문제는 strncmp 하는 함수인데 우리가 입력한 buf와 DreamHack 이라는 문자열을 비교하고 있다.
strncmp 함수란?
int strcmp(const char* str1, const char* str2)
int strncmp(const char* str1, const char* str2, size_t n);
(1) str1 < str2 인 경우에는 음수 반환
(2) str1 > str2 인 경우에는 양수 반환
(3) str1 == str2 인 경우에는 0을 반환 합니다.
그러므로 buf값에 DreamHack값을 입력하면 Welcome Hacker를 출력할 수 있다!!

마지막은 파이썬이다!
#!/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 :/")
answer와 quiz가 같으면 welcome Hacker를 출력할 수 있다!
16진수 0x30과 10진수 quiz 배열 안에 있는 값과 비트 연산자인 ^ (XOR) 연산을 한 뒤 다시 quiz 배열에 다시 저장하고 있습니다.
마지막으으로 chr(_) for _ in quiz 이부분이 조금 어려울 수 있는데 quiz 배열에 있는 아스키 코드를 문자열로 변환하는 코드 입니다.
quiz가 뭐가 나올까여????
손으로 XOR 하고 아스키 코드로 직접 바꿔야 할까요?????

그냥 컴퓨터 시키죠 저 녀석이 저보다 똑똑한데 코드를 조금 추가 했습니다


오
답은 DreamHack이었어요
그럼 그대로 입력
성공!
!!
'시스템 해킹 > DreamHack으로 해커를 꿈꾸며' 카테고리의 다른 글
| [DreamHack] basic_exploitation_000 (Stack Buffer Overflow) (0) | 2023.02.21 |
|---|---|
| [DreamHack] Return Address Overwrite (0) | 2023.02.20 |
| [DreamHack] 함수 호출 규약 (Caller, Callee, cdecl, SYSV) (1) | 2023.02.18 |
| [DreamHack] objdump, nasm 사용법 및 shellcode 추출 (0) | 2023.02.17 |
| [DreamHack] Exploit Tech: Shellcode (ORW, EXECVE) (0) | 2023.02.16 |