Assembly-Language for pwn
這篇筆記從組合語言的基本觀念出發,整理 x86-64 常見暫存器、指令與範例,並說明它為什麼會是學習 PWN 與漏洞利用時不可或缺的基礎能力。
介紹組語
組合語言(Assembly Language)是一種低階程式語言,是介於機器碼與高階語言(Java、Python、C/C++ 等)之間的橋樑。
與高階語言相比,組合語言能更精確地控制硬體行為,並提供對 CPU、記憶體及周邊設備的直接訪問。在學習 PWN(漏洞利用)時,熟悉組合語言有助於分析程式執行流程、理解漏洞成因以及構造漏洞利用方法。
組合語言的優勢
- 高效能與精確性:直接操作硬體,沒有多餘的抽象層。
- 全面可見性:能查看程式的每一步執行細節。
- 彈性控制:允許開發者手動優化程式,實現高效能目標。
組合語言在 PWN 的用途
- 漏洞排查與調試:使用 GDB 等工具觀察程式執行的組合語言指令。
- Shellcode 編寫:設計小型程式碼以實現特定目標。
- ROP(Return-Oriented Programming):拼湊現有指令來執行任意程式邏輯。
基本語法
指令結構
組合語言的每一行程式碼通常包含三部分:
| 結構 | 說明 |
|---|---|
| Label | 用於指示位置,類似於函數或變數名稱 |
| Opcode | 執行的指令,如 mov、add、jmp |
| Operands | 指令操作的目標,如暫存器、記憶體地址或立即數 |
以下為範例:
1 | section .data |
暫存器
常見的 x86-64 暫存器功能如下:
| 暫存器 | 用途 |
|---|---|
| RAX | 通常用於系統呼叫編號與函數返回值 |
| RDI | 第一個參數 |
| RSI | 第二個參數 |
| RDX | 第三個參數 |
| RSP | 堆疊指標 |
| RBP | 基底指標,在 BOF 分析時很重要 |
基本指令
1 | ; 資料搬移指令 |
介紹 PWN
PWN(漏洞利用,Exploit)是網路安全領域的重要主題,主要是利用程式中的漏洞來執行非預期操作。
這些漏洞通常是開發者在設計或編寫程式時留下的缺陷,例如:
- 緩衝區溢位(Buffer Overflow)
- 格式字串漏洞(Format String Vulnerability)
- Heap Overflow
- UAF(Use After Free)
在進行 PWN 攻擊時,攻擊者通常會利用這些漏洞取得程式控制權,進而執行任意程式碼。PWN 也是許多 CTF 競賽和安全測試中常見的領域。
組語在 PWN 中的作用
在 PWN 攻擊中,組合語言扮演非常重要的角色,因為它允許攻擊者直接操控程式的執行過程。
- 漏洞分析:透過組合語言查看程式指令,理解程式如何運行,並找出可能被覆蓋或操控的位置。
- 漏洞利用:製作 shellcode、設計 ROP chain、操作記憶體,並繞過堆疊保護、ASLR 等安全機制。
- 系統呼叫:攻擊者需要觸發 syscall,以便與作業系統互動或控制系統資源。
PWN 的例子
緩衝區溢位
攻擊者透過在緩衝區內寫入超過預期範圍的資料,覆蓋其他重要資料或控制流指令,進而控制程式執行流程。
格式字串漏洞
攻擊者利用格式字串錯誤,改變程式的記憶體內容,並從中讀取或寫入資料。
Return-Oriented Programming
ROP 是一種利用程式中已存在指令來進行攻擊的方法。攻擊者不直接執行 shellcode,而是利用現有指令序列達成目的。
Heap Overflow
攻擊者利用堆積區域的漏洞來操控堆中的資料,通常與程式的記憶體管理有關。
結論
組合語言是 PWN 攻擊中不可或缺的一部分,它使攻擊者能夠精確操控程式的執行流程,並有效利用底層漏洞。
無論是在分析漏洞、編寫 shellcode,還是設計 ROP 攻擊,組合語言都提供了極大的靈活性與控制力。理解組合語言對於學習和掌握 PWN 技術至關重要,也能幫助我們更好地理解漏洞根源並設計防禦機制。
- Title: Assembly-Language for pwn
- Author: NPCMike
- Created at : 2025-01-02 00:00:00
- Updated at : 2026-05-13 16:49:36
- Link: https://npcmike.github.io/2025/01/02/2025-1-2-Assembly-Language-Assembly-Language/
- License: This work is licensed under CC BY-NC-SA 4.0.