◈ 이 책의 대상 독자 ◈
초보자와 노련한 전문가 모두에게 유용한 포괄적인 안내서로, 인기와 수요가 급상승하고 있는 프로세서 언어를 직관적으로 소개하는 책이다. 독자에게 필요한 자료를 쉽게 보여주므로, 취약점 탐색 및 분석, 익스플로이트 개발, 멀웨어 분석 기술을 극적으로 향상시키는 데 도움을 준다.
◈ 이 책의 구성 ◈
인스트럭션이 무엇인지 설명하고, 어디에서 왔는지를 알아보는 책이다. 2장에서는 ELF파일 포맷과 그 섹션, 컴파일 절차 등을 간략히 소개한다. 바이너리 분석은 실행 환경을 이해하지 않고서는 완전할 수 없으므로, 3장에서는 운영체제의 기초를 다룬다.
4장에서는 위와 같은 기본 지식을 바탕으로 Arm 아키텍처에 더 깊이 다가갈 준비를 한다. 5
장에서는 가장 많이 사용되는 데이터 처리 인스트럭션을 살펴보고, 6장에서는 메모리 접근
인스트럭션의 개요를 다룬다. 이 인스트럭션은 로드/스토어(Load/Store) 아키텍처로 알려져 있으며, Arm 아키텍처에서 가장 많은 부분을 차지한다. 7장과 8장에서는 조건부 실행과 흐름 제어를 논의한다. 이는 리버스 엔지니어링에서 가장 중요한 구성 요소다.
9장은 리버스 엔지니어가 특히 관심을 가질 만한 부분이다. Arm 환경은 서로 다른 형태를 지니므로 잘 알아두는 것이 중요한데, 여러분이 동적 분석을 수행하거나 실행 중에 바이너리를 분석할 필요가 있을 때 특히 더 그렇다.
지금까지 언급한 정보를 갖고 있다면, 다음 리버스 엔지니어링 모험을 나서는 데 필요한 장비를 충분히 갖춘 셈이다. 그 모험을 위해 10장에서는 일반적인 정적 분석 도구를 소개한다. 또한 한 단계씩 따라 할 수 있는 실용적이고 간단한 정적 분석 예제를 제공한다.
프로그램 실행 중에 그 동작을 관찰할 수 있는 동적 분석이 없다면 리버스 엔지니어링은 지루해진다. 11장에서는 자주 사용되는 동적 분석 도구와 분석 중 사용할 수 있는 유용한 명령어를 배우고 예제를 살펴볼 것이다. 두 가지 실용적인 디버깅(debugging) 예제를 다루면서 해당 장을 마무리 짓는데, 이는 GDB를 통해 할 수 있다. 두 예제 중 하나는 메모리 충돌 취약점 디버깅이고, 다른 하나는 프로세스 디버깅이다.
리버스 엔지니어링은 다양한 사례에 유용하다. Arm 인스트럭션 세트와 리버스 엔지니어링 테크닉을 이용하면 다른 분야로 기술을 확장할 수 있다. 예를 들면, 취약점 분석 또는 멀웨어 분석 등이다.
리버스 엔지니어링은 멀웨어 분석가에게 중요한 기술이지만, 주어진 멀웨어 샘플이 컴파일된 환경에 익숙해지는 것 역시 중요하다. 이를 위해 arm64 맥 OS 멀웨어를 분석하는 장도 포함돼 있다(12장). 이 장은 『The Art of Mac Malware』(No Starch Press, 2022)의 저자인 패트릭 워들이 기술했다. 이전 장들과 달리, 해당 장은 Arm 어셈블리에 집중하지 않는다. 그 대신에 맥 OS 멀웨어가 분석을 피하기 위해 사용하는 일반적인 분석 방지(anti-analysis) 기술을 소개한다. 이 장의 목적은 애플 실리콘 M1/M2(Apple Silicon M1/M2)와 호환되는 맥 OS 멀웨어를 살펴보는 것이다. 따라서 Arm 기반 맥 OS 멀웨어를 추적하고 분석하길 원하는 엔지니어에게는 좋은 시작점이 될 것이다.
◈ 옮긴이의 말 ◈
ARM 어셈블리 언어는 현대의 다양한 임베디드 시스템과 모바일 장치에서 핵심 요소로 자리 잡았습니다. 따라서 바야흐로 ARM 프로세서의 전성시대라고 봐도 좋습니다. 이 책은 ARM 프로세서의 내부 구조와 동작 원리를 심도 있게 분석하고, 이를 통해 리버스 엔지니어링 기술을 습득할 수 있도록 돕습니다. 덕분에 이 책을 번역하면서 역자들 또한 ARM 인스트럭션 세트를 더 깊이 이해할 수 있었습니다.
1부에서는 ARM 어셈블리의 기본 개념과 구조를 소개합니다. ARM 어셈블리 언어의 기초를시작으로 ELF 파일 포맷, 운영체제의 기본 구조, ARM 아키텍처를 상세히 설명하는 등 독자들이 탄탄한 기초를 다질 수 있도록 구성돼 있습니다. 또한 데이터 처리 및 메모리 접근 명령어, 조건부 실행, 제어 흐름 등의 주제를 다뤄 ARM 어셈블리 언어를 활용하는 데 필요한 실질적인 지식을 제공합니다. 2부에서는 리버스 엔지니어링 기법을 통해 ARM 환경에서 코드를 분석하고 디버깅하는 방법을 다룹니다. ARM 보드와 QEMU를 이용한 에뮬레이션, 정적 분석 및 동적 분석 도구의 활용, 맥 OS 환경에서의 ARM64 바이너리 분석 등을 상세히 설명하므로 실전에서 활용할 수 있는 유용한 기술들을 배울 수 있습니다. 이 책은 이론과 실습을 균형 있게 다뤄 독자들이 ARM 어셈블리 언어와 리버스 엔지니어링을 효과적으로 익히게 해줍니다. 각 장마다 제공되는 예제와 실습을 통해 독자들은 실제 상황에서 발생할 수 있는 다양한 문제를 해결하는 능력을 기를 수 있을 것입니다. 이 책이 ARM 어셈블리 언어와 리버스 엔지니어링을 배우고자 하는 모든 분께 큰 도움이 되길 바랍니다.