求真百科歡迎當事人提供第一手真實資料,洗刷冤屈,終結網路霸凌。

ARM匯編與逆向工程藍狐卷基礎知識檢視原始碼討論檢視歷史

事實揭露 揭密真相
前往: 導覽搜尋

來自 孔夫子網 的圖片

ARM匯編與逆向工程藍狐卷基礎知識》,瑪麗亞·馬克斯特德 著,出版社: 機械工業出版社。

機械工業出版社成立於1950年,是建國後國家設立的第一家科技出版社,前身為科學技術出版社,1952年更名為機械工業出版社[1]。機械工業出版社(以下簡稱機工社)由機械工業信息研究院作為主辦單位,目前隸屬於國務院國資委[2]

內容簡介

本書由兩部分組成。第I部分首先概述ELF文件格式和操作系統的內部結構,然後介紹Arm架構基礎知識,並深入探討A32和A指令集;第II部分深入探討逆向工程括Arm環境、靜態分析和動態分析,以及固件提取和模擬分析等關鍵主題。本書末尾講解在macOS中基於Arm的M1 SoC編譯的制文件的惡意軟件分析。 通過閱讀本書,讀者可以深入理解Arm的指令和控制流模式,這對於針對Arm架構編譯的軟件的逆向工程至關重要。為幫助逆向工程師和研究人員更好地理解逆向工程,本書深入介紹了逆向工程的各個方面,具括: ?? Arm架構的AArch32和AArch指令集狀態,以及ELF文件格式內部結構; ?? Arm匯編內部機制的詳細信息,可供逆向工程師分析惡意軟件和審計軟件漏洞使用,以及尋求Arm匯編語言詳細知識的開發人員使用; ?? Armv8-A架構支持的A32/T32和A指令集,以及常見的指令和控制流模式; ?? 用於靜態和動態制分析的已知逆向工程工具; ?? 在Linux上對Arm制文行反匯編和調試的過程,以及常用的反匯編和調試工具。

目錄

譯者序 前言 致謝 作者簡介 部分 Arm匯編內部機制 第1章 逆向工程簡介 2 1.1 匯編簡介 2 1.1.1 位和字節 2 1.1.2 字符編碼 3 1.1.3 機器碼和匯編 4 1.1.4 匯編 6 1.2 高級語言 11 1.3 反匯編 12 1.4 反編譯 13 第2章 ELF文件格式的內部結構 15 2.1 程序結構 15 2.2 高級語言與低級語言 16 2.3 編譯過程 17 2.3.1 不同架構的交叉編譯 18 2.3.2 匯編和鏈接 2.4 ELF文件概述 22 2.5 ELF文件頭 23 2.5.1 ELF文件頭信息字段 24 2.5.2 目標平台字段 24 2.5.3 程序入口點字段 25 2.5.4 表位置字段 25 2.6 ELF程序頭 26 2.6.1 PHDR 程序頭 27 2.6.2 INTERP程序頭 27 2.6.3 LOAD程序頭 27 2. DYNAMIC程序頭 28 2.6.5 NOTE程序頭 28 2.6.6 TLS程序頭 29 2.6.7 GNU_EH_FRAME程序頭 29 2.6.8 GNU_STACK程序頭 29 2.6.9 GNU_RELRO程序頭 31 2.7 ELF節頭 33 2.7.1 ELF meta節 35 2.7.2 主要的ELF節 36 2.7.3 ELF符號 37 2.8 .dynamic節和動態加載 40 2.8.1 依賴項加載 41 2.8.2 程序重定位 41 2.8.3 ELF程序的初始化和終止節 44 2.9 線程本地存儲 47 2.9.1 local-exec TLS訪問模型 50 2.9.2 initial-exec TLS訪問模型 50 2.9.3 general-dynamic TLS訪問模型 51 2.9.4 local-dynamic TLS訪問模型 52 第3章 操作系統基本原理 54 3.1 操作系統架構概述 54 3.1.1 用戶模式與內核模式 54 3.1.2 程 55 3.1.3 系統調用 56 3.1.4 線程 62 3.2 程內存管理 63 3.2.1 內存頁 3.2.2 內存保護 65 3.2.3 匿名內存和 65 3.2.4 地址空間布局隨機化 69 3.2.5 棧的實現 71 3.2.6 共享內存 72 第4章 Arm架構 74 4.1 架構和配置文件 74 4.2 Armv8-A架構 75 4.2.1 異常級別 7.2.2 Armv8-A執行狀態 81 4.3 AArch執行狀態 82 4.3.1 A指令集 82 4.3.2 AArch寄存器 83 4.3.3 PSTATE 89 4.4 AArch32執行狀態 90 4.4.1 A32和T32指令集 91 4.4.2 AArch32寄存器 94 4.4.3 當前程序狀態寄存器 9.4.4 執行狀態寄存器 99 第5章 數據處理指令 103 5.1 移位和循環移位 105 5.1.1 邏輯左移 105 5.1.2 邏輯右移 106 5.1.3 算術右移 106 5.1.4 循環右移 107 5.1.5 帶擴展的循環右移 107 5.1.6 指令形式 107 5.1.7 位域操作 112 5.2 邏輯運算 1 5.2.1 位與 121 5.2.2 位或 122 5.2.3 位異或 124 5.3 算術運算 125 5.3.1 加法和減法 125 5.3.2 比較 127 5.4 乘法運算 130 5.4.1 A中的乘法運算 130 5.4.2 A32/T32中的乘法運算 131 5.5 除法運算 145 5.6 移動操作 146 5.6.1 移動常量立即數 146 5.6.2 移動寄存器 149 5.6.3 移動取反 150 第6章 內存訪問指令 151 6.1 指令概述 151 6.2 尋址模式和偏移形式 152 6.2.1 偏移尋址 155 6.2.2 前索引尋址 162 6.2.3 後索引尋址 1 6.2.4 字面值尋址 166 6.3 加載和存儲指令 172 6.3.1 加載和存儲字或雙字 172 6.3.2 加載和存儲半字或字節 174 6.3.3 A32多重加載和存儲 177 6.3.4 A加載和存儲對 186 第7章 條件執行 189 7.1 條件執行概述 189 7.2 條件碼 190 7.2.1 NZCV條件標誌 190 7.2.2 條件碼 193 7.3 條件指令 194 7.4 標誌設置指令 197 7.4.1 指令的S後綴 197 7.4.2 測試和比較指令 1 7.5 條件選擇指令 7 7.6 條件比較指令 9 7.6.1 使用CCMP的布爾與條件 210 7.6.2 使用CCMP的布爾或條件 212 第8章 控制流 215 8.1 分支指令 215 8.1.1 條件分支和循環 216 8.1.2 測試和比較分支 219 8.1.3 表分支 2 8.1.4 分支和切換 222 8.1.5 子程序分支 225 8.2 函數和子程序 227 8.2.1 程序調用標準 227 8.2.2 易失性和非易失性寄存器 228 8.2.3 參數和返回值 229 8.2.4 傳遞較大值 230 8.2.5 葉子函數和非葉子函數 233 第二部分 逆向工程 第9章 Arm環境 240 9.1 Arm板 241 9.2 使用QEMU模擬虛擬環境 242 9.2.1 QEMU用戶模式模擬 243 9.2.2 QEMU系統模式模擬 246 第10章 靜態分析 252 10.1 靜態分析工具 252 10.1.1 命令行工具 253 10.1.2 反匯編器和反編譯器 253 10.1.3 Binary Ninja Cloud 254 10.2 引用調用示例 258 10.3 控制流分析 263 10.3.1 mn函數 2 10.3.2 子程序 265 10.3.3 轉換為字符 269 10.3.4 if語句 270 10.3.5 商除法 272 10.3.6 for循環 273 10.4 算法分析 275 第11章 動態分析 288 11.1 命令行調試 289 11.1.1 GDB命令 289 11.1.2 GDB多用戶模式 290 11.1.3 GDB擴展:GEF 292 11.1.4 Radare2 303 11.2 遠程調試 308 11.2.1 Radare2 309 11.2.2 IDA Pro 309 11.3 調試內存損壞 311 11.4 使用GDB調程 319 第12章 逆向arm架構的macOS 惡意軟件 325 12.1 背景 326 12.1.1 macOS arm制文件 326 12.1.2 macOS Hello World(arm) 329 12.2 尋找惡意arm制文件 331 12.3 分析arm惡意軟件 337 12.3.1 反分析技術 338 12.3.2 反調試邏輯(通過ptrace) 339 12.3.3 反調試邏輯(通過sysctl) 342 12.3.4 反虛擬機邏輯(通過SIP狀態 和VM物檢測) 346 12.4 結 351

參考文獻