장바구니 담기 close

장바구니에 상품을 담았습니다.

Arm 어셈블리 내부 구조와 리버스 엔지니어링

Arm 어셈블리 내부 구조와 리버스 엔지니어링

  • 마리아 마크스테터
  • |
  • 에이콘출판
  • |
  • 2024-07-24 출간
  • |
  • 596페이지
  • |
  • 188 X 235 X 27mm
  • |
  • ISBN 9791161758602
판매가

40,000원

즉시할인가

36,000

배송비

무료배송

(제주/도서산간 배송 추가비용:3,000원)

수량
+ -
총주문금액
36,000

※ 스프링제본 상품은 반품/교환/환불이 불가능하므로 신중하게 선택하여 주시기 바랍니다.

출판사서평

◈ 이 책의 대상 독자 ◈

초보자와 노련한 전문가 모두에게 유용한 포괄적인 안내서로, 인기와 수요가 급상승하고 있는 프로세서 언어를 직관적으로 소개하는 책이다. 독자에게 필요한 자료를 쉽게 보여주므로, 취약점 탐색 및 분석, 익스플로이트 개발, 멀웨어 분석 기술을 극적으로 향상시키는 데 도움을 준다.

◈ 이 책의 구성 ◈

인스트럭션이 무엇인지 설명하고, 어디에서 왔는지를 알아보는 책이다. 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 어셈블리 언어와 리버스 엔지니어링을 배우고자 하는 모든 분께 큰 도움이 되길 바랍니다.

목차

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 접근 모델
____지역-동적 TLS 접근 모델

3장. 운영체제 기초
__운영체제 아키텍처 개요
____사용자 모드 vs. 커널 모드
____프로세스
____시스템 콜
______객체 및 핸들
____스레드
__프로세스 메모리 관리
____메모리 페이지
____메모리 보호
____익명 및 메모리 매핑된 메모리
______메모리 매핑된 파일 및 모듈
____주소 공간 레이아웃 무작위화
____스택 구현
____공유 메모리

4장. Arm 아키텍처
__아키텍처 및 프로파일
__Armv8-A 아키텍처
____예외 수준
______Armv8-A 신뢰 영역 확장
______예외 수준 변경
____Armv8-A 실행 상태
__AArch64 실행 상태
____A64 인스트럭션 세트
____AArch64 레지스터
______프로그램 카운터
______스택 포인터
______제로 레지스터
______링크 레지스터
______프레임 포인터
______플랫폼 레지스터(x18)
______내부 프로시저 호출 레지스터
______SIMD 및 부동소수점 레지스터
______시스템 레지스터
____PSTATE
__AArch32 실행 상태
____A32 및 T32 인스트럭션 세트
______A32 인스트럭션 세트
______T32 인스트럭션 세트
______인스트럭션 세트 전환
____AArch32 레지스터
______프로그램 카운터
______스택 포인터
______프레임 포인터
______링크 레지스터
______프로시저 내부 호출 레지스터(IP, r12)
____현재 프로그램 상태 레지스터
______애플리케이션 프로그램 상태 레지스터
____실행 상태 레지스터
______인스트럭션 세트 상태 레지스터
______IT 블록 상태 레지스터(ITSTATE)
______엔디언 상태
______모드 및 예외 마스크 비트

5장. 데이터 처리 인스트럭션
__시프트 및 로테이트 오퍼레이션
____논리 좌측 시프트
____논리 우측 시프트
____산술 우측 시프트
____우측 로테이트
____확장 우측 로테이트
____인스트럭션 형태
______직접 상수 형태로 시프트
______레지스터 형태로 시프트
____비트필드 조작 오퍼레이션
______비트필드 이동
______부호 및 제로 확장 오퍼레이션
______비트필드 추출 및 삽입
__논리 오퍼레이션
____비트 AND
______TST 인스트럭션
______비트 클리어
____비트 OR
______비트 OR NOT
____비트 배타적 OR
______TEQ 인스트럭션
______배타적 OR NOT
__산술 오퍼레이션
____덧셈 및 뺄셈
______역뺄셈
____비교
______CMP 인스트럭션 오퍼레이션 동작
__곱셈 오퍼레이션
____A64에서 곱셈
____A32/T32에서 곱셈
______최하위 워드 곱셈
______최상위 워드 곱셈
______하프워드 곱셈
______벡터(듀얼) 곱셈
______롱(64비트) 곱셈
__나눗셈 오퍼레이션
__이동 오퍼레이션
____직접 상수 이동
______A32/T32에서 직접 상수 이동 및 MOVT
______A64에서 MOVZ, MOVK를 통한 직접 상수 이동
____레지스터 이동
____NOT을 갖는 이동

6장. 메모리 접근 인스트럭션
__인스트럭션 개요
__주소 지정 모드 및 오프셋 유형
____오프셋 주소 지정
______직접 상수 오프셋
______레지스터 오프셋
____사전 인덱스 모드
______사전 인덱스 모드 예제
____사후 인덱스 주소 지정
______사후 인덱스 주소 지정 예
____문자열 상수(PC 기준) 주소 지정
______상수 로드하기
______주소를 레지스터에 로드하기
__로드 및 저장 인스트럭션
____워드 또는 더블워드 로드 및 저장
____하프워드/바이트 로드 및 저장
______로드 및 저장을 사용한 예제
____다중 로드 및 저장(A32)
______STM 및 LDM 예제
______STM과 LDM을 사용한 좀 더 복잡한 예제
____쌍 로드 및 저장(A64)

7장. 조건부 실행
__조건부 실행 개요
__조건 코드
____NZCV 조건 플래그
______부호 있는 정수 오버플로 vs. 부호 없는 정수 오버플로
____조건 코드
__조건부 인스트럭션
____Thumb의 If-Then(IT) 인스트럭션
__플래그 설정 인스트럭션
____인스트럭션 ‘S’ 접미사
______덧셈 및 뺄셈 인스트럭션의 S 접미사
______논리적 시프트 인스트럭션의 S 접미사
______곱셈 인스트럭션의 S 접미사
______기타 인스트럭션의 S 접미사
____테스트 및 비교 인스트럭션
______비교(CMP)
______음수 비교(CMN)
______테스트 비트(TST)
______동등성 테스트(TEQ)
__조건부 선택 인스트럭션
__조건부 비교 인스트럭션
____CCMP를 사용한 AND 논리 연산자 조건부 인스트럭션
____CCMP를 사용한 OR 논리 연산자 조건부 인스트럭션

8장. 제어 흐름
__분기 인스트럭션
____조건 분기 및 반복문
____분기 테스트 및 비교
____테이블 분기(T32)
____분기 및 상태 변경
____서브루틴 분기
__함수와 서브루틴
____프로시저 호출 표준
____휘발성 vs. 비휘발성 레지스터
____인수와 반환값
____큰 값 전달
____리프 및 비리프 함수
______리프 함수
______비리프 함수
______프롤로그와 에필로그


2부. 리버스 엔지니어링
9장. Arm 환경
__Arm 보드
__QEMU를 사용한 에뮬레이션
____QEMU 사용자 모드 에뮬레이션
____QEMU 전체 시스템 에뮬레이션
____펌웨어 에뮬레이션

10장. 정적 분석
__정적 분석 도구
____명령줄 도구
____역어셈블러와 역컴파일러
____바이너리 닌자 클라우드
__참조에 의한 호출 예제
__제어 흐름 분석
____Main 함수
____서브루틴
____캐릭터로 변환
____if 문
____몫 나눗셈
____for 반복문
__알고리듬 분석

11장. 동적 분석
__명령줄 디버깅
____GDB 명령
____GDB 다중 아키텍처
____GDB 확장: GEF
______설치
______인터페이스
______유용한 GEF 명령
______메모리 검사
______메모리 영역 감시
______취약점 분석기
______checksec
____라데어2
______디버깅
__원격 디버깅
____라데어2
____아이다 프로
__메모리 손상 디버깅
__GDB로 프로세스 디버깅

12장. arm64 맥 OS 멀웨어 역추적
__배경지식
____맥 OS arm64 바이너리
____맥 OS Hello World(arm64)
__악성 arm64 바이너리 사냥
__arm64 멀웨어 분석
____분석 방지 기술
____디버깅 방지 논리 구조(ptrace 사용)
____디버깅 방지 논리 구조(sysctl 사용)
____VM 방지 논리 구조(SIP 상태와 VM 아티팩트 감지를 통해)
__결론

교환 및 환불안내

도서교환 및 환불
  • ㆍ배송기간은 평일 기준 1~3일 정도 소요됩니다.(스프링 분철은 1일 정도 시간이 더 소요됩니다.)
  • ㆍ상품불량 및 오배송등의 이유로 반품하실 경우, 반품배송비는 무료입니다.
  • ㆍ고객님의 변심에 의한 반품,환불,교환시 택배비는 본인 부담입니다.
  • ㆍ상담원과의 상담없이 교환 및 반품으로 반송된 물품은 책임지지 않습니다.
  • ㆍ이미 발송된 상품의 취소 및 반품, 교환요청시 배송비가 발생할 수 있습니다.
  • ㆍ반품신청시 반송된 상품의 수령후 환불처리됩니다.(카드사 사정에 따라 카드취소는 시일이 3~5일이 소요될 수 있습니다.)
  • ㆍ주문하신 상품의 반품,교환은 상품수령일로 부터 7일이내에 신청하실 수 있습니다.
  • ㆍ상품이 훼손된 경우 반품 및 교환,환불이 불가능합니다.
  • ㆍ반품/교환시 고객님 귀책사유로 인해 수거가 지연될 경우에는 반품이 제한될 수 있습니다.
  • ㆍ스프링제본 상품은 교환 및 환불이 불가능 합니다.
  • ㆍ군부대(사서함) 및 해외배송은 불가능합니다.
  • ㆍ오후 3시 이후 상담원과 통화되지 않은 취소건에 대해서는 고객 반품비용이 발생할 수 있습니다.
반품안내
  • 마이페이지 > 나의상담 > 1 : 1 문의하기 게시판 또는 고객센터 1800-7327
교환/반품주소
  • 경기도 파주시 문발로 211 1층 / (주)북채널 / 전화 : 1800-7327
  • 택배안내 : CJ대한통운(1588-1255)
  • 고객님 변심으로 인한 교환 또는 반품시 왕복 배송비 5,000원을 부담하셔야 하며, 제품 불량 또는 오 배송시에는 전액을 당사에서부담 합니다.