Quiz: x86 Assembly 1
์ ๋ฌธ์ ๋ฅผ ํด์ํ ๋ถ๋ถ์ด๋ฉฐ, Dreamhack์ ๋ด์ฉ์ ๋๋น
์์ฌ ๋ด์ฉ์์ ๋์ถฉ ๋ช ๋ น์ด์ ํด๋น ๋ ์ง์คํฐ์ ๋ํ ์ค๋ช ์ ํ์ผ๋ฏ๋ก ๊ฐ๋ตํ๊ฒ ์ค๋ช ํ๊ณ ๋์ด๊ฐ๊ป์
dl : RDX(64byte) → EDX(ํ์ 32byte) → DX(ํ์ 16byte) → DL(ํ์ 8byte)
1. mov dl, BYTE PTR[rsi+rcx]
dl = rdx 8byte low_data
> dl = 0x67 0x55 0x5c 0x53 0x5f 0x5d 0x55 0x10 <
mov(๋์ ) dl, {BYTE PTR[0+0x400000] = 0x400000 | 0x67..}
2. xor dl, 0x30 result
> 0x57656c636f6d6520 <
xor dl๊ณผ 0x3030...์ผ๋ก ํ๋ฉด ๋จ
python ์ฝ๋๋ก dl^0x3030...ํ๋ฉด ๋จ
3. mov BYTE PTR[0x400000], dl
[Memory]
> 0x400000 | 0x57656c636f6d6520 <
BYTE PTR[0x400000]์ ์์น์ ์๋ ๊ฐ์ dl์ ๊ฐ์ผ๋ก ๋ฐ๊พธ๋ผ๋ ์ด์ผ๊ธฐ
4. inc rcx
[Register]
> rcx = 0x1 <
rcx++ํ๋ผ๋ ์ด์ผ๊ธฐ๋ก ์ฆ, rcx = 0x1
5. cmp rcx(0x1), 0x19
> result = -1 <
rcx(0x1) < 0x19 ์ด๋ฏ๋ก ํ์๊ฐ ํฌ๋ฏ๋ก -1(๋ฆฌ๋ ์ค๋ผ ๊ฐ์ด ์ ๊ฒ ์๋์ง๋ง ํธ์์)
6. jg(jump greater)
> 5 result is flase so.. code excute X <
์ ์๊ฐ ํฌ๋ค๋ฉด ๋๋ด๋ผ๋ ์ด์ผ๊ธฐ์ง๋ง ํ์๊ฐ ๋ ์ปธ๊ธฐ์ ํจ์ค
7. 1 go
๋ง ๊ทธ๋๋ก 1๋ก ๋์๊ฐ๋ผ๋ ์ด์ผ๊ธฐ
\\end_result
\\rcx = 1 / 0x
before
=======================
[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
=======================
after
=======================
[Memory]
0x400000 | 0x57 0x65 0x6c 0x63 0x6f 0x6d 0x65 0x20
0x400008 | 0x74 0x6f 0x20 0x61 0x73 0x73 0x65 0x6d
0x400010 | 0x62 0x6c 0x79 0x20 0x77 0x6f 0x72 0x6c
0x400018 | 0x54 0x11 0x00 0x00 0x00 0x00 0x00 0x00
=======================
Welcome to assembly world!(000000)
Quiz: x86 Assembly 2
์ ๋ฌธ์ ๋ฅผ ํด์ํ ๋ถ๋ถ์ด๋ฉฐ, Dreamhack์ ๋ด์ฉ์ ๋๋น
์ด์ ๋ ๋ค ์์ค ๊ฑฐ๋๊น ๋์ถฉ ์ ํ ๋ด์ฉ์ผ๋ก ์์๋ณด์ธ์.. ํ๋ค์ด์
1. stack input rbp
์ด์ ๋ถํฐ ๋ง ๊ทธ๋๋ก๋ฉด ์ฃผ์ ์ ๋ฌ๊ป์
2. rbp = rsp(stack point, using pointer)
3. esi(rsi_lowdata_by 32bytes source index) = 0xf
4. rdi(destination index) = memory[0x400500]
5. call systemcall _write func
ํจ์ ํธ์ถ ์ด์ผ๊ธฐ
6. mov eax, 0x0 / eax = 0x0
7. pop rbp / print_rbp
8. ret 5 logiz return so func end
1. push rbp2. mov rbp, rsp / rbp = rsp(์ฌ์ฉ์ค ์คํ์ฃผ์ ๊ฐ)ํจ์ ์์๋ถ๋ถ์ผ๋ก ๋ณ๋ก ํด์ ํ ํ์๋ ์์ง๋ง ์ ๊ธ์ด ๊ฐ๋จํ๊ฒ ํด์ํจ
3. mov QWORD PTR[rbp-0x8], rdi4. mov DWORD PTR[rbp-0xc], esi
5. xor rdx, rdx / 0์ผ๋ก ์ด๊ธฐํ ํ๋๋ฏ
6. mov edx, DWORD PTR[rbp-0xc] / ๊ฐ ๋์ 7. mov rsi, QWORD PTR[rbp-0x8] / ๊ฐ ๋์
8. mov rdi, 0x1 / 9. mov rax, 0x1
10. syscall / 11. pop rbp / 12. ret
ํจ์ ๋์ rbp ํธ์ถํ๊ณ ๋
์๋ ๋์ถฉ ํธ๋์จ์ด ํ ๋ชจ์ต์ด๋ฉฐ, ์๋๋ถ๋ถ์ x64์ํคํ ์ฒ์ด๊ธฐ์ ๋ฆฌํ์๋์ ํ๊ธฐ์
๋ฐ๊พผ ๋ชจ์ต์ ํ์ด์ฌ ์ฝ๋๋ก ํ ๋ชจ์ต์ด๋ค.
๊ทธ๋์ ๊ฒฐ๊ณผ๋ ์ด๋ ๊ฒ ๋์ค์ง์
์ฐธ๊ณ ์๋ฃ
์ฐธ๊ณ ์ด๋ฏธ์ง
'๐โSystem_Study > ๐โDreamhack_Hacking' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
Tool: pwntools (4) | 2022.04.04 |
---|---|
Tool: gdb (0) | 2022.03.29 |
x86 Assembly: Essential Part (0) | 2022.03.24 |
Linux Memory Layout (0) | 2022.03.21 |
Computer Architecture (0) | 2022.03.21 |