
內容簡介
本書由兩部分組成。第I部分首先概述ELF文件格式和操作係統的內部結構,然後介紹Arm架構基礎知識,並深入探討A32和A64指令集;第II部分深入探討逆向工程,包括Arm環境、靜態分析和動態分析,以及固件提取和模擬分析等關鍵主題。本書末尾講解在macOS中基於Arm的M1 SoC編譯的二進製文件的惡意軟件分析。
通過閱讀本書,讀者可以深入理解Arm的指令和控製流模式,這對於針對Arm架構編譯的軟件的逆向工程至關重要。為幫助逆向工程師和安全研究人員更好地理解逆向工程,本書深入介紹了逆向工程的各個方麵,具體包括:
Arm架構的AArch32和AArch64指令集狀態,以及ELF文件格式內部結構;
Arm匯編內部機製的詳細信息,可供逆向工程師分析惡意軟件和審計軟件安全漏洞使用,以及尋求Arm匯編語言詳細知識的開發人員使用;
Armv8-A架構支持的A32/T32和A64指令集,以及常見的指令和控製流模式;
用於靜態和動態二進製分析的已知逆向工程工具;
在Linux上對Arm二進製文件進行反匯編和調試的過程,以及常用的反匯編和調試工具。
通過閱讀本書,讀者可以深入理解Arm的指令和控製流模式,這對於針對Arm架構編譯的軟件的逆向工程至關重要。為幫助逆向工程師和安全研究人員更好地理解逆向工程,本書深入介紹了逆向工程的各個方麵,具體包括:
Arm架構的AArch32和AArch64指令集狀態,以及ELF文件格式內部結構;
Arm匯編內部機製的詳細信息,可供逆向工程師分析惡意軟件和審計軟件安全漏洞使用,以及尋求Arm匯編語言詳細知識的開發人員使用;
Armv8-A架構支持的A32/T32和A64指令集,以及常見的指令和控製流模式;
用於靜態和動態二進製分析的已知逆向工程工具;
在Linux上對Arm二進製文件進行反匯編和調試的過程,以及常用的反匯編和調試工具。
作者簡介
瑪麗亞·馬克斯特德(Maria Markstedter)是 Azeria Labs 的創始人兼首席執行官,該公司
提供 Arm 逆向工程和漏洞利用的培訓課程。在此之前,她在滲透測試和威脅情報領域工作,並擔任虛擬化初創公司 Corellium 的首席產品官。
她擁有企業安全學士學位和企業安全碩士學位,並在劍橋依托 ARM 公司從事漏洞利用緩解研究工作。
她因在該領域的貢獻而受到認可,曾入選《福布斯》2018 年歐洲科技界“30 位 30 歲以下技術精英”名單,並被評為 2020 年《福布斯》網絡安全年度人物。自 2017 年以來,她還是歐洲 Black Hat 和美國培訓與簡報審核委員會(Trainings and Briefi ngs Review Board)的成員。
提供 Arm 逆向工程和漏洞利用的培訓課程。在此之前,她在滲透測試和威脅情報領域工作,並擔任虛擬化初創公司 Corellium 的首席產品官。
她擁有企業安全學士學位和企業安全碩士學位,並在劍橋依托 ARM 公司從事漏洞利用緩解研究工作。
她因在該領域的貢獻而受到認可,曾入選《福布斯》2018 年歐洲科技界“30 位 30 歲以下技術精英”名單,並被評為 2020 年《福布斯》網絡安全年度人物。自 2017 年以來,她還是歐洲 Black Hat 和美國培訓與簡報審核委員會(Trainings and Briefi ngs Review Board)的成員。
目錄
封麵
版權信息
作者簡介
譯者序
前言
致謝
作者簡介
第一部分 Arm匯編內部機製
第1章 逆向工程簡介
1.1 匯編簡介
1.1.1 位和字節
1.1.2 字符編碼
1.1.3 機器碼和匯編
1.1.4 匯編
1.2 高級語言
1.3 反匯編
1.4 反編譯
第2章 ELF文件格式的內部結構
2.1 程序結構
2.2 高級語言與低級語言
2.3 編譯過程
2.3.1 不同架構的交叉編譯
2.3.2 匯編和鏈接
2.4 ELF文件概述
2.5 ELF文件頭
2.5.1 ELF文件頭信息字段
2.5.2 目標平台字段
2.5.3 程序入口點字段
2.5.4 表位置字段
2.6 ELF程序頭
2.6.1 PHDR程序頭
2.6.2 INTERP程序頭
2.6.3 LOAD程序頭
2.6.4 DYNAMIC程序頭
2.6.5 NOTE程序頭
2.6.6 TLS程序頭
2.6.7 GNU_EH_FRAME程序頭
2.6.8 GNU_STACK程序頭
2.6.9 GNU_RELRO程序頭
2.7 ELF節頭
2.7.1 ELF meta節
2.7.2 主要的ELF節
2.7.3 ELF符號
2.8 .dynamic節和動態加載
2.8.1 依賴項加載
2.8.2 程序重定位
2.8.3 ELF程序的初始化和終止節
2.9 線程本地存儲
2.9.1 local-exec TLS訪問模型
2.9.2 initial-exec TLS訪問模型
2.9.3 general-dynamic TLS訪問模型
2.9.4 local-dynamic TLS訪問模型
第3章 操作係統基本原理
3.1 操作係統架構概述
3.1.1 用戶模式與內核模式
3.1.2 進程
3.1.3 係統調用
3.1.4 線程
3.2 進程內存管理
3.2.1 內存頁
3.2.2 內存保護
3.2.3 匿名內存和內存映射
3.2.4 地址空間布局隨機化
3.2.5 棧的實現
3.2.6 共享內存
第4章 Arm架構
4.1 架構和配置文件
4.2 Armv8-A架構
4.2.1 異常級別
4.2.2 Armv8-A執行狀態
4.3 AArch64執行狀態
4.3.1 A64指令集
4.3.2 AArch64寄存器
4.3.3 PSTATE
4.4 AArch32執行狀態
4.4.1 A32和T32指令集
4.4.2 AArch32寄存器
4.4.3 當前程序狀態寄存器
4.4.4 執行狀態寄存器
第5章 數據處理指令
5.1 移位和循環移位
5.1.1 邏輯左移
5.1.2 邏輯右移
5.1.3 算術右移
5.1.4 循環右移
5.1.5 帶擴展的循環右移
5.1.6 指令形式
5.1.7 位域操作
5.2 邏輯運算
5.2.1 位與
5.2.2 位或
5.2.3 位異或
5.3 算術運算
5.3.1 加法和減法
5.3.2 比較
5.4 乘法運算
5.4.1 A64中的乘法運算
5.4.2 A32/T32中的乘法運算
5.5 除法運算
5.6 移動操作
5.6.1 移動常量立即數
5.6.2 移動寄存器
5.6.3 移動取反
第6章 內存訪問指令
6.1 指令概述
6.2 尋址模式和偏移形式
6.2.1 偏移尋址
6.2.2 前索引尋址
6.2.3 後索引尋址
6.2.4 字麵值尋址
6.3 加載和存儲指令
6.3.1 加載和存儲字或雙字
6.3.2 加載和存儲半字或字節
6.3.3 A32多重加載和存儲
6.3.4 A64加載和存儲對
第7章 條件執行
7.1 條件執行概述
7.2 條件碼
7.2.1 NZCV條件標誌
7.2.2 條件碼
7.3 條件指令
7.4 標誌設置指令
7.4.1 指令的S後綴
7.4.2 測試和比較指令
7.5 條件選擇指令
7.6 條件比較指令
7.6.1 使用CCMP的布爾與條件
7.6.2 使用CCMP的布爾或條件
第8章 控製流
8.1 分支指令
8.1.1 條件分支和循環
8.1.2 測試和比較分支
8.1.3 表分支
8.1.4 分支和切換
8.1.5 子程序分支
8.2 函數和子程序
8.2.1 程序調用標準
8.2.2 易失性和非易失性寄存器
8.2.3 參數和返回值
8.2.4 傳遞較大值
8.2.5 葉子函數和非葉子函數
第二部分 逆向工程
第9章 Arm環境
9.1 Arm板
9.2 使用QEMU模擬虛擬環境
9.2.1 QEMU用戶模式模擬
9.2.2 QEMU係統模式模擬
第10章 靜態分析
10.1 靜態分析工具
10.1.1 命令行工具
10.1.2 反匯編器和反編譯器
10.1.3 Binary Ninja Cloud
10.2 引用調用示例
10.3 控製流分析
10.3.1 main函數
10.3.2 子程序
10.3.3 轉換為字符
10.3.4 if語句
10.3.5 商除法
10.3.6 for循環
10.4 算法分析
第11章 動態分析
11.1 命令行調試
11.1.1 GDB命令
11.1.2 GDB多用戶模式
11.1.3 GDB擴展:GEF
11.1.4 Radare2
11.2 遠程調試
11.2.1 Radare2
11.2.2 IDA Pro
11.3 調試內存損壞
11.4 使用GDB調試進程
第12章 逆向arm64架構的macOS惡意軟件
12.1 背景
12.1.1 macOS arm64二進製文件
12.1.2 macOS Hello World(arm64)
12.2 尋找惡意arm64二進製文件
12.3 分析arm64惡意軟件
12.3.1 反分析技術
12.3.2 反調試邏輯(通過ptrace)
12.3.3 反調試邏輯(通過sysctl)
12.3.4 反虛擬機邏輯(通過SIP狀態和VM遺留物檢測)
12.4 總結
譯者簡介
封底
版權信息
作者簡介
譯者序
前言
致謝
作者簡介
第一部分 Arm匯編內部機製
第1章 逆向工程簡介
1.1 匯編簡介
1.1.1 位和字節
1.1.2 字符編碼
1.1.3 機器碼和匯編
1.1.4 匯編
1.2 高級語言
1.3 反匯編
1.4 反編譯
第2章 ELF文件格式的內部結構
2.1 程序結構
2.2 高級語言與低級語言
2.3 編譯過程
2.3.1 不同架構的交叉編譯
2.3.2 匯編和鏈接
2.4 ELF文件概述
2.5 ELF文件頭
2.5.1 ELF文件頭信息字段
2.5.2 目標平台字段
2.5.3 程序入口點字段
2.5.4 表位置字段
2.6 ELF程序頭
2.6.1 PHDR程序頭
2.6.2 INTERP程序頭
2.6.3 LOAD程序頭
2.6.4 DYNAMIC程序頭
2.6.5 NOTE程序頭
2.6.6 TLS程序頭
2.6.7 GNU_EH_FRAME程序頭
2.6.8 GNU_STACK程序頭
2.6.9 GNU_RELRO程序頭
2.7 ELF節頭
2.7.1 ELF meta節
2.7.2 主要的ELF節
2.7.3 ELF符號
2.8 .dynamic節和動態加載
2.8.1 依賴項加載
2.8.2 程序重定位
2.8.3 ELF程序的初始化和終止節
2.9 線程本地存儲
2.9.1 local-exec TLS訪問模型
2.9.2 initial-exec TLS訪問模型
2.9.3 general-dynamic TLS訪問模型
2.9.4 local-dynamic TLS訪問模型
第3章 操作係統基本原理
3.1 操作係統架構概述
3.1.1 用戶模式與內核模式
3.1.2 進程
3.1.3 係統調用
3.1.4 線程
3.2 進程內存管理
3.2.1 內存頁
3.2.2 內存保護
3.2.3 匿名內存和內存映射
3.2.4 地址空間布局隨機化
3.2.5 棧的實現
3.2.6 共享內存
第4章 Arm架構
4.1 架構和配置文件
4.2 Armv8-A架構
4.2.1 異常級別
4.2.2 Armv8-A執行狀態
4.3 AArch64執行狀態
4.3.1 A64指令集
4.3.2 AArch64寄存器
4.3.3 PSTATE
4.4 AArch32執行狀態
4.4.1 A32和T32指令集
4.4.2 AArch32寄存器
4.4.3 當前程序狀態寄存器
4.4.4 執行狀態寄存器
第5章 數據處理指令
5.1 移位和循環移位
5.1.1 邏輯左移
5.1.2 邏輯右移
5.1.3 算術右移
5.1.4 循環右移
5.1.5 帶擴展的循環右移
5.1.6 指令形式
5.1.7 位域操作
5.2 邏輯運算
5.2.1 位與
5.2.2 位或
5.2.3 位異或
5.3 算術運算
5.3.1 加法和減法
5.3.2 比較
5.4 乘法運算
5.4.1 A64中的乘法運算
5.4.2 A32/T32中的乘法運算
5.5 除法運算
5.6 移動操作
5.6.1 移動常量立即數
5.6.2 移動寄存器
5.6.3 移動取反
第6章 內存訪問指令
6.1 指令概述
6.2 尋址模式和偏移形式
6.2.1 偏移尋址
6.2.2 前索引尋址
6.2.3 後索引尋址
6.2.4 字麵值尋址
6.3 加載和存儲指令
6.3.1 加載和存儲字或雙字
6.3.2 加載和存儲半字或字節
6.3.3 A32多重加載和存儲
6.3.4 A64加載和存儲對
第7章 條件執行
7.1 條件執行概述
7.2 條件碼
7.2.1 NZCV條件標誌
7.2.2 條件碼
7.3 條件指令
7.4 標誌設置指令
7.4.1 指令的S後綴
7.4.2 測試和比較指令
7.5 條件選擇指令
7.6 條件比較指令
7.6.1 使用CCMP的布爾與條件
7.6.2 使用CCMP的布爾或條件
第8章 控製流
8.1 分支指令
8.1.1 條件分支和循環
8.1.2 測試和比較分支
8.1.3 表分支
8.1.4 分支和切換
8.1.5 子程序分支
8.2 函數和子程序
8.2.1 程序調用標準
8.2.2 易失性和非易失性寄存器
8.2.3 參數和返回值
8.2.4 傳遞較大值
8.2.5 葉子函數和非葉子函數
第二部分 逆向工程
第9章 Arm環境
9.1 Arm板
9.2 使用QEMU模擬虛擬環境
9.2.1 QEMU用戶模式模擬
9.2.2 QEMU係統模式模擬
第10章 靜態分析
10.1 靜態分析工具
10.1.1 命令行工具
10.1.2 反匯編器和反編譯器
10.1.3 Binary Ninja Cloud
10.2 引用調用示例
10.3 控製流分析
10.3.1 main函數
10.3.2 子程序
10.3.3 轉換為字符
10.3.4 if語句
10.3.5 商除法
10.3.6 for循環
10.4 算法分析
第11章 動態分析
11.1 命令行調試
11.1.1 GDB命令
11.1.2 GDB多用戶模式
11.1.3 GDB擴展:GEF
11.1.4 Radare2
11.2 遠程調試
11.2.1 Radare2
11.2.2 IDA Pro
11.3 調試內存損壞
11.4 使用GDB調試進程
第12章 逆向arm64架構的macOS惡意軟件
12.1 背景
12.1.1 macOS arm64二進製文件
12.1.2 macOS Hello World(arm64)
12.2 尋找惡意arm64二進製文件
12.3 分析arm64惡意軟件
12.3.1 反分析技術
12.3.2 反調試邏輯(通過ptrace)
12.3.3 反調試邏輯(通過sysctl)
12.3.4 反虛擬機邏輯(通過SIP狀態和VM遺留物檢測)
12.4 總結
譯者簡介
封底
最後修改:2025 年 10 月 30 日
© 允許規範轉載
