Learning Again/Reversecore 5

[리버싱 핵심 원리] 3장 : 리틀 엔디언 표기법

03. 리틀 엔디언 표기법 1. 바이트 오더링(Byte Ordering) 데이터를 저장하는 방식 (바이트를 배열하는 방법) 1.1. 리틀 엔디언 & 빅 엔디언 1) 엔디언(Endian) : 여러 개의 연속된 대상을 배열하는 방법 2) 리틀 엔디언(Little Endian) : 데이터를 저장할 때 역순으로 저장 ~ 특징? - 사람이 보기에 직관적이지 않다. - Intel x86 CPU에서 사용 - 산술 연산, 데이터 타입 확장/축소 될 때 더 효율적 3) 빅 엔디언(Big Endian) : 데이터를 저장할 때 앞에서부터 순차적으로 저장 ~ 특징? - 사람이 보기에 직관적 - 대형 UNIX 서버에 사용되는 RISC 계열의 CPU에서 많이 사용 - 네트워크 프로토콜에 사용 1.2. OllyDbg에서 리틀 엔디..

[리버싱 핵심 원리] 2장 : Hello World! 리버싱

02. Hello World! 리버싱 1. Hello World! 프로그램 1.1. HelloWorld.exe 1) HelloWorld.exe 실행 화면파일 2) HelloWorld.exe 소스 코드(HelloWorld.cpp) 1.2. 디버거와 어셈블리 언어 1.2.1. 프로그램 처리 과정 전처리기 -> 컴파일러 ->어셈블러 -> 링커 1) 전처리기 : #으로 시작하는 지시자의 지시에 따라 소스코드를 변경하는 작업 수행 2) 컴파일러 : 소스코드를 어셈블리 코드로 번역하는 작업수행 3) 어셈블러 : 어셈블리 코드를 이진 코드(Binary Code)로 변경하는 작업 수행 4) 링커 : 프로그램 내에서 참조하는 함수, 라이브러리들을 연결시켜주는 작업을 수행 1.2.2. 프로그램 실행 과정 Fetch -> ..

[리버싱 핵심 원리] 1장 : 리버싱 스토리

01. 리버싱 스토리 1. 리버스 엔지니어링(Reverse Engineering, RE : 역공학) 리버스 엔지니어링은 물건이나 기계장치 혹은 시스템 등의 구조, 기능, 동작 등을 분석하여 그 원리를 이해하며 단점을 보완하고 새로운 아이디어를 추가하는 일련의 작업 2. 리버스 코드 엔지니어링(Reverse Code Engineering, RCE) 리버스 코드 엔지니어링은 소프트웨어 분야의 리버스 엔지니어링 2.1. 리버싱 분석 방법(실행 파일 분석 방법) 1) 정적 분석 : 파일의 겉모습을 관찰하여 분석하는 방법 이 단계에서는 파일을 실행하지 않는다. 또한 디스어셈블러를 통한 내부 코드와 그 구조를 확인하는 과정이다. -> 그냥 파일 겉모습만 확인(크기, 종류, 압축 등등..) 2) 동적 분석 : 파일을..