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

$48.30
SKU
9791161758602
+ Wish
[Free shipping over $100]

Standard Shipping estimated by Fri 09/20 - Thu 09/26 (주문일로부 10-14 영업일)

Express Shipping estimated by Tue 09/17 - Thu 09/19 (주문일로부 7-9 영업일)

* 안내되는 배송 완료 예상일은 유통사/배송사의 상황에 따라 예고 없이 변동될 수 있습니다.
Publication Date 2024/07/24
Pages/Weight/Size 188*235*27mm
ISBN 9791161758602
Categories IT 모바일 > 네트워크/해킹/보안
Description
ARM 기반 장치의 애플리케이션을 어셈블리 수준으로 분석하는 리버스 엔지니어와 보안 엔지니어를 위한 필독서이다. ARM 장치의 취약점을 찾아 그 피해를 줄이고자 하는 ARM 보안 전문가를 위해, ARMv8-A 인스트럭션 세트와 보안 및 방어를 목적으로 하는 리버스 엔지니어링 과정을 소개한다. 다음으로 ELF파일 형식과 OS 내부를 소개하고 ARM 아키텍처의 기본과 A32 및 A64 인스트럭션을 철저히 알아본다. 또한 관련 리버스 엔지니어링 과정을 깊이 있게 분석한다. 마지막으로 ARM 기반 M1 SoC로 컴파일된 macOS 멀웨어 바이너리를 간단히 들여다본다. 이 책을 통해 ARM 아키텍처용으로 컴파일된 리버스 엔지니어링 소프트웨어를 통해 ARM 인스트럭션 및 제어 흐름 패턴을 폭넓게 이해할 수 있을 것이다.
Contents
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 아티팩트 감지를 통해)
__결론
Author
마리아 마크스테터,김세영,정윤선