맨땅에 코딩

침해대응/위협/포렌식 - 리버스 엔지니어링 본문

화이트햇 스쿨 2기/이론교육

침해대응/위협/포렌식 - 리버스 엔지니어링

나는 푸딩 2025. 2. 13. 20:50

*화이트햇 스쿨 2기에서 이수한 이론교육 내용을 바탕으로 작성되었습니다.

 

1. 리버스 엔지니어링

- 역공학

- 치킨집을 먼저 차려버리는 것~??~?~~~?~?

 

컴파일러와 언어

- 컴퓨터는 0과 1로 소통하는 계산기

- 인간이 알아 볼 수 없기 때문에 기계어를 고안

- 기계어를 어셈블리로 매칭

- 그 이후로 고급언어로 발전

 

칼큘레이터와 컴퓨터의 차이

- 수행 능력의 차이

- 해석 능력이 없는 계산기는 단순 칼큘레이터

- 폰노이만의 Stored-Program Computer

- 버그는 진짜 벌레였다~~~!!~!~!~~~!

 

컴파일 과정

 

gcc

- 전처리: cpp

- 컴파일: ccl

- 어셈블: as

- 링크: id

 

디스어셈블

- add rax, rbx -> 4803c3

- 리눅스에서는 objdump를 이용해 확인이 가능함

 

2. 분석방법론

 

정적 분석

- 거의 모든 디버거가 지원

- 실행하지 않은 상태의 프로그램을 분석

- 난독화와 패킹이 되어 있는 경우 분석하기 까다로움

 

동적분석

- 프로그램을 직접 실행하면서 하는 분석

- 레지스터, 메모리 직접 확인

- 사용자의 개입으로 좀 더 정확한 분석이 가능

- 안티 디버깅 기능이 있다면 분석하기 까다로움

 

컴퓨터 구조

- CPU가 사용하는 명령어 집합 구조

- Instruction Set Architecture, ISA

- 우리가 자주 접하는 x86-64

- ARM, MIPS...

 

CISC

 

 

RISC

 

 

CISC vs RISC

  CISC(Complex Instruction Set Computer) RISC(Reduced Instruction Set Computer)
명령어의 수 많다 적다
레지스터 적다 많다
처리속도 느리다 빠르다
설계(내부 구조) 복잡하다 간단하다
전력 소모 많다 적다

 

스택

- 정적 메모리

- 운영체제에 의해 관리됨

- 함수 내의 로컬 변수 임시 저장

- 함수 호출 시 파라미터 전달

- 복귀 주소 저장

- 저장 공간이 힙에 비해 작고 액세스 시간이 빠름

 

LIFO(Last in First Out)

 

PUSH

 

스택프레임 동작 방식

 

스택 오버플로우

 

- 스택의 단점을 보완

- 프로그래머가 자유롭게 제어할 수 있는 공간

- 실행 중에 크기와 할당/해제 시기가 결정됨

- 스택에 비해 가용 크기가 크고 느림

- 메모리 누수의 가능성이 있음

- 메모리 단편화 문제 있음

 

3. 레지스터

 

Ring 0(커널모드)

- 모든 메모리에 접근 가능한 최고 권한

- 장치 제어를 위한 디바이스 드라이버

- 시스템 콜

 

소프트웨어 인터럽트

- 허가되지 않은 메모리 주소 참조

- 0으로 나누는 경우

- 시스템 콜

- 페이지 부재

 

하드웨어 인터럽트

- 정전 또는 전원 공급의 이상

- CPU 또는 기타 하드웨어의 오류

- 타이머 인터럽트

- 하드웨어 입출력 장치