[๐Ÿฅˆ Silver 4] ํ™”๋ฉด์— ์•„๋ฌด๊ฒƒ๋„ ์•ˆ ๋œจ๋Š” ๋ฐ”์ด๋„ˆ๋ฆฌ์—์„œ flag ๋ฝ‘์•„๋‚ด๊ธฐ โ€” DreamHack fake ํ’€์ด

2026-07-21ยท1๋ถ„ ์ฝ๊ธฐยท

[๐Ÿฅˆ Silver 4] ํ™”๋ฉด์— ์•„๋ฌด๊ฒƒ๋„ ์•ˆ ๋œจ๋Š” ๋ฐ”์ด๋„ˆ๋ฆฌ์—์„œ flag ๋ฝ‘์•„๋‚ด๊ธฐ โ€” DreamHack fake ํ’€์ด

์‹คํ–‰ํ•ด๋„ ์•„๋ฌด๊ฒƒ๋„ ์ถœ๋ ฅํ•˜์ง€ ์•Š๋Š” ELF ๋ฐ”์ด๋„ˆ๋ฆฌ ํ•˜๋‚˜. strace๋กœ ํ™•์ธํ•ด๋ณด๋‹ˆ read/write ๊ณ„์—ด syscall์ด ๋‹จ ํ•œ ๋ฒˆ๋„ ์—†๋‹ค โ€” ์ž„ํฌํŠธ๋œ ํ•จ์ˆ˜์กฐ์ฐจ malloc/free๋ฟ์ด๋‹ค. objdump๋กœ ๋œฏ์–ด๋ณด๋‹ˆ main()์€ ์Šคํƒ์— movabs ์ฆ‰์‹œ๊ฐ’์œผ๋กœ 23๋ฐ”์ดํŠธ ์‹œ๋“œ ๋ฒ„ํผ๋ฅผ ์กฐ๋ฆฝํ•ด mallocํ•œ ๋’ค, reverse โ†’ ์ธ์ ‘ ๋ฐ”์ดํŠธ ๊ตํ™˜ โ†’ XOR๋ผ๋Š” ์„ธ ๋‹จ๊ณ„ ๋ณ€ํ™˜๋งŒ ๊ฑฐ์ณ ๊ณง๋ฐ”๋กœ freeํ•ด๋ฒ„๋ฆฐ๋‹ค. ํ™”๋ฉด์— ์ฐํžˆ๋Š” ๊ฑด ์—†์ง€๋งŒ, ๊ทธ ๋ณ€ํ™˜ ๊ฒฐ๊ณผ๋ฅผ ํŒŒ์ด์ฌ์œผ๋กœ ๊ทธ๋Œ€๋กœ ์žฌํ˜„ํ•˜๊ณ  gdb๋กœ free() ์ง์ „ ํž™ ๋ฒ„ํผ๋ฅผ ์ง์ ‘ ๋“ค์—ฌ๋‹ค๋ณด๋Š” ๊ฒƒ์œผ๋กœ flag๋ฅผ ํ™•์ธํ–ˆ๋‹ค.

๋ฌธ์ œ: DreamHack โ€” fake ๋ถ„๋ฅ˜: Reversing ๋‚œ์ด๋„: ๐Ÿฅˆ Silver 4 FLAG: DH{SMC_R3vers1ng_chall}

ํŒŒ์ผ ํ•˜๋‚˜์งœ๋ฆฌ ํ‰๋ฒ”ํ•œ ๋ฆฌ๋ฒ„์‹ฑ ๋ฌธ์ œ์ฒ˜๋Ÿผ ๋ณด์˜€๋‹ค. file๋กœ ํ™•์ธํ•˜๋ฉด ๊ทธ๋ƒฅ stripped PIE ELF. ๊ทธ๋Ÿฐ๋ฐ ์‹คํ–‰ํ•ด๋ด๋„, ์ž…๋ ฅ์„ ์ค˜๋„, ์•„๋ฌด ์ผ๋„ ์ผ์–ด๋‚˜์ง€ ์•Š๋Š”๋‹ค. ํ”„๋กฌํ”„ํŠธ๋„, ์—๋Ÿฌ ๋ฉ”์‹œ์ง€๋„, ์„ฑ๊ณต/์‹คํŒจ ๋ฉ”์‹œ์ง€๋„ ์ „ํ˜€ ์—†๋‹ค. ๋ฌธ์ œ ์ œ๋ชฉ์ด "fake"์ธ๋ฐ, ํ’€๊ณ  ๋‚˜๋‹ˆ ์ด ํ”„๋กœ๊ทธ๋žจ์ด "๊ฒ‰์œผ๋กœ ๋ณด์—ฌ์ฃผ๋Š” ๊ฒƒ"์ด ํ†ต์งธ๋กœ ๊ฐ€์งœ์˜€๋‹ค๋Š” ๋œป์ด์—ˆ๋‹ค โ€” ์• ์ดˆ์— ๋ญ”๊ฐ€๋ฅผ ๋ณด์—ฌ์ค„ ์ƒ๊ฐ ์ž์ฒด๊ฐ€ ์—†๋Š” ํ”„๋กœ๊ทธ๋žจ์ด์—ˆ๋‹ค.

๋ฌธ์ œ ์„ค๋ช… ๋งจ ์•„๋ž˜์—๋Š” "์–ธ์ธํ… ์ˆ˜์ •์™„๋ฃŒ [2024.12.21]"์ด๋ผ๋Š” ๋ฌธ๊ตฌ๋„ ๋ถ™์–ด ์žˆ์—ˆ๋‹ค. ์ถœ์ œ์ž๊ฐ€ ์˜๋„ํ•˜์ง€ ์•Š์€ ์ง€๋ฆ„๊ธธ(unintended solution)์ด ํ•œ ๋ฒˆ ๋ฐœ๊ฒฌ๋ผ์„œ ๋ง‰ํ˜”๋‹ค๋Š” ๋œป์ธ๋ฐ, ์–ด๋–ค ์ง€๋ฆ„๊ธธ์ด์—ˆ๋Š”์ง€๋Š” ์•Œ ๊ธธ์ด ์—†์—ˆ์ง€๋งŒ ์ ์–ด๋„ "์ด ๋ฌธ์ œ๋Š” ์ •๊ณต๋ฒ•์œผ๋กœ ํ’€๋ฆฌ๋„๋ก ๋‹ค์‹œ ์†๋ด์กŒ๋‹ค"๋Š” ์‹ ํ˜ธ๋กœ๋Š” ๋ฐ›์•„๋“ค์ผ ๋งŒํ–ˆ๋‹ค. ์‹คํ–‰์กฐ์ฐจ ๊ด€์ฐฐ ๋ถˆ๊ฐ€๋Šฅํ•œ ๋ฐ”์ด๋„ˆ๋ฆฌ์—์„œ ์–ด๋–ค ์ง€๋ฆ„๊ธธ์ด ์žˆ์—ˆ์„์ง€ ์ƒ์ƒํ•˜๊ธฐ ์–ด๋ ค์› ๋Š”๋ฐ, ๋๊นŒ์ง€ ํ’€๊ณ  ๋‚˜์„œ ๋Œ์ด์ผœ๋ณด๋ฉด ์•„๋งˆ ํž™ ๋ฉ”ํƒ€๋ฐ์ดํ„ฐ๋ฅผ ์ด์šฉํ•œ ์šฐํšŒ์ด์ง€ ์•Š์•˜์„๊นŒ ์‹ถ๋‹ค โ€” ํ™•์ธํ•  ๋ฐฉ๋ฒ•์€ ์—†์ง€๋งŒ, ์ตœ์†Œํ•œ ์ง€๊ธˆ ์ด ๋ฐ”์ด๋„ˆ๋ฆฌ์—์„œ๋Š” ๊ทธ๋Ÿฐ ์ˆ˜๊ฐ€ ํ†ตํ•˜์ง€ ์•Š๋Š”๋‹ค๋Š” ๊ฒƒ๋งŒ์€ ๋ถ„๋ช…ํ–ˆ๋‹ค.


๋ฌธ์ œ ๊ฐœ์š”

๋ฐ”์ด๋„ˆ๋ฆฌ ํ•˜๋‚˜๋งŒ ์ฃผ์–ด์ง„๋‹ค. ๋ฌธ์ œ ์„ค๋ช…์€ ์งง๋‹ค: format:DH{...}, "simple reversing challenge". ์ผ๋‹จ ์‹คํ–‰ํ•ด๋ดค๋‹ค.

file๊ณผ checksec ๊ฒฐ๊ณผ โ€” stripped PIE ELF, Full RELRO/์นด๋‚˜๋ฆฌ/NX/PIE/SHSTK/IBT ์ „๋ถ€ ํ™œ์„ฑํ™”. pwntools ELF.plt๋กœ ํ™•์ธํ•œ ์ž„ํฌํŠธ ๋ชฉ๋ก์ด __cxa_finalize, free, __stack_chk_fail, malloc ๋”ฑ 4๊ฐœ๋ฟ

๋ณดํ˜ธ๊ธฐ๋ฒ•์€ ์ „๋ถ€ ์ผœ์ ธ ์žˆ์ง€๋งŒ ์ด ๋ฌธ์ œ์™€๋Š” ๋ฌด๊ด€ํ•ด ๋ณด์ธ๋‹ค. Full RELRO, ์Šคํƒ ์นด๋‚˜๋ฆฌ, NX, PIE, ์‹ฌ์ง€์–ด ์ตœ์‹  CPU ๊ธฐ๋Šฅ์ธ Shadow Stack(SHSTK)ยทIndirect Branch Tracking(IBT)๊นŒ์ง€ โ€” ์‚ฌ์šฉ์ž ์ž…๋ ฅ์„ ์•„์˜ˆ ๋ฐ›์ง€ ์•Š๋Š” ํ”„๋กœ๊ทธ๋žจ์— ์ด ์ •๋„๋กœ ์™„์ „ํ•œ ๋ณดํ˜ธ๊ธฐ๋ฒ• ์„ธํŠธ๋ฅผ ๋ถ™์—ฌ๋‘” ๊ฑด ๋‹ค์†Œ ๊ณผํ•ด ๋ณด์˜€๋‹ค. ๋‚˜์ค‘์— ์•Œ๊ฒŒ ๋์ง€๋งŒ, ์ด๊ฑด ์•„๋งˆ "์ด ๋ฐ”์ด๋„ˆ๋ฆฌ๋ฅผ ๊ณต๊ฒฉ ๋Œ€์ƒ์œผ๋กœ ์ฐฉ๊ฐํ•˜๊ฒŒ ๋งŒ๋“œ๋Š”" ๋˜ ํ•˜๋‚˜์˜ ๋ฏธ๋ผ์˜€์„ ๊ฒƒ์ด๋‹ค โ€” ๋ณดํ˜ธ๊ธฐ๋ฒ•์ด ์ด˜์ด˜ํ•œ ๊ฑธ ๋ณด๋ฉด ๋ฐ˜์‚ฌ์ ์œผ๋กœ "๋ฉ”๋ชจ๋ฆฌ ์†์ƒ ์ทจ์•ฝ์ ์„ ์ฐพ์•„์•ผ ํ•˜๋‚˜"๋ผ๋Š” ์ƒ๊ฐ์ด ๋จผ์ € ๋“œ๋Š”๋ฐ, ์ด ๋ฌธ์ œ๋Š” ์• ์ดˆ์— pwn์ด ์•„๋‹ˆ๋ผ ์ˆœ์ˆ˜ ๋ฆฌ๋ฒ„์‹ฑ์ด์—ˆ๋‹ค.

์ง„์งœ ๋ˆˆ์— ๋„๋Š” ๊ฑด ์ž„ํฌํŠธ ๋ชฉ๋ก์ด๋‹ค. malloc, free, __cxa_finalize, __stack_chk_fail โ€” ์ด๊ฒŒ ์ „๋ถ€๋‹ค. read๋„, write๋„, puts๋„, printf๋„ ์—†๋‹ค. ํ‘œ์ค€ C ํ”„๋กœ๊ทธ๋žจ์ด๋ผ๋ฉด ์‚ฌ์šฉ์ž์™€ ๋ญ”๊ฐ€ ์ฃผ๊ณ ๋ฐ›๊ธฐ ์œ„ํ•ด ์ตœ์†Œํ•œ ํ•˜๋‚˜๋Š” ์žˆ์–ด์•ผ ํ•  ํ•จ์ˆ˜๋“ค์ด ํ†ต์งธ๋กœ ๋น ์ ธ ์žˆ๋‹ค. strings๋กœ ํ›‘์–ด๋ด๋„ ํ”„๋กฌํ”„ํŠธ๋‚˜ ์„ฑ๊ณต/์‹คํŒจ ๋ฉ”์‹œ์ง€ ๋ฌธ์ž์—ด์ด ํ•˜๋‚˜๋„ ์•ˆ ๋ณด์ธ๋‹ค.


๐Ÿ”ฌ ์ •์ฐฐ โ€” strace๊ฐ€ ํ™•์ธํ•ด์ค€ ์‚ฌ์‹ค: ์ด ํ”„๋กœ๊ทธ๋žจ์€ ์ •๋ง ์•„๋ฌด๊ฒƒ๋„ ์•ˆ ํ•œ๋‹ค

ํ˜น์‹œ ๋ชป ๋ณด๊ณ  ์ง€๋‚˜์นœ syscall์ด ์žˆ์„๊นŒ ์‹ถ์–ด strace๋กœ ์ง์ ‘ ๊ฐ์‹œํ–ˆ๋‹ค. stdin์— ์•„๋ฌด ๊ฐ’์ด๋‚˜ ํ˜๋ ค๋ณด๋‚ด๋ฉด์„œ ์‹คํ–‰ํ–ˆ๋‹ค.

strace -f ./chall ๊ฒฐ๊ณผ (mmap/mprotect ๋“ฑ ๋กœ๋” ์ดˆ๊ธฐํ™” ์žก์Œ์€ ํ•„ํ„ฐ๋ง) โ€” execve ์ดํ›„ brk() ๋ช‡ ๋ฒˆ๊ณผ getrandom, munmap๋งŒ ์žˆ๊ณ  read/write/openat(์‚ฌ์šฉ์ž ํŒŒ์ผ) ๋“ฑ ์ž…์ถœ๋ ฅ syscall์€ ์ „๋ฌด. ๋งˆ์ง€๋ง‰์€ ๊ณง๋ฐ”๋กœ exit_group(0)

brk()๋กœ ํž™์„ ๋Š˜๋ฆฌ๊ณ , ASLR/์Šคํƒ ์นด๋‚˜๋ฆฌ์šฉ getrandom()์„ ํ•œ ๋ฒˆ ํ˜ธ์ถœํ•˜๊ณ , ๊ทธ๋Œ€๋กœ exit_group(0)์œผ๋กœ ๋๋‚œ๋‹ค. stdin์— ๋„ฃ์€ ๊ฐ’์€ ๋‹จ ํ•œ ๋ฐ”์ดํŠธ๋„ ์ฝํžˆ์ง€ ์•Š๋Š”๋‹ค. ์ด ํ”„๋กœ๊ทธ๋žจ์€ ์‚ฌ์šฉ์ž ์ž…๋ ฅ๊ณผ ๋ฌด๊ด€ํ•˜๊ฒŒ ํ•ญ์ƒ ๋˜‘๊ฐ™์ด ๋™์ž‘ํ•˜๊ณ , ๊ทธ ๊ฒฐ๊ณผ๋ฅผ ์–ด๋””์—๋„ ์ถœ๋ ฅํ•˜์ง€ ์•Š๋Š”๋‹ค. ๊ทธ๋ ‡๋‹ค๋ฉด "์ •๋‹ต์„ ๋งžํžˆ๋Š”" ๋ฌธ์ œ๊ฐ€ ์•„๋‹ˆ๋ผ โ€” ์ด ํ”„๋กœ๊ทธ๋žจ์ด ๋ฉ”๋ชจ๋ฆฌ ์•ˆ์—์„œ ์กฐ์šฉํžˆ ๊ณ„์‚ฐํ•ด๋‚ด๋Š” ๊ฐ’์ด ๋ฌด์—‡์ธ์ง€๋ฅผ ์ •์ ์œผ๋กœ ์žฌ๊ตฌ์„ฑํ•ด์•ผ ํ•˜๋Š” ๋ฌธ์ œ๋ผ๋Š” ๋œป์ด๋‹ค.

objdump -d -M intel๋กœ main()๋ถ€ํ„ฐ ๋”ฐ๋ผ๊ฐ€๋ดค๋‹ค.

main() ์–ด์…ˆ๋ธ”๋ฆฌ์— ํ•œ๊ธ€ ์ฃผ์„์„ ๋‹จ ์บก์ณ โ€” init() ํ˜ธ์ถœ๋กœ malloc๋œ ํฌ์ธํ„ฐ๋ฅผ ๋ฐ›๊ณ , f1357์„ ๋‘ ๋ฒˆ(๋””์ฝ”์ด), ๊ทธ ์‚ฌ์ด์— f1521(์‹ค์ œ ๋ณ€ํ™˜) ํ•œ ๋ฒˆ์„ ํ˜ธ์ถœํ•œ ๋’ค free๋ฅผ ๋‘ ๋ฒˆ ๋ถ€๋ฅด๊ณ  ๋๋‚˜๋Š” ํ๋ฆ„

๊ตฌ์กฐ๋Š” ๋‹จ์ˆœํ•˜๋‹ค. init()์„ ํ˜ธ์ถœํ•ด ๋ญ”๊ฐ€๋ฅผ mallocํ•œ ํฌ์ธํ„ฐ๋ฅผ ๋ฐ›๊ณ (NULL์ด๋ฉด ์กฐ๊ธฐ ์ข…๋ฃŒ), f1357(ptr) โ†’ f1521(ptr) โ†’ f1357(ptr) ์ˆœ์„œ๋กœ ์„ธ ๋ฒˆ ํ˜ธ์ถœํ•œ ๋’ค, free(ptr->data)์™€ free(ptr)๋ฅผ ํ˜ธ์ถœํ•˜๊ณ  ๋๋‚œ๋‹ค. ์ถœ๋ ฅ ํ•จ์ˆ˜ ํ˜ธ์ถœ์€ ์ด ํ๋ฆ„ ์–ด๋””์—๋„ ์—†๋‹ค.

๋งˆ์ง€๋ง‰ ๋‘ free ํ˜ธ์ถœ์˜ ์ˆœ์„œ๋„ ๋ˆˆ์—ฌ๊ฒจ๋ณผ ๋งŒํ•˜๋‹ค. ์•ˆ์ชฝ ๋ฒ„ํผ(ptr->data)๋ฅผ ๋จผ์ € ํ•ด์ œํ•˜๊ณ , ๊ทธ ๋‹ค์Œ์— ๋ฐ”๊นฅ ๊ตฌ์กฐ์ฒด(ptr)๋ฅผ ํ•ด์ œํ•œ๋‹ค โ€” ์ž์‹์„ ๋จผ์ € ์ •๋ฆฌํ•˜๊ณ  ๋ถ€๋ชจ๋ฅผ ๋‚˜์ค‘์— ์ •๋ฆฌํ•˜๋Š”, ์ค‘์ฒฉ ํฌ์ธํ„ฐ๋ฅผ ๋‹ค๋ฃจ๋Š” ์ •์„์ ์ธ ํ•ด์ œ ์ˆœ์„œ๋‹ค. ์ˆœ์„œ๊ฐ€ ๋ฐ˜๋Œ€์˜€๋‹ค๋ฉด(๊ตฌ์กฐ์ฒด๋ฅผ ๋จผ์ € ํ•ด์ œํ•œ ๋’ค ๊ทธ ๊ตฌ์กฐ์ฒด๋ฅผ ํ†ตํ•ด ptr->data์— ์ ‘๊ทผํ•˜๋ ค ํ–ˆ๋‹ค๋ฉด) use-after-free๊ฐ€ ๋์„ ํ…๋ฐ, ์ด ๋ฐ”์ด๋„ˆ๋ฆฌ๋Š” ๊ทธ ํ•จ์ •์„ ์ •ํ™•ํžˆ ํ”ผํ•ด๊ฐ€๊ณ  ์žˆ๋‹ค. ์ทจ์•ฝ์ ์„ ์‹ฌ์–ด๋‘๋Š” ๋ฌธ์ œ๊ฐ€ ์•„๋‹ˆ๋ผ ์ •๋ง "๊ณ„์‚ฐ ๊ฒฐ๊ณผ๋ฅผ ์กฐ์šฉํžˆ ๋งŒ๋“ค๊ณ  ์น˜์šฐ๋Š”" ๊ฒƒ ์ž์ฒด๊ฐ€ ๋ชฉ์ ์ธ ํ”„๋กœ๊ทธ๋žจ์ด๋ผ๋Š” ์ •ํ™ฉ์ด ์—ฌ๊ธฐ์„œ๋„ ํ™•์ธ๋๋‹ค.


โ–ถ๐Ÿ•ณ๏ธ ์‚ฝ์งˆ โ€” f1357์„ ์ง„์งœ ๊ฒ€์ฆ ๋กœ์ง์ธ ์ค„ ์•Œ๊ณ  ํ•œ์ฐธ ๋ถ™์žก๊ณ  ์žˆ์—ˆ๋‹ค

f1357์„ ์ฒ˜์Œ ์—ด์–ด๋ดค์„ ๋•Œ๋Š” ์ด๊ฒŒ ํ•ต์‹ฌ ๊ฒ€์ฆ ํ•จ์ˆ˜๋ผ๊ณ  ํ™•์‹ ํ–ˆ๋‹ค. ๋ฒ„ํผ์˜ ํŠน์ • ๋ฐ”์ดํŠธ ๋‘ ๊ฐœ(data[2]์™€ data[len-3])๋ฅผ ๋”ํ•˜๊ณ , ๋‹ค๋ฅธ ๋‘ ๋ฐ”์ดํŠธ(data[0]๊ณผ data[len-1])๋ฅผ XORํ•œ ๋’ค, ๊ทธ ๋‘ ๊ฐ’์„ ์–ด๋–ค ํ•จ์ˆ˜(0x1189)์— ๋„˜๊ธด๋‹ค โ€” ๋”ฑ "์ฒดํฌ์„ฌ์„ ๊ณ„์‚ฐํ•ด์„œ ๊ฒ€์ฆํ•˜๋Š”" ์ „ํ˜•์ ์ธ ๋ชจ์–‘์ด์—ˆ๋‹ค. ๊ทธ๋ž˜์„œ ์ฒ˜์Œ์—” 0x1189๊ฐ€ ๋ญ˜ ํ•˜๋Š”์ง€, ์ด ์ฒดํฌ์„ฌ์ด ๋ฒ„ํผ์˜ ์–ด๋А ๋ฐ”์ดํŠธ์— ๋‹ค์‹œ ๋ฐ˜์˜๋˜๋Š”์ง€๋ฅผ ํ•œ์ฐธ ์ถ”์ ํ–ˆ๋‹ค.

๊ทธ๋Ÿฐ๋ฐ ์•„๋ฌด๋ฆฌ ๋”ฐ๋ผ๊ฐ€๋„ ์ด ๊ณ„์‚ฐ ๊ฒฐ๊ณผ๊ฐ€ ๋‹ค์‹œ ๋ฒ„ํผ์— ์“ฐ์ด๋Š” ๊ณณ์ด ์—†์—ˆ๋‹ค. sum๊ณผ xor ๊ฐ’์„ ์ง€์—ญ ๋ณ€์ˆ˜์— ์ €์žฅํ•˜๊ณ  0x1189์— ๋„˜๊ธฐ๋Š” ๊ฒŒ ์ „๋ถ€์˜€๊ณ , f1357 ํ•จ์ˆ˜ ์ „์ฒด์—์„œ data[i] = ... ๊ฐ™์€ ์“ฐ๊ธฐ ์—ฐ์‚ฐ์€ ๋‹จ ํ•œ ์ค„๋„ ์—†์—ˆ๋‹ค. ๊ฒŒ๋‹ค๊ฐ€ ์•ž์„œ strace๋กœ ์ด๋ฏธ ํ™•์ธํ–ˆ๋“ฏ ํ”„๋กœ๊ทธ๋žจ์ด ์–ด๋–ค ๊ฐ’์„ ๊ฒ€์ฆํ•ด์„œ ๋‹ค๋ฅด๊ฒŒ ํ–‰๋™ํ•˜๋Š”(์˜ˆ: ์—๋Ÿฌ ์ข…๋ฃŒ) ํ”์  ์ž์ฒด๊ฐ€ ์—†์—ˆ๋‹ค โ€” ํ•ญ์ƒ exit_group(0)์œผ๋กœ ๋๋‚œ๋‹ค.

๊ทธ์ œ์„œ์•ผ ์ด ํ•จ์ˆ˜๊ฐ€ ์ง„์งœ ๊ฒ€์ฆ์ด ์•„๋‹ˆ๋ผ ๋ฆฌ๋ฒ„์„œ๋ฅผ ๋ถ™์žก์•„๋‘๊ธฐ ์œ„ํ•œ ๋ฏธ๋ผ๋ผ๋Š” ๊ฑธ ๊นจ๋‹ฌ์•˜๋‹ค. main()์ด f1357์„ ์•ž๋’ค๋กœ ๋‘ ๋ฒˆ์ด๋‚˜ ๋ถ€๋ฅด๋Š” ๊ฒƒ๋„ "์ด๊ฒŒ ๋ญ”๊ฐ€ ์ค‘์š”ํ•œ ๋กœ์ง์ด๊ฒ ์ง€"๋ผ๋Š” ์ฐฉ๊ฐ์„ ๊ฐ•ํ™”ํ•˜๋ ค๋Š” ์žฅ์น˜์˜€๋˜ ์…ˆ์ด๋‹ค. f1357์€ ์™„์ „ํžˆ ๋ฌด์‹œํ•˜๊ณ , ์‹ค์ œ๋กœ ๋ฒ„ํผ๋ฅผ ๋ฐ”๊พธ๋Š” f1521 ํ•˜๋‚˜์—๋งŒ ์ง‘์ค‘ํ•˜๋Š” ๊ฑธ๋กœ ๋ฐฉํ–ฅ์„ ๋ฐ”๊ฟจ๋‹ค.


๐Ÿ’ฃ ํ•ต์‹ฌ โ€” ์‹œ๋“œ ๋ฒ„ํผ ํ•˜๋‚˜๊ฐ€ ์„ธ ๋ฒˆ ๋ณ€ํ™˜๋˜๊ณ  ๊ทธ๋Œ€๋กœ ์‚ฌ๋ผ์ง„๋‹ค

init()(์ฃผ์†Œ 0x140b)๋ถ€ํ„ฐ ๋‹ค์‹œ ๋ดค๋‹ค. ์ด ํ•จ์ˆ˜๊ฐ€ ํ•˜๋Š” ์ผ์€ malloc๋œ 24๋ฐ”์ดํŠธ ๋ฒ„ํผ์— 23๋ฐ”์ดํŠธ์งœ๋ฆฌ ์‹œ๋“œ ๋ฐ์ดํ„ฐ๋ฅผ ์ฑ„์›Œ ๋„ฃ๋Š” ๊ฒƒ์ด๋‹ค.

init() ํ•จ์ˆ˜์˜ objdump โ€” movabs๋กœ 8๋ฐ”์ดํŠธ์”ฉ ๋‘ ๋ฒˆ, mov๋กœ 4/2/1๋ฐ”์ดํŠธ์”ฉ ์Šคํƒ์— ์ฆ‰์‹œ๊ฐ’์„ ์ฑ„์šด ๋’ค ๊ทธ 23๋ฐ”์ดํŠธ๋ฅผ mallocํ•œ ๋ฒ„ํผ๋กœ ๋ณต์‚ฌํ•˜๋Š” ๋ถ€๋ถ„

movabs rax, 0x595468565f5b5b4a์™€ movabs rdx, 0x6841044552064450 ๋‘ ๊ฐœ(8๋ฐ”์ดํŠธ์”ฉ 16๋ฐ”์ดํŠธ), ๊ทธ๋ฆฌ๊ณ  mov DWORD/WORD/BYTE๋กœ 4+2+1=7๋ฐ”์ดํŠธ๋ฅผ ๋” ์ฑ„์›Œ์„œ ์ •ํ™•ํžˆ 23๋ฐ”์ดํŠธ(0x17)๋ฅผ ๋งŒ๋“ ๋‹ค. ์ด ๊ฐ’๋“ค์ด ์Šคํƒ์—์„œ malloc๋œ ํž™ ๋ฒ„ํผ๋กœ ๊ทธ๋Œ€๋กœ ๋ณต์‚ฌ๋œ๋‹ค โ€” **์ด๊ฒŒ ์ด ํ”„๋กœ๊ทธ๋žจ์ด ๋‹ค๋ฃจ๋Š” ์œ ์ผํ•œ "๋ฐ์ดํ„ฐ"**๋‹ค.

์ด์ œ f1521(์ง„์งœ ๋ณ€ํ™˜ ํ•จ์ˆ˜) ์ฐจ๋ก€๋‹ค. ์—ด์–ด๋ณด๋ฉด ์„ธ ๊ฐœ์˜ ํ•˜์œ„ ํ•จ์ˆ˜๋ฅผ ์ˆœ์„œ๋Œ€๋กœ ํ˜ธ์ถœํ•  ๋ฟ์ด๋‹ค.

์„ธ ๋ณ€ํ™˜ ํ•จ์ˆ˜๋ฅผ ์˜์‚ฌ์ฝ”๋“œ๋กœ ์ •๋ฆฌํ•œ ์บก์ณ โ€” reverse(์ „์ฒด ๋’ค์ง‘๊ธฐ), swap_pairs(์ธ์ ‘ 2๋ฐ”์ดํŠธ์”ฉ ๊ตํ™˜), xor_key(์ „์ฒด๋ฅผ 0x37๋กœ XOR). main์—์„œ ์ด ์ˆœ์„œ ๊ทธ๋Œ€๋กœ ํ˜ธ์ถœ๋จ
  • reverse: ๋ฒ„ํผ ์ „์ฒด๋ฅผ ์•ž๋’ค๋กœ ๋’ค์ง‘๋Š”๋‹ค.
  • swap_pairs: (0,1), (2,3), (4,5) ... ์ธ์ ‘ํ•œ ๋‘ ๋ฐ”์ดํŠธ์”ฉ ์„œ๋กœ ๋งž๋ฐ”๊พผ๋‹ค.
  • xor_key: ๋ชจ๋“  ๋ฐ”์ดํŠธ๋ฅผ 0x37๋กœ XORํ•œ๋‹ค.

์„ธ ํ•จ์ˆ˜ ๋‹ค ์ธ์ž๋Š” { char *data; size_t len; } ๊ตฌ์กฐ์ฒด ํฌ์ธํ„ฐ ํ•˜๋‚˜๋ฟ์ด๊ณ , ์ „๋ถ€ ๊ทธ ์ž๋ฆฌ์—์„œ ๋ฒ„ํผ๋ฅผ ์ง์ ‘ ๊ณ ์ณ ์“ด๋‹ค(in-place). ์ด ์„ธ ๋‹จ๊ณ„๋ฅผ ๊ฑฐ์นœ ๋ฒ„ํผ๊ฐ€ ๋ฐ”๋กœ free()๋กœ ๋„˜์–ด๊ฐ€๋Š” ๋งˆ์ง€๋ง‰ ์ƒํƒœ๋‹ค โ€” ์ฝ˜์†”์— ํ•œ ๊ธ€์ž๋„ ์•ˆ ์ฐํžˆ์ง€๋งŒ, ๋ฉ”๋ชจ๋ฆฌ ์•ˆ์—์„œ๋Š” ๋ถ„๋ช…ํžˆ ๋ฌด์–ธ๊ฐ€๊ฐ€ ์™„์„ฑ๋ผ ์žˆ๋‹ค.

์—ฌ๊ธฐ์„œ ํ•œ ๊ฐ€์ง€ ์งš์–ด๋‘˜ ๋ถ€๋ถ„์€ xor_key์˜ ํ‚ค ๊ฐ’ 0x37์ด๋‹ค. ์ด๋ฒˆ์—” ์ด ๊ฐ’์ด ์ฆ‰์‹œ๊ฐ’(mov esi, 0x37)์œผ๋กœ ์ฝ”๋“œ์— ๊ทธ๋Œ€๋กœ ๋ฐ•ํ˜€ ์žˆ์–ด์„œ ๋ฐ”๋กœ ์ฝ์„ ์ˆ˜ ์žˆ์—ˆ์ง€๋งŒ, ๋งŒ์•ฝ ํ‚ค๊ฐ€ ๋‚œ๋…ํ™”๋ผ ์žˆ์—ˆ๋‹ค๋ฉด ์ ‘๊ทผ์ด ๋‹ฌ๋ผ์กŒ์„ ๊ฒƒ์ด๋‹ค. XOR์€ ์ž๊ธฐ ์ž์‹ ์˜ ์—ญ์—ฐ์‚ฐ์ด๋ผ((x ^ k) ^ k = x) ํ‚ค๋ฅผ ๋ชฐ๋ผ๋„ ๊ฒฐ๊ณผ๊ฐ€ ์‚ฌ๋žŒ์ด ์ฝ์„ ์ˆ˜ ์žˆ๋Š” ASCII ๋ฒ”์œ„(0x20~0x7e)์— ๋“ค์–ด์˜ค๋Š” ํ‚ค๋ฅผ ์ „์ˆ˜์กฐ์‚ฌ(256๊ฐ€์ง€๋ฟ์ด๋‹ˆ ์‚ฌ์‹ค์ƒ ์ฆ‰์‹œ ๋๋‚œ๋‹ค)ํ•ด์„œ ํ›„๋ณด๋ฅผ ์ขํžˆ๋Š” ๋ฐฉ๋ฒ•๋„ ์ถฉ๋ถ„ํžˆ ํ†ตํ–ˆ์„ ๊ฒƒ์ด๋‹ค โ€” XOR ๋‹จ์ผ ๋ฐ”์ดํŠธ ํ‚ค๋Š” ์• ์ดˆ์— ๋ธŒ๋ฃจํŠธํฌ์Šค์— ๊ฐ€์žฅ ์ทจ์•ฝํ•œ ์ถ•์— ์†ํ•˜๋Š” ๋ณ€ํ™˜์ด๋ผ, ๊ตณ์ด ํ‚ค ์ž์ฒด๋ฅผ ์ •์ ์œผ๋กœ ์ฐพ์•„๋‚ด์ง€ ๋ชปํ–ˆ๋”๋ผ๋„ ํฐ ์žฅ์• ๋ฌผ์€ ์•„๋‹ˆ์—ˆ์„ ๊ฑฐ๋ผ๋Š” ๋œป์ด๋‹ค.


๐ŸŽฏ ์ž์ฒด ์™„๊ฒฐ solve

์‹œ๋“œ ๋ฒ„ํผ 23๋ฐ”์ดํŠธ๋ฅผ ๊ทธ๋Œ€๋กœ ์˜ฎ๊ธฐ๊ณ , reverse โ†’ swap_pairs โ†’ xor_key(0x37)๋ฅผ ํŒŒ์ด์ฌ์œผ๋กœ ์žฌํ˜„ํ–ˆ๋‹ค.

import struct
 
chunk1 = struct.pack("<Q", 0x595468565F5B5B4A)
chunk2 = struct.pack("<Q", 0x6841044552064450)
chunk3 = struct.pack("<I", 0x4C747A65)
chunk4 = struct.pack("<H", 0x7364)
chunk5 = struct.pack("<B", 0x7F)
buf = bytearray(chunk1 + chunk2 + chunk3 + chunk4 + chunk5)
n = len(buf)
 
# reverse
i = 0
while i < (n >> 1):
    j = n - i - 1
    buf[i], buf[j] = buf[j], buf[i]
    i += 1
 
# swap adjacent byte pairs
i = 0
while i + 1 < n:
    buf[i], buf[i + 1] = buf[i + 1], buf[i]
    i += 2
 
# xor with key 0x37
for i in range(n):
    buf[i] ^= 0x37
 
print("[+] FLAG:", buf.decode())
solve.py ์‹คํ–‰ ๊ฒฐ๊ณผ โ€” DH{SMC_R3vers1ng_chall} ์ถœ๋ ฅ

DH{SMC_R3vers1ng_chall}์ด ๋‚˜์™”๋‹ค. DH{๋กœ ์‹œ์ž‘ํ•ด์„œ }๋กœ ๋๋‚˜๋Š” ๊ฒƒ ์ž์ฒด๊ฐ€ ์‹œ๋“œ ๊ฐ’๊ณผ ๋ณ€ํ™˜ ์ˆœ์„œ๋ฅผ ์ œ๋Œ€๋กœ ์ฝ์—ˆ๋‹ค๋Š” ๊ฐ•ํ•œ ์ฆ๊ฑฐ์˜€์ง€๋งŒ, ํ”„๋กœ๊ทธ๋žจ์„ ํ•œ ๋ฒˆ๋„ ์‹คํ–‰ํ•˜์ง€ ์•Š๊ณ  ์–ด์…ˆ๋ธ”๋ฆฌ๋งŒ ์ฝ์–ด์„œ ๋‚ธ ๊ฒฐ๋ก ์ด๋ผ ํ•œ ๋ฒˆ์€ ์ง์ ‘ ํ™•์ธํ•ด๋ณด๊ณ  ์‹ถ์—ˆ๋‹ค. ์ด ๋ฐ”์ด๋„ˆ๋ฆฌ๋Š” (์•ž์„œ ํ™•์ธํ–ˆ๋“ฏ) ์ฝ˜์†”์—๋Š” ์•„๋ฌด๊ฒƒ๋„ ์•ˆ ์ฐ์ง€๋งŒ, free()๋กœ ๋„˜์–ด๊ฐ€๊ธฐ ์ง์ „ ๊ทธ ๋ฉ”๋ชจ๋ฆฌ๋Š” ์‹ค์ œ๋กœ ์กด์žฌํ•œ๋‹ค โ€” gdb๋กœ free()์— ๋ธŒ๋ ˆ์ดํฌํฌ์ธํŠธ๋ฅผ ๊ฑธ๊ณ  ์ฒซ ๋ฒˆ์งธ ํ˜ธ์ถœ์˜ ์ธ์ž(rdi, ์ฆ‰ ํ•ด์ œ๋  ๋ฒ„ํผ ์ฃผ์†Œ)๋ฅผ ๋ฌธ์ž์—ด๋กœ ์ฐ์–ด๋ดค๋‹ค.

gdb -batch๋กœ free()์— ๋ธŒ๋ ˆ์ดํฌํฌ์ธํŠธ๋ฅผ ๊ฑธ๊ณ  ์ฒซ ๋ฒˆ์งธ ํ˜ธ์ถœ ์ธ์ž๋ฅผ ๋ฌธ์ž์—ด๋กœ ์ถœ๋ ฅ โ€” DH{SMC_R3vers1ng_chall}์ด ์‹ค์ œ ์‹คํ–‰ ์ค‘์ธ ํ”„๋กœ์„ธ์Šค์˜ ํž™ ๋ฉ”๋ชจ๋ฆฌ์—์„œ ๊ทธ๋Œ€๋กœ ํ™•์ธ๋จ. ๋‘ ๋ฒˆ์งธ free ํ˜ธ์ถœ์€ ๊ตฌ์กฐ์ฒด ํฌ์ธํ„ฐ ์ž์ฒด

free() call #1, arg (rdi) = DH{SMC_R3vers1ng_chall} โ€” ํŒŒ์ด์ฌ์œผ๋กœ ๊ณ„์‚ฐํ•œ ๊ฐ’๊ณผ ํ•œ ๊ธ€์ž๋„ ๋‹ค๋ฅด์ง€ ์•Š๋‹ค. ์ด ๋ฐ”์ด๋„ˆ๋ฆฌ๋Š” ์Šค์Šค๋กœ ๊ทธ ๊ฐ’์„ ์ ˆ๋Œ€ ๋ณด์—ฌ์ฃผ์ง€ ์•Š์ง€๋งŒ, ์‚ด์•„์žˆ๋Š” ํ”„๋กœ์„ธ์Šค์˜ ํž™์„ gdb๋กœ ๋“ค์—ฌ๋‹ค๋ณด๋ฉด ํ™•์‹คํ•˜๊ฒŒ ์กด์žฌ๋ฅผ ํ™•์ธํ•  ์ˆ˜ ์žˆ๋‹ค. ์ด flag๋ฅผ ๋“œ๋ฆผํ•ต์— ์ œ์ถœํ•ด ์ •๋‹ต์œผ๋กœ ํ™•์ •๋๋‹ค.

DH{SMC_R3vers1ng_chall}์—์„œ SMC๊ฐ€ ์ •ํ™•ํžˆ ๋ญ˜ ์ค„์ธ ๋ง์ธ์ง€๋Š” ์ถœ์ œ์ž๋งŒ ์•Œ๊ฒ ์ง€๋งŒ, ๋ฌธ๋งฅ์ƒ "Self-Modifying Code"์˜ ์•ฝ์ž๋กœ ์ฝ๋Š” ๊ฒŒ ๊ฐ€์žฅ ์ž์—ฐ์Šค๋Ÿฝ๋‹ค. ์ด ๋ฐ”์ด๋„ˆ๋ฆฌ๊ฐ€ ์ •๋ง๋กœ ์ž๊ธฐ ์ž์‹ ์˜ ์ฝ”๋“œ๋ฅผ ๊ณ ์ณ ์“ฐ๋Š”(์ „ํ†ต์ ์ธ ์˜๋ฏธ์˜ SMC) ๊ฑด ์•„๋‹ˆ์ง€๋งŒ, ์ž์‹ ์ด ๋งŒ๋“  ๋ฐ์ดํ„ฐ๋ฅผ ์Šค์Šค๋กœ ์„ธ ๋ฒˆ ์—ฐ์† ๋ณ€ํ˜•ํ•˜๊ณ , ๊ทธ ๊ฒฐ๊ณผ๋ฅผ ํ•œ ๋ฒˆ๋„ ์™ธ๋ถ€์— ๋…ธ์ถœํ•˜์ง€ ์•Š์€ ์ฑ„ ์กฐ์šฉํžˆ ํ•ด์ œํ•œ๋‹ค๋Š” ๋™์ž‘ ์ž์ฒด๊ฐ€ "๊ฒ‰์œผ๋กœ ๋“œ๋Ÿฌ๋‚˜์ง€ ์•Š๋Š” ์ž๊ธฐ ๋ณ€ํ˜•"์ด๋ผ๋Š” ์ฃผ์ œ์™€ ์ž˜ ์–ด์šธ๋ฆฐ๋‹ค. ๋ฆฌ๋ฒ„์„œ ์ž…์žฅ์—์„œ ์ด๋Ÿฐ ํ”„๋กœ๊ทธ๋žจ์„ ์ƒ๋Œ€ํ•  ๋•Œ๋Š”, ํ”„๋กœ๊ทธ๋žจ์ด ์Šค์Šค๋กœ๋ฅผ ๋“œ๋Ÿฌ๋‚ด์ฃผ๊ธธ ๊ธฐ๋‹ค๋ฆฌ๋Š” ๋Œ€์‹  ๊ทธ ๋ณ€ํ˜• ๊ณผ์ • ์ž์ฒด๋ฅผ ์ฝ”๋“œ ๋ฐ–์—์„œ ๊ทธ๋Œ€๋กœ ์žฌํ˜„ํ•ด๋ฒ„๋ฆฌ๋Š” ์ชฝ์ด ์œ ์ผํ•œ ์‹ค์ „์ ์ธ ์ ‘๊ทผ์ด์—ˆ๋‹ค.

์ „์ฒด ํ’€์ด ํ๋ฆ„ ๋‹ค์ด์–ด๊ทธ๋žจ โ€” ์ž„ํฌํŠธ์— I/O ํ•จ์ˆ˜๊ฐ€ ์—†์Œ์„ ํ™•์ธ, strace๋กœ ๋ฌด์ถœ๋ ฅ ํ™•์ธ, ์‹œ๋“œ ๋ฒ„ํผ์™€ ์„ธ ๋ณ€ํ™˜์„ objdump๋กœ ๋ถ„์„, gdb๋กœ free() ์ง์ „ ํž™์„ ์‹ค์‹œ๊ฐ„ ๊ฒ€์ฆํ•˜๋Š” 4๋‹จ๊ณ„

๐Ÿ“ ๊ฒฐ๋ก 

์ด ๋ฌธ์ œ๊ฐ€ ํŠน์ดํ–ˆ๋˜ ์ง€์ ์€ "์‹คํ–‰ํ•ด์„œ ํ™•์ธํ•œ๋‹ค"๋Š”, ๋ฆฌ๋ฒ„์‹ฑ์—์„œ ๊ฐ€์žฅ ๊ธฐ๋ณธ์ ์ธ ๊ฒ€์ฆ ์ˆ˜๋‹จ ์ž์ฒด๊ฐ€ ์• ์ดˆ์— ํ†ตํ•˜์ง€ ์•Š๋„๋ก ์„ค๊ณ„๋ผ ์žˆ์—ˆ๋‹ค๋Š” ์ ์ด๋‹ค.

  • ์ž„ํฌํŠธ ๋ชฉ๋ก์„ ๊ฐ€์žฅ ๋จผ์ € ํ™•์ธํ•˜๋Š” ์Šต๊ด€์ด ์‹œ๊ฐ„์„ ํฌ๊ฒŒ ์•„๊ปด์คฌ๋‹ค. read/write ๊ณ„์—ด์ด ํ•˜๋‚˜๋„ ์—†๋‹ค๋Š” ๊ฑธ ์ฒ˜์Œ์— ์•Œ์•˜๋‹ค๋ฉด, "์ž…๋ ฅ์„ ๋„ฃ๊ณ  ์ถœ๋ ฅ์„ ๊ธฐ๋‹ค๋ฆฌ๋Š”" ์‹์˜ ์ ‘๊ทผ์„ ์•„์˜ˆ ์‹œ๋„์กฐ์ฐจ ํ•˜์ง€ ์•Š๊ณ  ๋ฐ”๋กœ ์ •์ ๋ถ„์„์œผ๋กœ ๋“ค์–ด๊ฐˆ ์ˆ˜ ์žˆ์—ˆ๋‹ค. ๋‚˜๋Š” ๋จผ์ € ๋ช‡ ๋ฒˆ ์‹คํ–‰ํ•ด๋ณด๊ณ  ๋‚˜์„œ์•ผ ์ž„ํฌํŠธ๋ฅผ ํ™•์ธํ–ˆ๋Š”๋ฐ, ์ˆœ์„œ๋ฅผ ๋ฐ”๊ฟจ๋‹ค๋ฉด ๋” ๋นจ๋ž์„ ๊ฒƒ์ด๋‹ค. ๋ฆฌ๋ฒ„์‹ฑ ๋ฌธ์ œ๋ฅผ ๋ฐ›์œผ๋ฉด ๋ฐ˜์‚ฌ์ ์œผ๋กœ ./chall๋ถ€ํ„ฐ ์‹คํ–‰ํ•ด๋ณด๋Š” ์Šต๊ด€์ด ์žˆ๋Š”๋ฐ, ์ด ๋ฌธ์ œ๋Š” ๊ทธ ์Šต๊ด€์ด ํ†ตํ•˜์ง€ ์•Š๋Š” ์‚ฌ๋ก€์˜€๊ณ , ์•ž์œผ๋กœ๋Š” checksec/file ๋‹ค์Œ ์ˆœ์„œ๋กœ ์ž„ํฌํŠธ ๋ชฉ๋ก๋ถ€ํ„ฐ ํ™•์ธํ•˜๋Š” ๊ฑธ ๊ธฐ๋ณธ ๋ฃจํ‹ด์— ๋„ฃ์–ด๋‘๋Š” ๊ฒŒ ๋‚˜์„ ๊ฒƒ ๊ฐ™๋‹ค.
  • ๊ทธ๋Ÿด๋“ฏํ•ด ๋ณด์ด๋Š” ๊ณ„์‚ฐ์ด ํ•ญ์ƒ ๊ฒ€์ฆ ๋กœ์ง์ธ ๊ฑด ์•„๋‹ˆ๋‹ค. f1357์ฒ˜๋Ÿผ "์ฒดํฌ์„ฌ์„ ๊ณ„์‚ฐํ•˜๋Š” ๊ฒƒ์ฒ˜๋Ÿผ ์ƒ๊ธด" ์ฝ”๋“œ๊ฐ€ ์‹ค์ œ๋กœ๋Š” ๊ฒฐ๊ณผ๋ฅผ ์–ด๋””์—๋„ ์“ฐ์ง€ ์•Š๋Š” ๋””์ฝ”์ด์ผ ์ˆ˜ ์žˆ๋‹ค. ๊ทธ ๊ณ„์‚ฐ ๊ฒฐ๊ณผ๊ฐ€ ํ”„๋กœ๊ทธ๋žจ์˜ ๋‚˜๋จธ์ง€ ๋™์ž‘์— ์‹ค์ œ๋กœ ์˜ํ–ฅ์„ ์ฃผ๋Š”์ง€(๋ณ€์ˆ˜์— ์ €์žฅ๋ผ ์ดํ›„ ๋ถ„๊ธฐ๋‚˜ ์“ฐ๊ธฐ ์—ฐ์‚ฐ์— ์“ฐ์ด๋Š”์ง€)๋ฅผ ๋๊นŒ์ง€ ์ถ”์ ํ•ด๋ณด๊ธฐ ์ „์—๋Š” "์ด๊ฒŒ ํ•ต์‹ฌ์ด๋‹ค"๋ผ๊ณ  ๋‹จ์ •ํ•˜์ง€ ์•Š๋Š” ๊ฒŒ ์•ˆ์ „ํ–ˆ๋‹ค.
  • ์ถœ๋ ฅ์ด ์—†์–ด๋„ gdb๋Š” ์‚ด์•„์žˆ๋Š” ๋ฉ”๋ชจ๋ฆฌ๋ฅผ ๋ณด์—ฌ์ค€๋‹ค. ์ด ๋ฐ”์ด๋„ˆ๋ฆฌ์ฒ˜๋Ÿผ ์ฝ˜์†” ์ถœ๋ ฅ์ด ์ „ํ˜€ ์—†๋Š” ํ”„๋กœ๊ทธ๋žจ์ด๋ผ๋„, ํž™์— ํ• ๋‹น๋œ ๋ฐ์ดํ„ฐ๋Š” ์‹ค์ œ๋กœ ์กด์žฌํ•˜๊ณ  free() ๊ฐ™์€ ํ•จ์ˆ˜ ํ˜ธ์ถœ ์‹œ์ ์— ์ธ์ž๋กœ ๊ทธ ์ฃผ์†Œ๊ฐ€ ๋„˜์–ด๊ฐ„๋‹ค. ํ‘œ์ค€ ์ถœ๋ ฅ์„ ๊ฐ€๋กœ์ฑŒ ์ˆ˜ ์—†๋‹ค๊ณ  ํ•ด์„œ ๋Ÿฐํƒ€์ž„ ๊ฒ€์ฆ์ด ๋ถˆ๊ฐ€๋Šฅํ•œ ๊ฑด ์•„๋‹ˆ๋‹ค โ€” ์–ด๋–ค ํ•จ์ˆ˜๊ฐ€ ๊ทธ ๋ฐ์ดํ„ฐ๋ฅผ ์ธ์ž๋กœ ๋ฐ›๋Š”์ง€๋งŒ ์ฐพ์œผ๋ฉด ๊ฑฐ๊ธฐ์— ๋ธŒ๋ ˆ์ดํฌํฌ์ธํŠธ๋ฅผ ๊ฑธ๋ฉด ๋œ๋‹ค.

๋ฐฉ์–ด์ž ๊ด€์ ์—์„œ ๋ณด๋ฉด, ์ด ๋ฌธ์ œ๋Š” "๊ด€์ฐฐ ๊ฐ€๋Šฅํ•œ ์ถœ๋ ฅ์ด ์—†๋‹ค"๋Š” ๊ฒƒ๊ณผ "์•ˆ์ „ํ•˜๋‹ค"๋Š” ๊ฒƒ์ด ์ „ํ˜€ ๋‹ค๋ฅธ ์ด์•ผ๊ธฐ๋ผ๋Š” ๊ฑธ ๋ณด์—ฌ์ค€๋‹ค. ์‹ค์ „์—์„œ๋„ ๋กœ๊ทธ๋ฅผ ์ „ํ˜€ ๋‚จ๊ธฐ์ง€ ์•Š๊ฑฐ๋‚˜ ์‘๋‹ต์„ ๋Œ๋ ค์ฃผ์ง€ ์•Š๋Š” ํ”„๋กœ์„ธ์Šค๊ฐ€ "๋ธ”๋ž™๋ฐ•์Šค๋ผ์„œ ์•ˆ์ „ํ•˜๋‹ค"๊ณ  ์˜คํ•ด๋ฐ›๋Š” ๊ฒฝ์šฐ๊ฐ€ ์žˆ๋Š”๋ฐ, ๋””๋ฒ„๊ฑฐ๋‚˜ ๋ฉ”๋ชจ๋ฆฌ ํฌ๋ Œ์‹ ๋„๊ตฌ ์•ž์—์„œ๋Š” ๊ทธ ์–ด๋–ค ํ”„๋กœ๊ทธ๋žจ๋„ ์™„์ „ํ•œ ๋ธ”๋ž™๋ฐ•์Šค๊ฐ€ ๋  ์ˆ˜ ์—†๋‹ค. ๋ฏผ๊ฐํ•œ ๋ฐ์ดํ„ฐ๋ฅผ ๋‹ค๋ฃจ๋Š” ํ”„๋กœ์„ธ์Šค๋ผ๋ฉด ์ฝ˜์†” ์ถœ๋ ฅ ์—ฌ๋ถ€์™€ ๋ฌด๊ด€ํ•˜๊ฒŒ, ๊ทธ ๋ฐ์ดํ„ฐ๊ฐ€ ๋ฉ”๋ชจ๋ฆฌ์— ์–ผ๋งˆ๋‚˜ ์˜ค๋ž˜ ํ‰๋ฌธ์œผ๋กœ ๋‚จ์•„์žˆ๋Š”์ง€, ํž™ ํ• ๋‹น์ž์— ์ „๋‹ฌ๋˜๋Š” ์ˆœ๊ฐ„๊นŒ์ง€๋„ ๋…ธ์ถœ ๊ฒฝ๋กœ๊ฐ€ ๋  ์ˆ˜ ์žˆ๋‹ค๋Š” ๊ฑธ ํ•จ๊ป˜ ๊ณ ๋ คํ•ด์•ผ ํ•œ๋‹ค.

์ด ๋ฌธ์ œ๋ฅผ ์ฒ˜์Œ ๋ดค์„ ๋•Œ๋Š” "์ถœ๋ ฅ์ด ์—†์œผ๋ฉด ํ’€ ๋ฐฉ๋ฒ•๋„ ์—†๋Š” ๊ฒƒ ์•„๋‹Œ๊ฐ€"๋ผ๋Š” ์ƒ๊ฐ์ด ์ž ๊น ์Šค์ณค๋‹ค. ํ•˜์ง€๋งŒ ๋ฆฌ๋ฒ„์‹ฑ์ด๋ผ๋Š” ์ž‘์—… ์ž์ฒด๊ฐ€ ์›๋ž˜ "ํ”„๋กœ๊ทธ๋žจ์ด ์Šค์Šค๋กœ ๋งํ•ด์ฃผ๋Š” ๊ฒƒ"์— ์˜์กดํ•˜๋Š” ๊ฒŒ ์•„๋‹ˆ๋ผ "ํ”„๋กœ๊ทธ๋žจ์ด ์–ด๋–ป๊ฒŒ ๋งŒ๋“ค์–ด์กŒ๋Š”์ง€๋ฅผ ์ฝ”๋“œ๋กœ๋ถ€ํ„ฐ ์ง์ ‘ ์ฝ์–ด๋‚ด๋Š”" ์ž‘์—…์ด๋ผ๋Š” ๊ฑธ ์ƒ๊ฐํ•˜๋ฉด, ์ถœ๋ ฅ์˜ ์œ ๋ฌด๋Š” ์‚ฌ์‹ค ๋ถ€์ฐจ์ ์ธ ๋ฌธ์ œ์˜€๋‹ค. ์‹คํ–‰ ๊ฒฐ๊ณผ๋ฅผ ๋ˆˆ์œผ๋กœ ํ™•์ธํ•˜๋Š” ๊ฑด ์ •์ ๋ถ„์„์ด ๋งž์•˜๋Š”์ง€ ๊ฒ€์ฆํ•˜๋Š” ์—ฌ๋Ÿฌ ์ˆ˜๋‹จ ์ค‘ ํ•˜๋‚˜์ผ ๋ฟ์ด์ง€, ๊ทธ๊ฒŒ ์œ ์ผํ•œ ์ง„์ž…์ ์€ ์•„๋‹ˆ๋‹ค โ€” ์ด๋ฒˆ์—” ๊ทธ ๊ฒ€์ฆ ์ˆ˜๋‹จ์ด ํ‘œ์ค€ ์ถœ๋ ฅ ๋Œ€์‹  gdb์˜€์„ ๋ฟ์ด๋‹ค.

์ด ๊ธ€์ด ๋„์›€์ด ๋๋‚˜์š”?

Comments

๋Œ“๊ธ€

0๊ฐœ

๋Œ“๊ธ€์„ ๋‚จ๊ธฐ๋ ค๋ฉด ๋กœ๊ทธ์ธ์ด ํ•„์š”ํ•ด์š”. (๋„ค์ด๋ฒ„ ยท ๊ตฌ๊ธ€ ๊ณ„์ •)

๋Œ“๊ธ€ ๋ถˆ๋Ÿฌ์˜ค๋Š” ์ค‘โ€ฆ

Related

๊ด€๋ จ ๊ธ€

3๊ฐœ
[๐Ÿฅˆ Silver 3] 2MB ๋ฐ”์ด๋„ˆ๋ฆฌ์—์„œ ์ฝ”๋“œ๋Š” 509๋ฐ”์ดํŠธ๋ฟ์ด์—ˆ๋‹ค โ€” DreamHack Branches and Leaves ํ’€์ด
blog

[๐Ÿฅˆ Silver 3] 2MB ๋ฐ”์ด๋„ˆ๋ฆฌ์—์„œ ์ฝ”๋“œ๋Š” 509๋ฐ”์ดํŠธ๋ฟ์ด์—ˆ๋‹ค โ€” DreamHack Branches and Leaves ํ’€์ด

๋ฌธ์ œ ์„ค๋ช…์ด ์‹œ ๋„ค ์ค„๋ฟ์ธ ๋ฆฌ๋ฒ„์‹ฑ. 2.1MB์งœ๋ฆฌ stripped ELF๋ฅผ ์—ด์–ด ๋ณด๋ฉด ์ฝ”๋“œ๋Š” 509๋ฐ”์ดํŠธ๊ณ  ๋‚˜๋จธ์ง€ ์ „๋ถ€๊ฐ€ ๋ฐฐ์—ด๋กœ ์ ‘์€ ๊นŠ์ด 16 ์ด์ง„ํŠธ๋ฆฌ๋‹ค. ์ž…๋ ฅ 4๊ธ€์ž๊ฐ€ 16๋น„ํŠธ๋กœ ํŽด์ ธ ํŠธ๋ฆฌ๋ฅผ 16๋ฒˆ ๋‚ด๋ ค๊ฐ€๊ณ , ๊ทธ ๋ฆฌํ”„ 65536๊ฐœ๊ฐ€ ์„œ๋กœ ๊ฒน์น˜์ง€ ์•Š์•„์„œ ๊ธฐ๋Œ€๊ฐ’๋งˆ๋‹ค ์—ญ์ƒ์ด ์ •ํ™•ํžˆ ํ•˜๋‚˜๋กœ ์ •ํ•ด์ง„๋‹ค.
#dreamhack#ctf#reversing+5
2026-08-19#dreamhack +5
[๐Ÿฅˆ Silver 3] srand(0xBEEF) ํ•˜๋‚˜๋กœ 6MB ์‚ฌ์ง„์„ ๋˜์ฐพ๋‹ค โ€” DreamHack photographer ํ’€์ด
blog

[๐Ÿฅˆ Silver 3] srand(0xBEEF) ํ•˜๋‚˜๋กœ 6MB ์‚ฌ์ง„์„ ๋˜์ฐพ๋‹ค โ€” DreamHack photographer ํ’€์ด

BMP ํ•œ ์žฅ์„ ํ†ต์งธ๋กœ ๋ฐ”๊ฟ” ๋†“์€ 26KB์งœ๋ฆฌ C++ ๋ฐ”์ด๋„ˆ๋ฆฌ. ์‹œ๋“œ๊ฐ€ time(NULL)์ด ์•„๋‹ˆ๋ผ ์ƒ์ˆ˜ 0xBEEF๊ณ , ๋ฐ”์ดํŠธ๋งˆ๋‹ค rand()๋ฅผ ์ •ํ™•ํžˆ ํ•œ ๋ฒˆ์”ฉ๋งŒ ์“ฐ๋ฉฐ, ์„ธ ๊ฐˆ๋ž˜ ๋ณ€ํ™˜์ด ๋ชจ๋‘ ๊ฐ€์—ญ์ด๋‹ค. ๊ทธ ์„ธ ์กฐ๊ฑด์ด ๋งž์•„๋–จ์–ด์ ธ์„œ ์—ญํ•จ์ˆ˜๋ฅผ ๊ฐ™์€ ์ˆœ์„œ๋กœ ํ•œ ๋ฒˆ์”ฉ ๊ฑธ๋ฉด 6,220,854๋ฐ”์ดํŠธ๊ฐ€ ๊ทธ๋Œ€๋กœ ๋Œ์•„์˜จ๋‹ค.
#dreamhack#ctf#reversing+5
2026-08-17#dreamhack +5
[๐Ÿฅˆ Silver 1] ํ‚ค์ŠคํŠธ๋ฆผ 1๋น„ํŠธ๋กœ ๋˜๋Œ๋ฆฐ SNOW 3G โ€” DreamHack snow ํ’€์ด
blog

[๐Ÿฅˆ Silver 1] ํ‚ค์ŠคํŠธ๋ฆผ 1๋น„ํŠธ๋กœ ๋˜๋Œ๋ฆฐ SNOW 3G โ€” DreamHack snow ํ’€์ด

20KB ์งœ๋ฆฌ ์ŠคํŠธ๋ฆฝํŠธ ELF ์•ˆ์— 3GPP ํ‘œ์ค€ ์ŠคํŠธ๋ฆผ ์•”ํ˜ธ SNOW 3G ๊ฐ€ ํ†ต์งธ๋กœ ๋“ค์–ด ์žˆ์—ˆ๋‹ค. ํ‚ค๋Š” "Merry-Christmas!" ๋กœ ๊ณ ์ •์ด๊ณ  IV ๋Š” ์šฐ๋ฆฌ๊ฐ€ ๋„ฃ๋Š” ์ž…๋ ฅ์˜ ์•ž 16๋ฐ”์ดํŠธ โ€” ์ฆ‰ ๋ณต์›ํ•ด์•ผ ํ•  ๊ฐ’์ด ์ž๊ธฐ ์ž์‹ ์„ ์•”ํ˜ธํ™”ํ•œ๋‹ค. ์›Œ๋“œ๋งˆ๋‹ค ํ•„์š”ํ•œ ์ •๋ณด๊ฐ€ ํ‚ค์ŠคํŠธ๋ฆผ์˜ ์ตœํ•˜์œ„ 1๋น„ํŠธ๋ฟ์ด๋ผ๋Š” ์ ์„ ์ด์šฉํ•ด 256๊ฐ€์ง€๋งŒ ํ™•์ธํ•˜๊ณ  32๊ธ€์ž๋ฅผ ๋˜๋Œ๋ ธ๋‹ค.
#dreamhack#ctf#reversing+6
2026-08-17#dreamhack +5