[Dreamhack] Reverse Engineering Stage 6 - Exercise: rev-basic-1
·
Hacking/Reversing
정적 분석 IDA로 파일 열기 문제 파일을 정적분석하기 위해 앞서 배운 IDA를 사용했다. IDA를 실행하고, chall0.exe를 끌어넣는다. 파일이 정상적으로 열리면 다음과 같은 창이 나타난다. 위의 창에서는 문제 파일의 간략한 정보를 띄워준다. 바이너리의 아키텍처는 AMD64 (x86-64), 파일 포맷은 PE (Portable Executable) 구조라는 것을 알 수 있다. 이 정보들을 통해 본격적으로 분석하기 전, 분석에 도움이 되는 정보를 획득할 수 있다. 지금까지 과정을 성공적으로 마치면 위와 같은 창이 나타난다. 이는 바이너리에 디버깅 정보를 담고있는 심볼 경로가 존재하는데, 이를 찾아서 로드하겠냐는 질문창이다. 문제 출제자는 별도의 심볼(.pdb)을 제공하지 않았기 때문에 No를 클릭한..
[Dreamhack] Reverse Engineering Stage 5 - Exercise: Helloworld
·
Hacking/Reversing
서론 간단한 예제인 HelloWorld.exe를 분석해보는 실습이다. 예제는 1초를 대기하고 Hello, world!를 출력하는 프로그램이다. /* File: hello-world.cpp Build opts: - /MT -> Library Static Linking - /DYNAMICBASE:NO -> Disable ASLR - /od -> Disable Optimization */ #include #include char* str; int main() { int delay = 1000; Sleep(delay); // 1000ms(1초)를 대기합니다. str = (char*)"Hello, world!\n"; printf(str); return 0; } 정적 분석 IDA로 파일 열기 신뢰할 수 없는 프로그..
[Dreamhack] Reverse Engineering Stage 5 - Tools: IDA
·
Hacking/Reversing
IDA The Interactive Disassembler (IDA) : Hex-Rays 사에서 제작한 디스어셈블러이다. IDA의 메인 기능은 디스어셈블이지만 이 외에도 여러 환경에서의 디버깅과 다양한 아키텍처 디컴파일과 같이 여러가지 기능을 제공한다. 이 때문에 바이너리를 분석해야 하는 리버스 엔지니어링 업무에는 대다수 IDA를 이용한다. IDA에는 다양한 라이센스가 존재하는데 기업에서 보편적으로 사용하는 IDA Pro는 대략 천만원에서 이천만원 사이의 금액대를 갖는다. 리버스 엔지니어링을 처음 공부하는 개인 이용자가 지불하기에는 부담이 큰 금액이기 때문에 Hex-Rays 사는 IDA Freeware를 제공한다. IDA Freeware는 x64 아키텍처에 한해 디컴파일 기능을 지원하며, 상업적 목적 이..
[Dreamhack] Reverse Engineering Stage 3 - Background: Windows Memory Layout
·
Hacking/Reversing
서론 메모리 레이아웃(Memory Layout) : 프로세스 가상 메모리(Virtual Memory)의 구성 프로그램을 실행하면 운영체제는 프로세스에게 사용 가능한 메모리 공간을 할당해준다. 컴퓨터 과학에서는 이 공간을 가상 메모리라고 부른다. 운영체제는 프로그램의 정보를 참조하여 프로그램에 저장된 데이터를 적절한 영역에 저장한다. 프로세스가 사용할 가상 메모리를 용도별로 구획하고, 프로세스가 사용하는 데이터를 적절한 구획에 저장한다. 유사한 데이터를 모아놓기 때문에 운영체제는 각 구획에 적절한 권한을 부여할 수 있으며, 개발자는 프로세스의 메모리를 더 직관적으로 이해할 수 있다. 섹션 섹션 : 유사한 용도로 사용되는 데이터가 모여있는 영역 윈도우의 PE 파일은 PE 헤더와 1개 이상의 섹션으로 구성되어..
[Dreamhack] Reverse Engineering Stage 2 - Background: Static Analysis vs. Dynamic Analysis
·
Hacking/Reversing
서론 소프트웨어를 분석할 때는 일반적으로 큰 구조를 먼저 관찰하지만 이것만으로 소프트웨어의 실제 동작을 알기 어려울 때가 많다. 그럴 때는 실제로 프로그램을 실행해보며 동작을 관찰해볼 수 있다. 그리고 더욱 자세한 분석이 필요할 때는 다시 여러 수단을 동원하여 특정 부분을 세밀하게 관찰한다. ​ 리버스 엔지니어링에서는 소프트웨어를 분석하기 위해 사용하는 분석 방법들을 크게 정적 분석(Static Analysis)과 동적 분석(Dynamic Analysis)으로 구분한다. 정적 분석은 외적인 관찰만을 통해 정보를 알아내는 것을 의미하며, 동적 분석은 실행을 통해 동작을 분석하는 것을 의미한다. ​ 우리는 대개 정적인 방법과 동적인 방법을 적절히 혼용하여야 대상을 효과적으로 분석할 수 있다. 동적인 방법만을..
[Dreamhack] Reverse Engineering Stage 2 - Background: Binary
·
Hacking/Reversing
서론 어떤 대상에게 명령을 내리려면, 그 대상과의 소통에 사용할 언어가 필요하다. 컴퓨터 과학자들은 컴퓨터에 명령을 내리기 위해 기계어(Machine Language)라는 컴퓨터의 언어를 정의했다. 그리고 필요한 연산을 컴퓨터가 대신하도록 기계어로 명령을 내렸다. ​ 기계어는 0과 1로 이루어져 있어서 사람이 이해하기 어려웠고, 이를 이용해서 컴퓨터에 명령을 내리는 것은 비효율적이었다. 컴퓨터 과학자들은 사람이 이해하기 쉬운 새로운 언어로 어셈블리어(Assembly Language)를 고안했고, 이를 기계어로 번역해주는 어셈블러(Assembler)를 개발했다. ​ 어셈블리어는 기계어에 비하면 효율적이었으나, 규모가 큰 프로그램을 개발하기에는 부족했다. 그래서 C, C++, Go, Rust 등을 비롯하여 ..
[Dreamhack] Reverse Engineering Stage 1 - Introduction: Reverse Engineering
·
Hacking/Reversing
리버스 엔지니어링이란 엔지니어링 : 완성품과 이를 구성하는 부품들의 기능과 설계를 고안하고, 제작하는 과정 리버스 엔지니어링(Reverse Engineering) : 엔지니어링을 거꾸로 하는 행위, 완성된 제품을 해체하고 분석하여 구조와 기능, 디자인을 파악한다. 이를 ‘역공학’이라고 지칭하기도 한다. ​ 소프트웨어 리버싱에 능숙해지기 위해서는 상당히 많은 지식과 기술 그리고 노력이 필요하다. 소프트웨어와 다양한 컴퓨팅 환경에 대한 깊은 이해를 바탕으로, 적으면 수백 줄, 길면 수만, 수억 줄의 코드로 작성된 프로그램에서 분석할 부분을 찾고, 리버싱을 막기 위해 도입된 안티 리버싱 기술들을 우회해야 한다. 수학적인 지식이 필요할 때도 있고, 필요한 도구를 직접 개발해야 할 때도 있다. ​ 해커의 기본이 ..