1부. Arm 어셈블리 내부 구조
1장. 리버스 엔지니어링 소개
__어셈블리 소개
____비트와 바이트
____캐릭터 인코딩
____기계 코드와 어셈블리어
____어셈블리어 프로그래밍
______크로스 어셈블러
__고수준 언어
__역어셈블
__역컴파일
2장. ELF 파일 포맷 내부
__프로그램 구조
__고수준 vs. 저수준 언어
__컴파일 절차
____다른 아키텍처를 위한 크로스 컴파일
____어셈블 및 링크
__ELF 파일 개요
__ELF 파일 헤더
____ELF 파일 헤더 정보 필드
____대상 플랫폼 필드
____진입점 필드
____테이블 위치 필드
__ELF 프로그램 헤더
____PHDR 프로그램 헤더
____INTERP 프로그램 헤더
____LOAD 프로그램 헤더
____DYNAMIC 프로그램 헤더
____NOTE 프로그램 헤더
____TLS 프로그램 헤더
____GNU_EH_FRAME 프로그램 헤더
____GNU_STACK 프로그램 헤더
____GNU_RELRO 프로그램 헤더
__ELF 섹션 헤더
____ELF 메타 섹션
______문자열 테이블 섹션
______심볼 테이블 섹션
____주 ELF 섹션
______.text 섹션
______.data 섹션
______.bss 섹션
______.rodata 섹션
______.tdata 및
__심볼
______전역 심볼 vs. 지역 심볼
______약한 심볼
______심볼 버전
______심볼 매핑
__동적 섹션과 동적 로딩
____의존성 로딩
____프로그램 재배치
______정적 재배치
______동적 재배치
______전역 오프셋 테이블(GOT
______프로시저 링크 테이블(PLT
____ELF 프로그램 초기화 및 종료 섹션
______초기화 및 종료 순서
__스레드 로컬 스토리지
____지역-실행 TLS 접근 모델
____초기-실행 TLS 접근 모델
____일반-동적 TLS 접근 모델
이 책의 대상 독자
초보자와 노련한 전문가 모두에게 유용한 포괄적인 안내서로, 인기와 수요가 급상승하고 있는 프로세서 언어를 직관적으로 소개하는 책이다. 독자에게 필요한 자료를 쉽게 보여주므로, 취약점 탐색 및 분석, 익스플로이트 개발, 멀웨어 분석 기술을 극적으로 향상시키는 데 도움을 준다.
이 책의 구성
인스트럭션이 무엇인지 설명하고, 어디에서 왔는지를 알아보는 책이다. 2장에서는 ELF파일 포맷과 그 섹션, 컴파일 절차 등을 간략히 소개한다. 바이너리 분석은 실행 환경을 이해하지 않고서는 완전할 수 없으므로, 3장에서는 운영체제의 기초를 다룬다.
4장에서는 위와 같은 기본 지식을 바탕으로 Arm 아키텍처에 더 깊이 다가갈 준비를 한다. 5
장에서는 가장 많이 사용되는 데이터 처리 인스트럭션을 살펴보고, 6장에서는 메모리 접근
인스트럭션의 개요를 다룬다. 이 인스트럭션은 로드/스토어(Load/Store 아키텍처로 알려져 있으며, Arm 아키텍처에서 가장 많은 부분을 차지한다. 7장과 8장에서는 조건부 실행과 흐름 제어를 논의한다. 이는 리버스 엔지니어링에서 가장 중요한 구성 요소다.
9장은 리버스 엔지니어가 특히 관심을 가질 만한 부분이다. Arm 환경은 서로 다른 형태를 지니므로 잘 알아두는 것이 중요한데, 여러분이 동적 분석을 수행하거나 실행 중에 바이너리를 분석할 필요가 있을 때 특히 더 그렇다.
지금까지 언급한 정보를 갖고 있다면, 다음 리버스 엔지니어링 모험을 나서는 데 필요한 장비를 충분히 갖춘 셈이다. 그 모험을 위해 10장에서는 일반적인 정적 분석 도구를 소개한다. 또한 한 단계씩 따라 할 수 있는 실용적이고 간단한 정적 분석 예제를 제공한다.
프로그램 실행 중에 그 동작을 관찰할 수 있는 동적 분석이 없다면 리버스 엔지니어링은 지루해진다. 11장에서는 자주 사용되는 동적 분석 도구와 분석 중 사용할 수 있는 유용한 명령어를 배우고 예제를 살펴볼 것이다. 두 가지 실용적인 디버깅(debugging 예제를 다루면서