dreamhackμ ν΅ν΄ 곡λΆν λ΄μ©μ μ 리ν ν¬μ€νΈμ λλ€.
νΌμ°μ°μ μ’ λ₯
- μμ
- λ μ§μ€ν°
- λ©λͺ¨λ¦¬ (BYTE(1), WORD(2), DWORD(4), QWORD(8))
λ°μ΄ν°μ μ΄λ
- MOV a, b => bμ μλ κ°μ aμ λμ
- LEA a,b => bμ μ£Όμκ°μ aμ λμ
EX)
mov eax, dword ptr ss:[ebp-4] μ κ²½μ°μλ [ebp-4]κ° νλμ μ£Όμλ‘ ν΄λΉ μ£Όμμ κ°μ eaxμ λμ νλ€.
lea eax, dword ptr ss:[ebp-4] μ κ²½μ°μλ mov eax, ebp νμ sub eax,4 λ₯Ό νλ κ²κ³Ό κ°λ€.
+) [ ] κΈ°νΈλ μ£Όμμ μ°Έμ‘°κ°μ μλ―Ένλ©° [ ] μμμ μ£Όμμ μ¬μΉ μ°μ°μ΄ μ΄λ£¨μ΄μ§λ€.
μ°μ μ°μ°
- add a,b => a= a+b
- sub a,b => a = a-b
- inc a,b => a = a+1
- dec a,b => a = a-1
λ Όλ¦¬μ°μ°
- and a,b => aμ b λͺ¨λ λΉνΈκ° 1μ΄λ©΄ 1
- or a,b => λμ€μ νλλΌλ 1μ΄λ©΄ 1
- xor a,b => λμ΄ λ¬λΌμΌ 1
- not a,b => λΉνΈ λ°μ
λΉκ΅
- cmp a,b => λ νΌμ°μ°μλ₯Ό λΉΌμ λμ λΉκ΅ (κ²°κ³Όλ aμ μ μ₯λμ§ μμΌλ©° μ€μ λ νλκ·Έλ₯Ό λ³΄κ³ κ²°κ³Ό νλ¨)
- test a,b => λ νΌμ°μ°μ AND μ°μ° ( λ§μ°¬κ°μ§λ‘ κ²°κ³Όλ aμ μ μ₯λμ§ μμΌλ©° μ€μ λ νλκ·Έλ₯Ό λ³΄κ³ κ²°κ³Ό νλ¨)
λΆκΈ°
- jmp => ν΄λΉ μ£Όμλ‘ μ ν -> μ μΌλ‘ λμκ° μ μμ μμ μ΄λ.
- je => jump if equal (μ§μ μ cmp λ±μΌλ‘ λΉκ΅ν λ νΌμ°μ°μμ κ°μ΄ κ°μΌλ©΄ μ ν!)
- jg => μ§μ μ λΉκ΅ν λ νΌμ°μ°μ μ€ μ μκ° λ ν¬λ©΄ μ ν
μ€ν
- push val => valμ μ€ν μ΅μλ¨μ μμ (rspλ₯Ό 8λ§νΌ λΊ = μμ μμ)
- pop reg => μ€ν μ΅μλ¨μ κ°μ κΊΌλ΄μ regμ λμ (rsp 8 λν¨ = μλλ‘ λ΄λ €κ°)
νλ‘μμ
- νΉμ κΈ°λ₯μ μννλ μ½λ μ‘°κ°
- call : νλ‘μμ λ₯Ό λΆλ₯΄λ νμ
- return : νλ‘μμ μμ λμμ€λ κ²
( call λ€μμ λͺ λ Ήμ΄ μ£Όμλ₯Ό μ€νμ μ μ₯νκ³ ripλ ν΄λΉ μ£Όμλ₯Ό κ°λ¦¬ν€κ² ν΄μ μλμ μ€ννλ¦μΌλ‘ λμμ¨λ€. )
( ripλ νλ‘κ·Έλ¨ μΉ΄μ΄ν°! )
- call addr : νλ‘μμ νΈμΆ (push return_address / jmp addr )
- leave : μ€ν νλ μ μ 리 (mov esp,ebp / pop ebp )
- ret addr ( pop rip )
μμ€ν μ½(System call)μ΄λ ?
-> μ μ λͺ¨λμμ 컀λλͺ¨λμ μμ€ν μννΈμ¨μ΄μκ² μ΄λ ν λμμ μμ²ν λ μ¬μ© ( syscall )
ex) cat flag ( νμΌ μ½κΈ° )
μμ²: rax
μΈμ μμ: rdi → rsi → rdx → rcx → r8 → r9 → stack
[Dream Hack Assembly Quiz -1 ]
endλ‘ μ ννλ©΄ νλ‘κ·Έλ¨μ΄ μ’ λ£λλ€κ³ κ°μ νμ. νλ‘κ·Έλ¨μ΄ μ’ λ£λμ λ, 0x400000 λΆν° 0x400019κΉμ§μ λ°μ΄ν°λ₯Ό λμλλ μμ€ν€ λ¬Έμλ‘ λ³ννλ©΄ μ΄λ λ¬Έμμ΄μ΄ λμ€λκ°?
[Register]
rcx = 0
rdx = 0
rsi = 0x400000
=======================
[Memory]
0x400000 | 0x67 0x55 0x5c 0x53 0x5f 0x5d 0x55 0x10
0x400008 | 0x44 0x5f 0x10 0x51 0x43 0x43 0x55 0x5d
0x400010 | 0x52 0x5c 0x49 0x10 0x47 0x5f 0x42 0x5c
0x400018 | 0x54 0x11 0x00 0x00 0x00 0x00 0x00 0x00
=======================
[code]
1: mov dl, BYTE PTR[rsi+rcx]
2: xor dl, 0x30
3: mov BYTE PTR[rsi+rcx], dl
4: inc rcx
5: cmp rcx, 0x19
6: jg end
7: jmp 1
x86 μ΄μ λΈλ¦¬μ κ²½μ° λ¦¬νμλμ λ°©μμΌλ‘ λ©λͺ¨λ¦¬ μ μ₯νλλ―..!(---> μ£Όμ μ¦κ°λ°©ν₯)
[νμ΄]
1. BYTE PTR μ κ²½μ° 1λ°μ΄νΈλ₯Ό μ§μ ν¨. dl λ μ§μ€ν° λν λ§μ°¬κ°μ§λ‘ νμ 1λ°μ΄νΈλ₯Ό μ μ₯νλ λ μ§μ€ν°
rsi+rcx = 0x400000 + 0 μ μ£Όμ μ°Έμ‘°κ°μ 0x67 0x55 0x5c 0x53 0x5f 0x5d 0x55 0x10 μ΄λ―λ‘
dl = 0x67μ
2. dl = 0x67 XOR 0x30 = 0x57
3. 0x400000 μ리μ νμ 1λ°μ΄νΈλ₯Ό dlκ°μΌλ‘ λ£μ΄μ€ (0x57)
4. rcx =1 λ‘ μ¦κ°
5. rcxμ 0x19 λΉκ΅
6. rcxκ° λ ν¬μ§ μμΌλ―λ‘ 1λ‘ μ ν
μμ€ν€μ½λ 0x57= 'W'
=====================================================================
1. 0x400000+1 μ μ£Όμ μ°Έμ‘°κ° 1λ°μ΄νΈ 0x55λ₯Ό dlμ λμ
2. dl = 0x55 XOR 0x30 = 0x65
..
μ΄κ±Έ jg λ₯Ό ν΅κ³Όν λκΉμ§ λ°λ³΅νλ€!!
μ λ΅ : Welcome to assembly world!
[Dream Hack Assembly Quiz -2 ]
λ€μ μ΄μ λΈλ¦¬ μ½λλ₯Ό μ€ννμ λ μΆλ ₯λλ κ²°κ³Όλ‘ μ¬λ°λ₯Έ κ²μ?
[Code]
main:
push rbp // μ€νμ rbp λ£μ
mov rbp, rsp // rbpμ rsp λμ
(μ€ν νλ μ μμ±)
mov esi, 0xf // esi = 0xf(15)
mov rdi, 0x400500 // rdi = 0x40050
call 0x400497 <write_n> // ν¨μ νΈμΆ
mov eax, 0x0 // 리ν΄κ° 0
pop rbp // μνλ‘κ·Έ
ret // μνλ‘κ·Έ
write_n:
push rbp // μ€νμ rbp λ£μ
mov rbp, rsp // ν¨μ μ€ν νλ μ μμ±
mov QWORD PTR [rbp-0x8],rdi // QWOD PTR [rbp-0x8] = 0x40050
mov DWORD PTR [rbp-0xc],esi // DWORD PTR [rbp-0xc] = 0xf
xor rdx, rdx // rdx = 0
mov edx, DWORD PTR [rbp-0xc] // edx = 0xf
mov rsi,QWORD PTR [rbp-0x8] // rsi = 0x40050
mov rdi, 0x1 // rdi = 1
mov rax, 0x1 // rax = 1
syscall // syscall νΈμΆ (rax = 1μ΄λ―λ‘ write(1,0x40050,15) νΈμΆ)
pop rbp // ν¨μ μνλ‘κ·Έ
ret // ν¨μ μνλ‘κ·Έ -> μ¦ μ΄μ μ€ν νλ μμΌλ‘μ 볡κ·(ν¨μ λ)
==================================
[Memory]
0x400500 | 0x3037207964343372
0x400508 | 0x003f367562336420
μμ κ°μ΄ μ£Όμμ λ¬μ ν΄μμ ν΄λ³΄μλ€.
writeν¨μμ κ° μΈμλ (μΆλ ₯ μ€νΈλ¦Ό, μΆλ ₯ λ²νΌ, μΆλ ₯ κΈΈμ΄)λ₯Ό λνλ
μ¦ 1μ stdoutμ΄κ³ 15κΈΈμ΄μ 0x400500 λ©λͺ¨λ¦¬ μ£Όμμ λ€μ΄μλ 0x3037207964343372λ₯Ό μμ€ν€μ½λλ₯Ό μ΄μ©ν΄ λ¬Έμλ‘ λ³ννλ μ λ΅μ΄ λμλ€.!!
μ λ΅ : r34dy 70 d3bu6?
'Hacking > System Hacking' μΉ΄ν κ³ λ¦¬μ λ€λ₯Έ κΈ
pwntools μ¬μ©λ² (0) | 2022.03.28 |
---|---|
gdb μ¬μ©λ² μ΅νκΈ° (0) | 2022.03.28 |
[μμ€ν ]ν¨μ νλ‘€λ‘κ·Έ, μνλ‘κ·Έ (0) | 2020.08.02 |
[μμ€ν ]μ΄μ λΈλ¦¬μ΄ κΈ°μ΄, λͺ λ Ήμ΄ μ 리 (0) | 2020.08.02 |
[μμ€ν ]Buffer Overflow (0) | 2020.08.02 |