맨땅에 코딩
침해대응/위협/포렌식 - 리버스 엔지니어링 본문
*화이트햇 스쿨 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 또는 기타 하드웨어의 오류
- 타이머 인터럽트
- 하드웨어 입출력 장치
'화이트햇 스쿨 2기 > 이론교육' 카테고리의 다른 글
침해대응/위협/포렌식 - 포렌식 도구 이해 (0) | 2025.02.15 |
---|---|
침해대응/위협/포렌식 - 파일시스템 분석 (0) | 2025.02.15 |
취약점 분석 - 시스템 해킹 원리 (0) | 2025.02.13 |
취약점 분석 - 컴퓨터 구조 II (0) | 2025.02.13 |
취약점 분석 - 어셈블리 언어 (0) | 2025.02.13 |