Assembly-Language for pwn

NPCMike Lv.99

這篇筆記從組合語言的基本觀念出發,整理 x86-64 常見暫存器、指令與範例,並說明它為什麼會是學習 PWN 與漏洞利用時不可或缺的基礎能力。

介紹組語

組合語言(Assembly Language)是一種低階程式語言,是介於機器碼與高階語言(Java、Python、C/C++ 等)之間的橋樑。

與高階語言相比,組合語言能更精確地控制硬體行為,並提供對 CPU、記憶體及周邊設備的直接訪問。在學習 PWN(漏洞利用)時,熟悉組合語言有助於分析程式執行流程、理解漏洞成因以及構造漏洞利用方法。

組合語言的優勢

  • 高效能與精確性:直接操作硬體,沒有多餘的抽象層。
  • 全面可見性:能查看程式的每一步執行細節。
  • 彈性控制:允許開發者手動優化程式,實現高效能目標。

組合語言在 PWN 的用途

  • 漏洞排查與調試:使用 GDB 等工具觀察程式執行的組合語言指令。
  • Shellcode 編寫:設計小型程式碼以實現特定目標。
  • ROP(Return-Oriented Programming):拼湊現有指令來執行任意程式邏輯。

基本語法

指令結構

組合語言的每一行程式碼通常包含三部分:

結構 說明
Label 用於指示位置,類似於函數或變數名稱
Opcode 執行的指令,如 movaddjmp
Operands 指令操作的目標,如暫存器、記憶體地址或立即數

以下為範例:

1
2
3
4
5
6
7
8
9
10
11
12
section .data
msg db 'Hello, World!', 0

section .text
global _start

_start:
mov rax, 1 ; 系統呼叫號:write
mov rdi, 1 ; 第一參數:stdout
mov rsi, msg ; 第二參數:字串地址
mov rdx, 13 ; 第三參數:字串長度
syscall ; 呼叫內核

暫存器

常見的 x86-64 暫存器功能如下:

暫存器 用途
RAX 通常用於系統呼叫編號與函數返回值
RDI 第一個參數
RSI 第二個參數
RDX 第三個參數
RSP 堆疊指標
RBP 基底指標,在 BOF 分析時很重要

基本指令

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
; 資料搬移指令
mov rax, rbx ; rax = rbx
mov rdx, 0x10 ; rdx = 0x10
lea rax, [rbx+4] ; rax = rbx + 4 的地址

; 算術操作指令
add rax, rbx ; rax += rbx
sub rax, 5 ; rax -= 5
imul rax, rbx ; rax = rax * rbx
mov rax, 10
mov rbx, 3
idiv rbx ; 商存於 rax,餘數存於 rdx

; 邏輯運算指令
and rax, 0xFF ; rax &= 0xFF
or rax, rbx ; rax |= rbx
xor rax, rax ; rax = 0
not rax ; rax = ~rax

; 比較與跳轉指令
cmp rax, rbx
je label
jne label
jg label
jl label

; 堆疊操作指令
push rax
pop rbx
call function
ret

; 流程控制指令
jmp label
mov rcx, 5

loop_start:
; 迴圈內代碼
loop loop_start

; 系統呼叫
mov rax, 60
xor rdi, rdi
syscall
nop

介紹 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.
Comments