목록Dreamhack Study (12)
발자취
본 게시물은 Dreamhack의 Reverse Engineering 로드맵 과정을 학습한 기록이다. #01. 서론1. 서론https://dreamhack.io/wargame/challenges/17위 링크의 워게임을 풀이한다. 이 문제는 사용자에게 문자열 입력을 받아 정해진 방법으로 입력값을 검증하여 correct 또는 wrong을 출력하는 프로그램이 주어진다. 이 프로그램을 분석하여 알맞은 문자열을 찾아 입력해 주면 된다! #02. 분석 및 설계1. 정적 분석파일을 로드한다. main 함수단축키 F5를 눌러 main 함수를 디컴파일했다.이전에 풀었던 rev-basic-1과 별 다를 게 없는 구조이다."Input: " 문자열을 출력하고, 변수 v4에 사용자 입력 문자열을 저장하는 구조이다. sub_1..
본 게시물은 Dreamhack의 Reverse Engineering 로드맵 과정을 학습한 기록이다. #01. 서론1. 서론https://dreamhack.io/wargame/challenges/49/위 링크의 워게임을 풀이한다. 이 문제의 프로그램은 플래그를 이미지로 출력해 주지만, 일부가 가려져 있어 확인할 수 없는 상태다.플래그를 그리는 루틴을 분석하여 가려진 플래그를 알아내보도록 하겠다. #02. 실행1. 파일 실행이 프로그램은 GUI 프로그램이므로 프로그램 아이콘을 더블클릭하여 바로 실행할 수 있다.프로그램을 실행해보면 위와 같은 이미지가 나타난다.플래그 부분이 마스킹 처리되어 있어 내용을 확인할 수 없다. 따라서 이 프로그램을 직접 패치해서 선을 그리는 찾아 제거하도록 할 것이다. #03. ..
본 게시물은 Dreamhack의 Reverse Engineering 로드맵 과정을 학습한 기록이다. #01. 서론1. 서론https://dreamhack.io/wargame/challenges/15/위 링크의 워게임을 풀이한다. 이 문제도 rev-basic-0 문제와 마찬가지로 사용자에게 문자열 입력을 받아 정해진 방법으로 입력값을 검증하여 correct 또는 wrong을 출력하는 프로그램이 주어진다. #02. 정적 분석1. IDA로 파일 열기"OK" "No" 2. main 함수 찾기IDA에 파일을 업로드하면 자동으로 main 함수를 찾아준다.IDA가 Visual Studio로 컴파일된 프로그램의 main 함수 패턴을 잘 알고 있기 때문이다. 이번 실습에서는 IDA가 찾아준 main 함수부터 바로 분..
본 게시물은 Dreamhack의 Reverse Engineering 로드맵 과정을 학습한 기록이다. #01. 서론1. 서론https://dreamhack.io/wargame/challenges/14위 링크의 워게임을 풀이한다. #02. 실행1. 파일 실행VMWare 가상 머신 속 Windows10 환경에서 실행해 보도록 하겠다.Windows PowerShell에서 문제에서 제공된 파일을 실행해보았다.실행하면 "Input : "이라는 문자열이 출력되고, 이 뒤에 아무 문자열을 입력해 보면 "Wrong"이라는 문자열이 출력된다.알맞은 문자열을 입력하면 "Correct", 알맞지 않은 문자열을 입력하면 "Wrong"을 출력하는 구조의 프로그램인 것으로 추측할 수 있다. #03. 정적분석1. IDA로 파일 ..
본 게시물은 Dreamhack의 Reverse Engineering 로드맵 과정을 학습한 기록이다.https://dreamhack.io/lecture/courses/572 #01. 정적 분석1. IDA로 파일 열기신뢰할 수 없는 프로그램을 분석할 때는 악성 프로그램일 가능성을 대비해 정적 분석을 먼저 하는 것이 바람직하다. 아무것도 건들지 말고 OK 버튼을 누른다 2. main 함수 찾기정적 분석에서는 주로 main 함수를 먼저 찾고 이를 분석하면서 시작된다.이 예제에서는 IDA가 main 함수를 자동으로 찾아주지만, 이번에는 셀프로 찾아보도록 한다. 바이너리에서 어떤 함수를 찾는 방법은 크게 두 가지가 있다. 프로그램의 시작 지점인 진입점(Entry Point, EP)부터 분석 → 원하는 함수를 찾을..
본 게시물은 Dreamhack의 Reverse Engineering 로드맵 과정을 학습한 기록이다. #01. IDA란?Hex-Rays 사에서 제작한 디스어셈블러.메인 기능은 디스어셈블러이나, 이 외에도 여러 환경에서의 디버깅과 다양한 아키텍처 디컴파일과 같이 여러 기능을 제공 https://hex-rays.com/ida-free/설치 링크이다! 1. 파일 열기파일을 로딩하면 IDA에서 분석하려는 프로그램의 구조를 파악하여 알려주고, 어떤 형식으로 분석할지 물어본다. #02. IDA 창1. Functions windowIDA에서 분석한 프로그램의 함수를 보여준다. [Ctrl + F] 키로 원하는 함색을 찾을 수 있다. 2. Graph overview함수를 그래프화하여 보여준다. 함수의 흐름을 파악할 ..
본 게시물은 Dreamhack의 Reverse Engineering 로드맵 과정을 학습한 기록이다. #01. Quiz: x86 Assembly 1Q1. 레지스터, 메모리 및 코드가 다음과 같다. Code를 1까지 실행했을 때, rax에 저장된 값은?[Register]rbx = 0x401A40=================================[Memory]0x401a40 | 0x00000000123456780x401a48 | 0x0000000000C0FFEE0x401a50 | 0x00000000DEADBEEF0x401a58 | 0x00000000CAFEBABE0x401a60 | 0x0000000087654321=================================[Code]1: mov ra..
본 게시물은 Dreamhack의 Reverse Engineering 로드맵 과정을 학습한 기록이다. #01. 어셈블리 언어: 컴퓨터의 기계어와 치환되는 언어. 기계어의 종류가 많은 만큼 많은 수의 어셈블리어가 존재한다. #02. x64 어셈블리 언어1. 기본 구조명령어(Operation Code, Opcode): 한국어에서의 동사 역할과도 같음피연산자(Operand): 한국어에서의 목적어 역할과도 같음 1) x86-64 어셈블리어 문법 구조의 예mov eax, 3mov: 명령어(opcode) / 대입하라는 의미.eax: 첫번째 operand / 대입당할 피연산자3: 두번째 operand / 대입할 피연산자→ eax에 3을 대입하라 2. 명령어명령 코드데이터 이동(Data Transfer)mov, l..
본 게시물은 Dreamhack의 Reverse Engineering 로드맵 과정을 학습한 기록이다. #01. 서론1. 메모리 레이아웃(Memory Layout): 가상 메모리(Virtual Memory)의 구성 리버스 엔지니어링의 핵심은 바이너리를 분석하여 바이너리의 동작을 이해하는 것.바이너리의 동작을 자세히 이해하기 위해서는 바이너리가 상호작용하는 메모리에 대한 이해가 필요하다.#02. 프로세스 메모리 구조1. 섹션: 유사한 용도로 사용되는 데이터가 모여있는 영역. (윈도우의 PE 파일은 PE 헤더와 1개 이상의 섹션으로 구성되어 있다.)예: ".text" 섹션에는 PE의 코드가 적혀있다. 1-1. PE 헤더에 적혀 있는 섹션의 정보섹션의 이름섹션의 크기섹션이 로드될 주소의 오프셋섹션의 속성과 권..
본 게시물은 Dreamhack의 Reverse Engineering 로드맵 과정을 학습한 기록이다. #01. 서론1. 컴퓨터 구조란?: 컴퓨터가 효율적으로 작동할 수 있도록 하드웨어 및 소프트웨어의 기능을 고안, 구성하는 방법 ▶ 다음과 같은 것들이 포함됨- 컴퓨터의 기능 구조에 대한 설계: 컴퓨터가 연산을 효율적으로 하기 위해 필요한 컴퓨터 기능 고민, 설계 (대표적인 예: 폰 노이만 구조, 하버드 구조, 수정된 하버드 구조)- 명령어 집합구조: CPU가 처리해야하는 명령어 설계- 마이크로 아키텍처: 정의된 명령어 집합을 효율적으로 처리할 수 있게 CPU 회로 설계- 기타 하드웨어 및 컴퓨팅 방법에 대한 설..