Jastes 2022. 3. 27. 16:17

Quiz: x86 Assembly 1

์œ„ ๋ฌธ์ œ๋ฅผ ํ•ด์„ํ•œ ๋ถ€๋ถ„์ด๋ฉฐ, Dreamhack์˜ ๋‚ด์šฉ์ž…๋‹ˆ๋‹น

Dream_hack ๋ฌธ์ œ

์•ž์ฌ ๋‚ด์šฉ์—์„œ ๋Œ€์ถฉ ๋ช…๋ น์–ด์™€ ํ•ด๋‹น ๋ ˆ์ง€์Šคํ„ฐ์— ๋Œ€ํ•œ ์„ค๋ช…์„ ํ–ˆ์œผ๋ฏ€๋กœ ๊ฐ„๋žตํ•˜๊ฒŒ ์„ค๋ช…ํ•˜๊ณ  ๋„˜์–ด๊ฐˆ๊ป˜์š”

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์•„ํ‚คํ…์ฒ˜์ด๊ธฐ์— ๋ฆฌํ‹€์—”๋””์•ˆ ํ–ˆ๊ธฐ์—

๋ฐ”๊พผ ๋ชจ์Šต์„ ํŒŒ์ด์ฌ ์ฝ”๋“œ๋กœ ํ•œ ๋ชจ์Šต์ด๋‹ค.

  •  

๊ทธ๋ž˜์„œ ๊ฒฐ๊ณผ๋Š” ์ด๋ ‡๊ฒŒ ๋‚˜์˜ค์ง€์š”


์ฐธ๊ณ  ์ž๋ฃŒ

 

Dreamhack

์ž๊ฒฉ ์ธ์ฆ๋ฐ์ดํ„ฐ(authentication credentials)๊ฐ€ ์ œ๊ณต๋˜์ง€ ์•Š์•˜์Šต๋‹ˆ๋‹ค.

dreamhack.io

 

 

Dreamhack

์ž๊ฒฉ ์ธ์ฆ๋ฐ์ดํ„ฐ(authentication credentials)๊ฐ€ ์ œ๊ณต๋˜์ง€ ์•Š์•˜์Šต๋‹ˆ๋‹ค.

dreamhack.io

์ฐธ๊ณ  ์ด๋ฏธ์ง€