Reversing/기초 리버싱

Reversing/기초 리버싱

1장 Introduction: Reverse Engineering

리버스 엔지니어링(Reverse Engineering) : 역공학 기계어(Machine Language) : 컴퓨터의 언어 →어셈블러(번역장치)→ 어셈블리어(Assembly Language) : 번역된 저급 언어← 컴파일러(Compiler) ← 고급 언어(C, C++, C#…) 바이너리 = 프로그램 컴파일러와 인터프리터 프로그래밍 언어 고급 언어 : C, C++, Go 저급 언어 : 어셈블리어, 기계어 컴파일 : CPU가 수행해야할 명령들을 프로그래밍 언어로 작성한 것(소스코드)를 기계어 형식으로 번역하는 것 인터프리팅 : 사용자의 입력, 또는 사용자가 작성한 스크립트를 그때 그때 번역하여 CPU에 전달하는 것 컴파일 과정 전처리**(Preprocessing)** 컴파일러가 소스 코드를 어셈블리어로 컴파..

Reversing/기초 리버싱

2장 : Background: Static Analysis vs. Dynamic Analysis

정적 분석 프로그램을 실행하지 않고 분석하는 방법 장점 전체 구조 파악이 쉽다. 프로그램이 어떤 함수로 구성됐고 함수들은 서로 어떤 호출 관계를 갖는지, 어떤 API를 사용하고 어떤 문자열을 포함하는지 등을 종합적으로 살펴볼 수 있습니다. 분석자는 이 정보들을 바탕으로 프로그램을 큰 관점에서 이해할 수 있습니다. 분석 환경의 제약에서도 비교적 자유롭다**.** 프로그램을 실행시키지 않아 바이러스와 같은 악성 프로그램의 위협으로부터 안전하다. 프로그램을 실행시키지 않아 바이러스에 감염 단점 난독화(Obfuscation)가 적용되면 분석이 매우 어려워진다. 다양한 동적 요소를 고려하기 어렵다. 프로그램의 실행 흐름이 복잡할수록 심각해진다. 동적 분석 프로그램을 실행시키면서 분석하는 방법 장점 코드를 자세히 ..

Reversing/기초 리버싱

3장 : Background: Computer Architecture, Register

컴퓨터 구조 (Computer Architecture) 컴퓨터가 효율적으로 작동할 수 있도록 하드웨어 및 소프트웨어의 기능을 고안하고, 이들을 구성하는 방법 컴퓨터의 기능 구조에 대한 설계 폰 노이만 구조 중앙처리장치 CPU 기억장치 (주/보조) 버스 데이터 버스(Data Bus) 주소 버스(Address Bus) 제어 버스(Control Bus) 랜선, 데이터 전송 목적 소프트웨어, 프로토콜 등 컴퓨터 부품 사이 신호를 전송하는 통로 하버드 구조 수정된 하버드 구조 명령어 집합구조 ( ISA : Instruction Set Architecture) CPU가 해석하는 명령어의 집합 ARM MIPS AVR 인텔의 x86 및 x86-64 n비트 아키텍처 : n비트는 cpu가 처리할 수 있는 데이터의 크기 =..

Reversing/기초 리버싱

4장 : Background: Windows Memory Layout

메모리 레이아웃(Memory Layout) 프로세스 가상 메모리(Virtual Memory)의 구성 💡 가상 메모리 : 프로그램을 실행할 때 운영체제가 프로세스에게 사용 가능한 메모리 공간을 할당하는 공간 프로세스 메모리 구조 윈도우 PE 파일은 PE 헤더와 1개 이상의 섹션으로 구성 섹션의 이름 섹션의 크기 섹션이 로드될 주소의 오프셋 섹션의 속성과 권한 .text 섹션 실행 가능한 기계 코드가 위치하는 영역 이 세그먼트에는 읽기 권한과 실행 권한이 부여 쓰기 권한은 악의적인 코드 삽입 방지를 위해 제거 int main() { return 31337; } .data 섹션 컴파일 시점에 값이 정해진 전역 변수들이 위치 CPU가 이 섹션의 데이터를 사용해야 하므로, 읽기/쓰기 권한이 부여 int data_..

Reversing/기초 리버싱

5장 : x86 Assembly : Essential Part

기본 구조 동사에 해당하는 **명령어(Operation Code, Opcode)**와 목적어에 해당하는 **피연산자(Operand)**로 구성 명령어**(Operation Code, Opcode)** Arithmetic Instruction 명령어 설명 ADD 캐리를 포함하지 않은 덧셈 SUB 캐리를 포함하지 않은 뺄셈 ADC 캐리를 포함한 덧셈 SBB 캐리를 포함한 뺄셈 CMP 두개의 오퍼랜드 비교 INC 오프랜드 내용을 1 증가 DEC 오프랜드 내용을 1 감소 NEG 오퍼랜드의 2의 보수, 즉 부호 반전 AAA 덧셈 결과 AL 값을 UNPACK 10 진수로 보정 DAA 덧셈 결과 AL 값을 PACK 10진수로 보정 AAS 뺄셈 결과 AL 값을 UNPACK 10 진수로 보정 DAS 뺄셈 결과 AL 값을..

MellowHoney
'Reversing/기초 리버싱' 카테고리의 글 목록