x86 Assembly๐ค: Essential Part(1)
์ด์ ๋ธ๋ฆฌ์ x86-64
x86-64 ์ด์ ๋ธ๋ฆฌ
๊ธฐ๋ณธ ๊ตฌ์กฐ
๋ช ๋ น์ด(Operation Code, Opcode)์ ํผ์ฐ์ฐ์(Operand)๋ก ๊ตฌ์ฑ๋๋ค.
๋ช ๋ น์ด
ํผ์ฐ์ฐ์
ํผ์ฐ์ฐ์๋ 3๊ฐ์ง ์ข ๋ฅ๊ฐ ์๋ค.
- ์์
- ๋ ์ง์คํฐ
- ๋ฉ๋ชจ๋ฆฌ
- ๋ฉ๋ชจ๋ฆฌ ํผ์ฐ์ฐ์๋ []์ผ๋ก ๋๋ฌ์ธ์ธ ๊ฒ์ผ๋ก ํํ๋๋ฉฐ, ์์ ํฌ๊ธฐ ์ง์ ์ TYPE PTR์ด ์ถ๊ฐ๋ ์ ์๋ค.
- BYTE 1๋ฐ์ดํธ, WORD 2๋ฐ์ดํธ, DWORD 4๋ฐ์ดํธ, QWORD 8๋ฐ์ดํธ
x86-64 ์ด์ ๋ธ๋ฆฌ ๋ช ๋ น์ด
Opcode: ๋ฐ์ดํฐ ์ด๋
๋ฐ์ดํฐ ์ด๋ ๋ช ๋ น์ด๋ ์ด๋ค ๊ฐ์ ๋ ์ง์คํฐ๋ ๋ฉ๋ชจ๋ฆฌ์ ์ฎ๊ธฐ๋๋ก ์ง์ํ๋ค.
Opcode: ์ฐ์ ์ฐ์ฐ
์ฐ์ ์ฐ์ฐ ๋ช ๋ น์ด๋ ๋ง์ , ๋บ์ , ๊ณฑ์ , ๋๋์ ์ฐ์ฐ์ ์ง์ํ๋ค.
Opcode: ๋ ผ๋ฆฌ ์ฐ์ฐ - and, or
๋ ผ๋ฆฌ ์ฐ์ฐ ๋ช ๋ น์ด๋ and, or, xor, neg ๋ฑ์ ๋นํธ ์ฐ์ฐ์ ์ง์ํ๋ค.
and dst, scr
dst์ scr์ ๋นํธ๊ฐ ๋ชจ๋ 1์ด๋ฉด 1, ์๋๋ฉด 0
or dst, scr
dst์ scr์ ๋นํธ๊ฐ ํ๋๋ผ๋ 1์ด๋ฉด 1, ์๋๋ฉด 0
Opcode: ๋ ผ๋ฆฌ ์ฐ์ฐ - xor, not
xor dst, scr
dst์ scr์ ๋นํธ๊ฐ ์๋ก ๋ค๋ฅด๋ฉด 1, ์๋๋ฉด 0
not op
op์ ๋นํธ ์ ๋ถ ๋ฐ์
Opcode: ๋น๊ต/๋ถ๊ธฐ
๋น๊ต
๋น๊ต ๋ช ๋ น์ด๋ ๋ ํผ์ฐ์ฐ์์ ๊ฐ์ ๋น๊ตํ๊ณ , ํ๋๊ทธ๋ฅผ ์ค์ ํ๋ค.
cmp op1, op2
op1๊ณผ op2๋ฅผ ๋น๊ต
cmp๋ ๋ ํผ์ฐ์ฐ์๋ฅผ ๋นผ์ ๋์๋ฅผ ๋น๊ตํ๋ค.
์๋ก ๊ฐ์ ๋ ์๋ฅผ ๋นผ๋ฉด ๊ฒฐ๊ณผ๊ฐ 0์ด ๋์ด ZFํ๋๊ทธ๊ฐ ์ค์ ๋๋ค. ๋ฐ๋ผ์ CPU๋ ์ด ํ๋๊ทธ๋ฅผ ๋ณด๊ณ ๋ ๊ฐ์ด ๊ฐ์๋์ง ํ๋จํ ์ ์๋ค.
test op1, op2
op1๊ณผ op2๋ฅผ ๋น๊ต
test๋ ๋ ํผ์ฐ์ฐ์์ AND ๋นํธ์ฐ์ฐ์ ์ทจํ๋ค.
0์ด๋ rax๋ฅผ op1๊ณผ op2๋ก ์ผ์ test๋ฅผ ์ํํ๋ฉด, ๊ฒฐ๊ณผ๊ฐ 0์ด๋ฏ๋ก ZFํ๋๊ทธ๊ฐ ์ค์ ๋๋ค. CPU๋ ์ด ํ๋๊ทธ๋ฅผ ๋ณด๊ณ rax๊ฐ 0์ด์๋์ง ํ๋จํ ์ ์๋ค.
๋ถ๊ธฐ
๋ถ๊ธฐ ๋ช ๋ น์ด๋ rip๋ฅผ ์ด๋์์ผ ์คํ ํ๋ฆ์ ๋ฐ๊พผ๋ค.
jmp addr
addr๋ก rip๋ฅผ ์ด๋์ํจ๋ค.
je addr
์ง์ ์ ๋น๊ตํ ๋ ํผ์ฐ์ฐ์๊ฐ ๊ฐ์ผ๋ฉด ์ ํ(jump if equal)
jg addr
์ง์ ์ ๋น๊ตํ ๋ ์ฐ์ฐ์ ์ค ์ ์๊ฐ ๋ ํฌ๋ฉด ์ ํ(jump if greater)
์์ฝ
- ๋ฐ์ดํฐ ์ด๋ ์ฐ์ฐ์
- mov dst, src: src์ ๊ฐ์ dst์ ๋์
- lea dst, src: src์ ์ ํจ ์ฃผ์๋ฅผ dst์ ๋์
- ์ฐ์ ์ฐ์ฐ
- add dst, src: src์ ๊ฐ์ dst์ ๋ํจ
- sub dst, src: src์ ๊ฐ์ dst์์ ๋บ
- inc op: op์ ๊ฐ์ 1 ๋ํจ
- dec op: op์ ๊ฐ์ 1 ๋บ
- ๋
ผ๋ฆฌ ์ฐ์ฐ
- and dst, src: dst์ src๊ฐ ๋ชจ๋ 1์ด๋ฉด 1, ์๋๋ฉด 0
- or dst, src: dst์ src์ค ํ ์ชฝ์ด๋ผ๋ 1์ด๋ฉด 1, ์๋๋ฉด 0
- xor dst, src: dst์ src๊ฐ ๋ค๋ฅด๋ฉด 1, ๊ฐ์ผ๋ฉด 0
- not op: op์ ๋นํธ๋ฅผ ๋ชจ๋ ๋ฐ์
- ๋น๊ต
- cmp op1, op2: op1์์ op2๋ฅผ ๋นผ๊ณ ํ๋๊ทธ๋ฅผ ์ค์
- test op1, op2: op1๊ณผ op2์ AND ์ฐ์ฐ์ ํ๊ณ , ํ๋๊ทธ๋ฅผ ์ค์
- ๋ถ๊ธฐ
- jmp addr: addr๋ก rip ์ด๋
- je addr: ์ง์ ๋น๊ต์์ ๋ ํผ์ฐ์ฐ์์ ๊ฐ์ด ๊ฐ์ ๊ฒฝ์ฐ addr๋ก rip ์ด๋
- jg addr: ์ง์ ๋น๊ต์์ ๋ ํผ์ฐ์ฐ์ ์ค ์ ์์ ๊ฐ์ด ๋ ํด ๊ฒฝ์ฐ addr๋ก rip ์ด๋
x86 Assembly๐ค: Essential Part(2)
x86-64 ์ด์ ๋ธ๋ฆฌ ๋ช ๋ น์ด2
Opcode: ์คํ
push val
val์ ์คํ ์ต์๋จ์ ์์
pop reg
์คํ ์ต์๋จ์ ๊ฐ์ ๊บผ๋ด์ reg์ ๋์
Opcode: ํ๋ก์์
ํ๋ก์์ ๋ ํน์ ๊ธฐ๋ฅ์ ์ํํ๋ ์ฝ๋ ์กฐ๊ฐ์ด๋ค.
ํ๋ก์์ ๋ฅผ ์ฌ์ฉํ๋ฉด ๋ฐ๋ณต๋๋ ์ฐ์ฐ์ ํ๋ก์์ ํธ์ถ๋ก ๋์ฒดํ ์ ์์ด์ ์ ์ฒด ์ฝ๋์ ํฌ๊ธฐ๋ฅผ ์ค์ผ ์ ์์ผ๋ฉฐ, ๊ธฐ๋ฅ๋ณ๋ก ์ฝ๋ ์กฐ๊ฐ์ ์ด๋ฆ์ ๋ถ์ผ ์ ์๊ฒ ๋์ด ์ฝ๋์ ๊ฐ๋ ์ฑ์ ํฌ๊ฒ ๋์ผ ์ ์๋ค.
ํ๋ก์์ ๋ฅผ ๋ถ๋ฅด๋ ํ์๋ฅผ ํธ์ถ(Call)์ด๋ผ๊ณ ๋ถ๋ฅด๋ฉฐ, ํ๋ก์์ ์์ ๋์์ค๋ ๊ฒ์ ๋ฐํ(Return)์ด๋ผ๊ณ ํ๋ค.
ํ๋ก์์ ๋ฅผ ํธ์ถํ ๋๋ ํ๋ก์์ ๋ฅผ ์คํํ๊ณ ๋์ ์๋์ ์คํ ํ๋ฆ์ผ๋ก ๋์์์ผ ํ๋ฏ๋ก, call ๋ค์์ ๋ช ๋ น์ด ์ฃผ์(Return Address, ๋ฐํ ์ฃผ์)๋ฅผ ์คํ์ ์ ์ฅํ๊ณ ํ๋ก์์ ๋ก rip๋ฅผ ์ด๋์ํจ๋ค.
call addr
addr์ ์์นํ ํ๋ก์์ ํธ์ถ
leave
์คํ ํ๋ ์ ์ ๋ฆฌ
ret
return address๋ก ๋ฐํ
Opcode: ์์คํ ์ฝ
์ด์์ฒด์ ๋ ์ฐ๊ฒฐ๋ ๋ชจ๋ ํ๋์จ์ด ๋ฐ ์ํํธ์จ์ด์ ์ ๊ทผํ ์ ์์ผ๋ฉฐ, ์ด๋ค์ ์ ์ดํ ์๋ ์๋ค.
ํดํน์ผ๋ก๋ถํฐ ๊ถํ์ ๋ณดํธํ๊ธฐ ์ํด ์ปค๋ ๋ชจ๋์ ์ ์ ๋ชจ๋๋ก ๊ถํ์ ๋๋๋ค.
์ปค๋ ๋ชจ๋
- ์ด์์ฒด์ ๊ฐ ์ ์ฒด ์์คํ ์ ์ ์ดํ๊ธฐ ์ํด ์์คํ ์ํํธ์จ์ด์ ๋ถ์ฌํ๋ ๊ถํ
- ํ์ผ์์คํ , ์ ๋ ฅ/์ถ๋ ฅ, ๋คํธ์ํฌ ํต์ , ๋ฉ๋ชจ๋ฆฌ ๊ด๋ฆฌ ๋ฑ ๋ชจ๋ ์ ์์ค์ ์์ ์ ์ฌ์ฉ์ ๋ชจ๋ฅด๊ฒ ์ปค๋ ๋ชจ๋์์ ์งํ
์ ์ ๋ชจ๋
- ์ด์์ฒด์ ๊ฐ ์ฌ์ฉ์์๊ฒ ๋ถ์ฌํ๋ ๊ถํ
์์คํ ์ฝ
- ์ ์ ๋ชจ๋์์ ์ปค๋ ๋ชจ๋์ ์์คํ ์ํํธ์จ์ด์๊ฒ ์ด๋ค ๋์์ ์์ฒญํ๊ธฐ ์ํด ์ฌ์ฉ
- ์ํํธ์จ์ด ๋๋ถ๋ถ์ ์ปค๋์ ๋์์ด ํ์ํ๋ค. ์ฌ์ฉ์๊ฐ ์ปค๋์๊ฒ ๋์์ด ํ์ํ๋ค๋ ์์ฒญ์ ์์คํ ์ฝ์ด๋ผ๊ณ ํ๋ค.
- ์ ์ ๋ชจ๋์ ์ํํธ์จ์ด๊ฐ ํ์ํ ๋์์ ์์ฒญํ๋ฉด, ์ปค๋์ด ์์ฒญํ ๋์์ ์ํํ์ฌ ์ ์ ์๊ฒ ๊ฒฐ๊ณผ๋ฅผ ๋ฐํํ๋ค.
x64 syscall ํ ์ด๋ธ
์์ฝ
- ์คํ
- push val: rsp๋ฅผ 8๋งํผ ๋นผ๊ณ , ์คํ์ ์ต์๋จ์ val์ ์์ต๋๋ค.
- pop reg: ์คํ ์ต์๋จ์ ๊ฐ์ reg์ ๋ฃ๊ณ , rsp๋ฅผ 8๋งํผ ๋ํฉ๋๋ค.
- ํ๋ก์์
- call addr: addr์ ํ๋ก์์ ๋ฅผ ํธ์ถํฉ๋๋ค.
- leave: ์คํ ํ๋ ์์ ์ ๋ฆฌํฉ๋๋ค.
- ret: ํธ์ถ์์ ์คํ ํ๋ฆ์ผ๋ก ๋์๊ฐ๋๋ค.
- ์์คํ
์ฝ
- syscall: ์ปค๋์๊ฒ ํ์ํ ๋์์ ์์ฒญํฉ๋๋ค.
QUIZ
[Register]
rbx = 0x401A40
=================================
[Memory]
0x401a40 | 0x0000000012345678
0x401a48 | 0x0000000000C0FFEE
0x401a50 | 0x00000000DEADBEEF
0x401a58 | 0x00000000CAFEBABE
0x401a60 | 0x0000000087654321
=================================
[Code]
1: mov rax, [rbx+8]
2: lea rax, [rbx+8]
Q1. ๋ ์ง์คํฐ, ๋ฉ๋ชจ๋ฆฌ ๋ฐ ์ฝ๋๊ฐ ๋ค์๊ณผ ๊ฐ๋ค. Code๋ฅผ 1๊น์ง ์คํํ์ ๋, rax์ ์ ์ฅ๋ ๊ฐ์?
A1. 0xC0FFEE
Q2. Code๋ฅผ 2๊น์ง ์คํํ์ ๋, rax์ ๋ค์ด์๋ ๊ฐ์?
A2. 0x401A48
[Register]
rax = 0x31337
rbx = 0x555555554000
rcx = 0x2
=================================
[Memory]
0x555555554000| 0x0000000000000000
0x555555554008| 0x0000000000000001
0x555555554010| 0x0000000000000003
0x555555554018| 0x0000000000000005
0x555555554020| 0x000000000003133A
==================================
[Code]
1: add rax, [rbx+rcx*8]
2: add rcx, 2
3: sub rax, [rbx+rcx*8]
4: inc rax
Q3. ๋ ์ง์คํฐ, ๋ฉ๋ชจ๋ฆฌ ๋ฐ ์ฝ๋๊ฐ ๋ค์๊ณผ ๊ฐ๋ค. Code๋ฅผ 1๊น์ง ์คํํ์ ๋, rax์ ์ ์ฅ๋ ๊ฐ์?
A3. 0x3133A
[rbx+rcx*8] = 0x555555554010
๋ฐ๋ผ์ rax = 31337 + 3 = 0x3133A
Q4. Code๋ฅผ 3๊น์ง ์คํํ์ ๋, rax์ ์ ์ฅ๋ ๊ฐ์?
A4. 0
rcx = 4
[rbx+rcx*8] = 0x555555554020
rax = 0 - 0 = 0
[Register]
rax = 0x31337
rbx = 0x555555554000
rcx = 0x2
=================================
[Memory]
0x555555554000| 0x0000000000000000
0x555555554008| 0x0000000000000001
0x555555554010| 0x0000000000000003
0x555555554018| 0x0000000000000005
0x555555554020| 0x000000000003133A
==================================
[Code]
1: add rax, [rbx+rcx*8]
2: add rcx, 2
3: sub rax, [rbx+rcx*8]
4: inc rax
Q5. Code๋ฅผ 4๊น์ง ์คํํ์ ๋, rax์ ์ ์ฅ๋ ๊ฐ์?
A5. 1
1. rax = 0x3133A
2. rcx = 4
3. rax = 0
4. rax = rax + 1 = 1
[Register]
rax = 0xffffffff00000000
rbx = 0x00000000ffffffff
rcx = 0x123456789abcdef0
==================================
[Code]
1: and rax, rcx
2: and rbx, rcx
3: or rax, rbx
Q6. ๋ ์ง์คํฐ, ๋ฉ๋ชจ๋ฆฌ ๋ฐ ์ฝ๋๊ฐ ๋ค์๊ณผ ๊ฐ๋ค. Code๋ฅผ 1๊น์ง ์คํํ์ ๋, rax์ ์ ์ฅ๋ ๊ฐ์?
A6. 0x1234567800000000
Q7. Code๋ฅผ 2๊น์ง ์คํํ์ ๋, rbx์ ์ ์ฅ๋ ๊ฐ์?
A7. 0x000000009ABCDEF0
Q8. Code๋ฅผ 3๊น์ง ์คํํ์ ๋, rax์ ์ ์ฅ๋ ๊ฐ์?
A8. 0x123456789ABCDEF0
[Register]
rax = 0x35014541
rbx = 0xdeadbeef
==================================
[Code]
1: xor rax, rbx
2: xor rax, rbx
3: not eax
Q9. ๋ ์ง์คํฐ, ๋ฉ๋ชจ๋ฆฌ ๋ฐ ์ฝ๋๊ฐ ๋ค์๊ณผ ๊ฐ๋ค. Code๋ฅผ 1๊น์ง ์คํํ์ ๋, rax์ ์ ์ฅ๋ ๊ฐ์?
A9. 0xEBACFBAE
Q10. Code๋ฅผ 2๊น์ง ์คํํ์ ๋, rax์ ์ ์ฅ๋ ๊ฐ์?
A10. 0x35014541
Q11. Code๋ฅผ 3๊น์ง ์คํํ์ ๋, rax์ ์ ์ฅ๋ ๊ฐ์?
A11. 0xCAFEBABE
'Dreamhack > System Hacking' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
Tool Installation - pwntools (0) | 2024.03.20 |
---|---|
Tool Installation - gdb (0) | 2024.03.20 |
Background - Computer Science - Linux Memory Layout (0) | 2024.03.19 |
Background - Computer Science - Computer Architecture (0) | 2024.03.19 |
System Hacking Introduction (1) | 2024.03.19 |