Dreamhack 31

시스템 해킹 Stage 2

컴퓨터 구조와 명령어 집합 구조 컴퓨터 구조(Computer Architecture) 컴퓨터의 기본 설계. 서로 다른 부품들이 이 설계에 맞춰서 개발되고 조립되어 컴퓨터가 완성됨. 컴퓨터가 효율적으로 작동할 수 있도록 하드웨어 및 소프트웨어의 기능을 고안하고, 구성하는 방법. 명령어 집합구조(Instruction Set Architecture, ISA) CPU가 사용하는 명령어와 관련된 설계 CPU의 하드웨어적 설계 = 마이크로 아키텍처(Micro Architecture) -> 정의된 명령어 집합을 효율적으로 처리할 수 있도록, CPU의 회로를 설계하는 분야. 인텔 x86-64 아키텍처 = 가장 널리 사용되는 ISA 중 하나. - 기능 구조의 설계 폰 노이만 구조 하버드 구조 수정된 하버드 구조 - 명령..

Dreamhack 2022.07.18

시스템 해킹 Stage 1

Welcome Hacekers :) 라는 문장이 출력되도록하는 입력값을 찾아보라는 작은 퀴즈가 있었다. 일단 c코드는 입력값을 받아서 buf에 저장하고, 이를 DreamHack과 9글자 비교해서 같으면 Welcome Hackers :)를 출력하는 것 같다. 파이썬 코드는 리스트에 있는 숫자들을 16진수 30과 xor 연산을 하는 것 같은데 그럼 저 리스트에 있는 숫자 하나하나가 Welcome Hackers :) 라는 문장이 나오게 하는 조건을 만족시키는 문자열인 것으로 생각했다. 근데 사실 파이썬 코드를 제대로 이해하지는 못했다. 일단 C코드랑 입력값이 똑같지 않을까 생각해서 DreamHack이라고 입력했는데 원하는 문장이 나오긴 했다. 리눅스 환경 구축은 Vmaware에 Ubuntu 18.04 버전을 ..

Dreamhack 2022.07.18

리버싱 09 - 혼자 실습

주어진 chall3.exe 파일을 윈도우 파워쉘에서 실행함. 맞는 문자열을 입력해야 Correct가 뜨고, 그 정답이 뭔지를 알아내야 함. IDA가 찾은 main 함수가 바로 나옴. 일단 Strings에서 Correct 문자열을 찾아보고 해당 문자열이 어디서 참조되고 있는지 확인해보겠음. 역시 main함수에서 참조되고있음. 지난 실습을 하면서 정말 많이 본 코드가 바로 등장함. 생겨먹은 걸 보면 sub_1400011B0은 printf 함수, sub_140001210은 scanf 함수로 보임. 그리고 sub_140001000 함수가 v4를 인자로 받아서 입력값을 검증하는 함수겠지 싶음. 함수 내부에 있는 sub_140001080을 디컴파일하면 vfprintf가 나옴. 이를 통해 sub_1400011B0은 ..

Dreamhack 2022.07.12

리버싱 08 - Patch

플래그를 이미지로 출력해주지만 일부가 가려져있어 플래그를 읽을 수 없는 상태의 프로그램. - 파일 실행 - 정적 분석 - 동적 분석 - 파일 바이너리 수정 다운 받은 파일을 실행해보면 플래그가 가려져있는 것을 볼 수 있음. IDA로 Patch.exe 파일을 실행함. 이 문제는 WinAPI를 이용해 만들어진 GUI 프로그램이기 때문에 WinMain 함수를 찾아야 함. 이 함수는 보편적으로 윈도우를 생성하고 관련된 초기화 작업을 진행함. 이와 고나련된 API를 상호참조하는 방식으로 찾을 수 있음. 프로그램이 DLL로부터 임포트해 사용하는 함수의 목록은 Imports 탭에 존재함. 윈도우 생성 시 사용되는 CreateWindowExW 함수를 더블클릭해서 함수가 임포트되는 곳으로 갈 수 있음. x키를 눌러서 함..

Dreamhack 2022.07.12

리버싱 07 - rev-basic-1

IDA에서는 비주얼 스튜디오로 프로그램이 컴파일 되었을 때 어떻게 진입점에서 main 함수를 호출하는지 알고 있기 때문에 바로 main 함수를 찾을 수 있음. _arct_iob_func() 함수를 이용해서 stdout 파일 스트림을 가져와 sub_1400012B0 함수를 전달함. vfprintf 함수의 파일 스트림이 stdout이기 때문에 sub_1400013E0 함수가 printf 함수임을 알 수 있음. 단축키 n으로 함수 이름을 printf로 바꿈. 분석한 함수가 어떤 함수인지 알아냈으면 이름을 바꾸는 게 코드 분석하기 간편함. sub_140001440 함수가 scanf 함수임을 알 수 있음. sub_140001300 함수 내부를 보면 _stdio_common_vfscanf 함수가 보이기 때문임. m..

Dreamhack 2022.07.12

리버싱 06 - rev-basic-0

맞는 입력값을 찾아야 함. 입력값을 검증하는 함수를 찾아야 무엇이 제대로 된 입력값인지 알 수 있으므로 String에서 correct 문자열을 찾음. correct 문자열이 참조되는 함수를 살펴보기 위해서 Buffer를 클릭하고 단축키 x를 눌러서 xrefs를 실행함. main 에서 해당 문자열을 참조하는 것을 볼 수 있음. Direction 부분을 더블클릭하면 나오는 부분에서 F5를 눌러서 디컴파일 실행함. 눈에 띄는 함수 sub_140001190과 sub_1400011F0이 보임. IDA는 어셈블리 코드를 C언어로 컴파일해주기 때문에 코드 분석이 쉬워짐. 일단 저 두 함수가 출력, 입력과 관련이 있는 것 같아서 두 함수를 더블클릭해서 들어가보면 디컴파일된 것이 나옴. _acrt_iob_func() 함..

Dreamhack 2022.07.12

리버싱 05 - x86 Assembly

*모든 내용과 이미지의 출처는 x86 Assembly🤖: Essential Part(1) | Dreamhack 로그인 | Dreamhack dreamhack.io 어셈블리 언어 컴퓨터의 기계어와 치환되는 언어. CPU에 사용되는 ISA는 IA-32, x86-64 등 종류가 굉장히 다양함 -> 이 종류만큼 많은 수의 어셈블리어가 존재함. 해당 강의는 x64 아키텍처를 대상으로 하기 때문에 x64 어셈블리어만 공부함. x64 어셈블리 언어 기본 구조 명령어(Operation Code) + 피연산자(Operand) 명령어는 동사 역할, 피연산자는 목적어 역할 mov eax, 3 opecode = 대입해라 operand1 = eax에operand2 = 3을 주요 명령어 21가지 산술 연산(Arithmetic) ..

Dreamhack 2022.07.12

리버싱 04 - Windows Memory Layout

*모든 내용, 이미지의 출처는 Background: Windows Memory Layout | Dreamhack 로그인 | Dreamhack dreamhack.io 메모리 레이아웃(Memory Layout) 프로세스 가상 메모리의 구성. *가상 메모리(Virtual Memory) : 프로그램 실행 시 운영체제에서 프로세스에게 사용 가능한 메모리 공간을 할당해주는데, 이 공간을 가상메모리라고 함. 운영체제가 하는 일 - 프로그램의 정보를 참조하여 저장된 데이터가 적절한 영역에 저장되도록 함. - 프로세스가 사용할 가상 메모리를 용도별로 구획. - 프로세스가 사용하는 데이터를 적절한 구획에 저장. -> 유사한 데이터끼리. 구획에 권한 부여. => 개발자가 프로세스의 메모리를 직관적으로 이해 가능함. 섹션: ..

Dreamhack 2022.07.10

리버싱 03 - 컴퓨터 구조, 명령어 집합 구조

* 모든 내용과 이미지 출처는 Background: Computer Architecture | Dreamhack 로그인 | Dreamhack dreamhack.io CPU : 컴퓨터 작동의 핵심이 되는 연산 처리. 저장장치 : 데이터 저장 GPU : 그래픽 데이터 처리 랜카드 : 네트워크 통신 처리 사운드 카드 : 소리 데이터 처리 컴퓨터 구조(Computer Architecture) 컴퓨터의 기본 설계. 서로 다른 부품들이 이 설계에 맞춰서 개발되고 조립되어 컴퓨터가 완성됨. 컴퓨터가 효율적으로 작동할 수 있도록 하드웨어 및 소프트웨어의 기능을 고안하고, 구성하는 방법. 명령어 집합구조(Instruction Set Architecture, ISA) CPU가 사용하는 명령어와 관련된 설계 인텔 x86-6..

Dreamhack 2022.07.10

리버싱 02 - 동적 분석과 정적 분석

* 모든 내용과 이미지의 출처는 Background: Static Analysis vs. Dynamic Analysis | Dreamhack 로그인 | Dreamhack dreamhack.io 정적 분석(Static Analysis) : 외적 관찰만으로 정보 알아냄. - 프로그램을 실행기키지 않고 분석하는 방법. 장점 1) 프로그램의 전체구조 파악 Easy. -> 어떤 함수로 구성됐는지, 함수들이 서로 갖는 호출 관계, 어떤 API를 사용하고 문자열을 포함하는지 등 2) 분석 환경 제약에서 자유로움. -> 안드로이드 apk 파일은 별도의 sw를 사용하지 않는 한 윈도우 시스템에서 실행 불가능. 동적 분석 번거로우나 정적 분석은 프로그램 실행 안해도 됨. 3) 바이러스와 같은 악성 프로그램의 위협으로부터 ..

Dreamhack 2022.07.10