정보보안/정보보호기초

리버스 코드 엔지니어링 (PE파일, 링커, 스택 메모리 등)

록스타★ 2024. 7. 8. 13:35
반응형

서론

소프트웨어 개발 및 보안 분야에서 중요한 역할을 한다.

프로그램의 소스 코드 없이도 동작 원리와 구조를 이해하고, 보안 취약점을 분석하며, 악성코드 식별 및 제거 기술이다.

 

1. 윈도우 실행 파일의 내부 구조와 동작 과정

PE 파일의 생성 및 실행과정

- 윈도우 실행 파일은 소스 코드 파일에서 시작하여 오브젝트 파일 최종적으로 실행 파일(PE)로 빌드됨

- 컴파일러와 링커가 중요한 역할

- 컴파일러는 소스코드를 아키텍처에 맞는 기계어코드로 변환

- 링커는 오브젝트 파일들을 하나의 실행 파일로 결합

 

PE(Portable Executable) 파일 구조

- 윈도우 운영 체제에서 사용되는 EXE, DLL, SYS 등의 파일 형식을 의미

- DOS헤더, PE헤더, 섹션 테이블 등으로 구성, 각 섹션에는 콛 데이터, 리소스 등의 정보 포함

 

DOS 헤더

- MS-DOS와의 호환성을 위해 존재, 대부분 데이터 사용 X 

- "MZ" 시그니처로시작

 

PE 헤더

- 논리적구조에 대한 중요한 정보를 담고있음

- "PE00" 시그니처로 시작

- 파일 헤더와 선택적 헤더로 구성

 

섹션 테이블

- 각 섹션의 이름, 파일/메모리 상 위치, 사이즈, 속성 등을 담음

- 프로그램 실행 시 로더가 각 섹션을 메모리에 로드하고 속성을 설정하는데 필요

 

 

2. 악성코드 분석을 위한 리버스 엔지니어링 기초

프로세서 레지스터와 명령어

- 리버스 엔지니어링에서 IA32/64 프로세서의 주요 레지스터와 기본 명령어를 이해하는 것 필수

- EAX, EBX, ECX 등의 범용 레지스터는 산술/논리 연산, 주소 계산, 메모리 포인터 정보를담음

- CS, DS 등의세그먼트레지스터는 메모리 세그먼트 정보 포함

- 기본 명령어는 MOV, ADD, SUB, MUL, XOR 등이 있고, 각 명령어는 특정한 연산 수행

- MOV : 데이터 복사 (mov eax, ebc(EBX의 값을EAX로 복사) 

- ADD : 덧셈 (add eax, 5(EAX에 5를 더함)

- SUB : 뺄셈 (sub eax, 2(EAX에서 2를 뺌)

- MUL : 곱셈 (mul ebx(EAX에 있는 값을 EBX의 값과 곱함)

- XOR : 비트 단위 연산 (xor eax, eax(EAX를 0으로 초기화) 

 

 

스택 메모리

- 스택은 함수 호출과 관련된 데이터를 저장하는 메모리 영역

- 함수가 호출될 때마다 새로운 스택 프레임이 생성

- EBP(Base Pointer)는 현재 실행 중인 함수의 스택 프레임 시작 주소를 가리킴

- ESP(Stack Pointer)는 스택 프레임 끝 주소를 가리킴 

- 함수 실행 중에는 스택 포인터가 변동, 함수 종료 시에는 스택 프레임 소멸

- 스택프레임을 열고 닫는 코드를 각각 함수 프롤로그와 에필로그라고 지칭

 

 

 

결론

리버스 코드 엔지니어링은 소프트웨어의 동작 원리와 보안 취약점을 파악하는데 중요한 기술이다. 윈도우 실행 파일의 내부 구조와 동작 과정을 이해해야하며, 악성코드 분석을 위한 기초 개념도 필요하다. 블로그 내에 윈도우 기초 관련하여 포스팅을 조금 해두었는데 궁금한 점이 있다면 블로그 내 확인을 해보셨으면 좋겠다.

 

    

 

반응형