[๐Ÿฅˆ Silver 4] ๊ฒ€์€ ๊ฐ€๋ฆผ๋ง‰์„ ret ํ•œ ์ค„๋กœ ๊ฑท์–ด๋‚ด๋‹ค โ€” DreamHack patch ํ’€์ด

2026-06-25ยท1๋ถ„ ์ฝ๊ธฐยท

[๐Ÿฅˆ Silver 4] ๊ฒ€์€ ๊ฐ€๋ฆผ๋ง‰์„ ret ํ•œ ์ค„๋กœ ๊ฑท์–ด๋‚ด๋‹ค โ€” DreamHack patch ํ’€์ด

GDI+ ๋ผ์ธ ๋“œ๋กœ์ž‰์œผ๋กœ flag๋ฅผ ๊ทธ๋ฆฌ๋Š” Windows GUI ํ”„๋กœ๊ทธ๋žจ. flag ๊ธ€์ž๋ฅผ ๊ฒ€์ •์œผ๋กœ ๊ทธ๋ฆฌ๊ธฐ ์ „์—, ๊ฐ™์€ ๊ฒ€์ •์œผ๋กœ ๋‘๊บผ์šด ์„ ์„ ๊ฒน์ณ ๊ทธ๋ ค ๊ฐ€์šด๋ฐ๋ฅผ ๋ฎ๋Š” "๊ฐ€๋ฆผ๋ง‰"์„ ๋จผ์ € ๊น๋‹ค. ๊ฒ€์ • ๊ธ€์ž๊ฐ€ ๊ฒ€์ • ๊ฐ€๋ฆผ๋ง‰ ์œ„์— ์–นํžˆ๋‹ˆ ์•ˆ ๋ณด์ผ ๋ฟ์ด๋‹ค. ๊ฐ€๋ฆผ๋ง‰์„ ๊ทธ๋ฆฌ๋Š” ํ•จ์ˆ˜์˜ ์ฒซ ๋ฐ”์ดํŠธ๋ฅผ ret(0xC3)๋กœ ํŒจ์น˜ํ•ด ๊ฐ€๋ฆผ๋ง‰์„ ํ†ต์งธ๋กœ ์—†์• ๋ฉด flag๊ฐ€ ํฐ ๋ฐฐ๊ฒฝ ์œ„์— ๊ทธ๋Œ€๋กœ ๋“œ๋Ÿฌ๋‚œ๋‹ค.

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

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

์‹คํ–‰ ํ™”๋ฉด โ€” flag ๊ฐ€์šด๋ฐ๊ฐ€ ๊ฒ€์€ ๋ง‰๋Œ€๋กœ ๊ฐ€๋ ค์ ธ ์žˆ๋‹ค
์‹คํ–‰ ํ™”๋ฉด โ€” flag ๊ฐ€์šด๋ฐ๊ฐ€ ๊ฒ€์€ ๋ง‰๋Œ€๋กœ ๊ฐ€๋ ค์ ธ ์žˆ๋‹ค

๋ฌธ์ œ ๊ฐœ์š”

ํ•ญ๋ชฉ๋‚ด์šฉ
๋ฌธ์ œ๋ช…patch
๋‚œ์ด๋„๐Ÿฅˆ Silver 4
๋ถ„๋ฅ˜Reversing
๋Œ€์ƒPatch.exe (PE32+ GUI, x86-64, GDI+)
ํ•ต์‹ฌflag ๊ธ€์ž๋ฅผ ๊ฒ€์ •์œผ๋กœ, ๊ทธ ์œ„ ๊ฐ€๋ฆผ๋ง‰๋„ ๊ฒ€์ •์œผ๋กœ โ†’ ๊ฒ€์ • ์œ„ ๊ฒ€์ •์ด๋ผ ์•ˆ ๋ณด์ž„. ๊ฐ€๋ฆผ๋ง‰ ํ•จ์ˆ˜๋ฅผ ๋ฌด๋ ฅํ™”

๋ฌธ์ œ ์„ค๋ช…๋„ ์นœ์ ˆํ•˜๋‹ค โ€” "flag๋ฅผ ๊ทธ๋ฆฌ๋Š” ๋ฃจํ‹ด์„ ๋ถ„์„ํ•˜๊ณ  ๊ฐ€๋ ค์ง„ flag๋ฅผ ๋ณด์ด๊ฒŒ ํ•ด ์ฃผ์„ธ์š”"์—, ์ฐธ๊ณ  ๋งํฌ๋กœ GDI+ ๋ฌธ์„œ์™€ x64dbg์˜ Patch File ๊ธฐ๋Šฅ์„ ๊ฑธ์–ด ๋’€๋‹ค. ๊ทธ๋ฆฌ๊ธฐ ๋ฃจํ‹ด์„ ์ฝ๊ณ , ๋ฐ”์ด๋„ˆ๋ฆฌ๋ฅผ ํŒจ์น˜ํ•˜๋ผ๋Š” ๋œป์ด๋‹ค.



๐Ÿงฉ ๋ฐฐ๊ฒฝ โ€” GDI+ ๋ผ์ธ ๋“œ๋กœ์ž‰

์ด ํ”„๋กœ๊ทธ๋žจ์€ ํ…์ŠคํŠธ ์ถœ๋ ฅ API(TextOutยทDrawText)๋ฅผ ์“ฐ์ง€ ์•Š๋Š”๋‹ค. ๋Œ€์‹  GDI+์˜ ์„  ๊ทธ๋ฆฌ๊ธฐ๋กœ ๊ธ€์ž ํ•˜๋‚˜ํ•˜๋‚˜๋ฅผ ์ง์ ‘ ๊ทธ๋ฆฐ๋‹ค. import๋ฅผ ๋ณด๋ฉด ์“ฐ๋Š” ํ•จ์ˆ˜๊ฐ€ ๋ช‡ ๊ฐœ ์•ˆ ๋œ๋‹ค.

GdiplusStartup / GdipCreateFromHDC   ; GDI+ ์‹œ์ž‘, HDC๋กœ Graphics ์ƒ์„ฑ
GdipCreatePen1(ARGB color, REAL width, Unit, Pen**)  ; ์ƒ‰ยท๋‘๊ป˜๋ฅผ ๊ฐ€์ง„ ํŽœ
GdipDrawLineI(Graphics, Pen, x1, y1, x2, y2)         ; ๋‘ ์ ์„ ์ž‡๋Š” ์„ 
GdipSetSmoothingMode / GdipDeletePen / GdipDeleteGraphics

GdipCreatePen1์˜ ์ฒซ ์ธ์ž๊ฐ€ ํŽœ ์ƒ‰(ARGB, ์˜ˆ: 0xff000000 = ๋ถˆํˆฌ๋ช… ๊ฒ€์ •)์ด๊ณ , GdipDrawLineI๊ฐ€ ๊ทธ ํŽœ์œผ๋กœ ์„ ์„ ๊ธ‹๋Š”๋‹ค. ์ฆ‰ ํ™”๋ฉด์˜ ๋ชจ๋“  ๊ฒƒ์ด ์„ ๋ถ„์˜ ๋ชจ์Œ์ด๋‹ค. flag ๊ธ€์ž๋„, ๊ทธ๊ฑธ ๊ฐ€๋ฆฌ๋Š” ๋ง‰๋Œ€๋„ ์ „๋ถ€ ์„ ์œผ๋กœ ๊ทธ๋ ค์ง„๋‹ค. ๊ทธ๋ž˜์„œ "๋ฌด์Šจ ์ƒ‰ ์„ ์„, ์–ด๋–ค ์ˆœ์„œ๋กœ ๊ธ‹๋Š”๊ฐ€"๊ฐ€ ์ด ๋ฌธ์ œ์˜ ์ „๋ถ€๋‹ค.


๐Ÿ”ฌ ์ •์ฐฐ โ€” ๋ˆ„๊ฐ€ ๋ฌด์—‡์„ ๊ทธ๋ฆฌ๋‚˜

strings๋กœ๋Š” flag๊ฐ€ ์•ˆ ๋‚˜์˜จ๋‹ค(๊ธ€์ž๊ฐ€ ๋ฌธ์ž์—ด์ด ์•„๋‹ˆ๋ผ ์„ ๋ถ„ ์ขŒํ‘œ๋กœ ๋ฐ•ํ˜€ ์žˆ์œผ๋‹ˆ ๋‹น์—ฐํ•˜๋‹ค). import๋งŒ GDI+๋กœ ๊ฐ€๋“ํ•˜๋‹ค.

file + GDI+ import โ€” ํ…์ŠคํŠธ API ์—†์ด ์„  ๊ทธ๋ฆฌ๊ธฐ๋งŒ ์“ด๋‹ค
file + GDI+ import โ€” ํ…์ŠคํŠธ API ์—†์ด ์„  ๊ทธ๋ฆฌ๊ธฐ๋งŒ ์“ด๋‹ค

GdipDrawLineI ํ˜ธ์ถœ์ฒ˜๋ฅผ ๋”ฐ๋ผ๊ฐ€๋ฉด ํ•จ์ˆ˜๊ฐ€ ์ž”๋œฉ ๋‚˜์˜จ๋‹ค. ๊ธ€์ž ํ•œ ์ž๋‹น ํ•จ์ˆ˜ ํ•˜๋‚˜๊ผด๋กœ, ๊ฐ ํ•จ์ˆ˜๊ฐ€ GdipCreatePen1(์ƒ‰์€ ์ธ์ž๋กœ ๋ฐ›์Œ) โ†’ GdipDrawLineI๋ฅผ ์—ฌ๋Ÿฌ ๋ฒˆ ๋ฐ˜๋ณตํ•ด ๊ธ€์ž ๋ชจ์–‘์„ ๋งŒ๋“ ๋‹ค. ์ด ๊ธ€์ž ํ•จ์ˆ˜๋“ค์„ ํ•œ๋ฐ ๋ชจ์•„ ํ˜ธ์ถœํ•˜๋Š” ๊ณณ์ด ๊ทธ๋ฆฌ๊ธฐ ์˜ค์ผ€์ŠคํŠธ๋ ˆ์ดํ„ฐ(fcn.140002c40)๋‹ค.

์˜ค์ผ€์ŠคํŠธ๋ ˆ์ดํ„ฐ๋Š” ๋‘ ๋‹จ๊ณ„๋กœ ๋‚˜๋‰œ๋‹ค. ๋จผ์ € fcn.140002b80์„ x์ขŒํ‘œ 30, 35, 40 โ€ฆ 90์œผ๋กœ 25๋ฒˆ ๋ถ€๋ฅด๊ณ , ๊ทธ ๋‹ค์Œ ๊ธ€์ž ํ•จ์ˆ˜ 12๊ฐœ๋ฅผ ์ƒ‰ 0xff000000(๊ฒ€์ •)์œผ๋กœ ๋ถ€๋ฅธ๋‹ค.

์˜ค์ผ€์ŠคํŠธ๋ ˆ์ดํ„ฐ โ€” โ‘  ๊ฐ€๋ฆผ๋ง‰ 25ํšŒ โ†’ โ‘ก flag ๊ธ€์ž 12๊ฐœ
์˜ค์ผ€์ŠคํŠธ๋ ˆ์ดํ„ฐ โ€” โ‘  ๊ฐ€๋ฆผ๋ง‰ 25ํšŒ โ†’ โ‘ก flag ๊ธ€์ž 12๊ฐœ

์—ฌ๊ธฐ์„œ ๋ˆˆ์— ๊ฑธ๋ฆฌ๋Š” ๊ฒŒ ๋‘ ๊ฐ€์ง€๋‹ค. โ‘  ์•ž์ชฝ fcn.140002b80๋„ ํ˜ธ์ถœํ•  ๋•Œ ์Šคํƒ์œผ๋กœ ์ƒ‰ 0xff000000(๊ฒ€์ •)์„ ๋„˜๊ธด๋‹ค. โ‘ก ๊ธ€์ž ํ•จ์ˆ˜๋“ค๋„ ์ƒ‰์ด 0xff000000(๊ฒ€์ •)์ด๋‹ค. ๋‘˜ ๋‹ค ๊ฒ€์ •์ธ๋ฐ, ํ•˜๋‚˜๋Š” ๋จผ์ € ๊ทธ๋ ค์ง„๋‹ค.


๐Ÿ’ฃ ํ•ต์‹ฌ โ€” ๊ฒ€์ • ๊ฐ€๋ฆผ๋ง‰ ์œ„์— ๊ฒ€์ • ๊ธ€์ž

fcn.140002b80์ด ๋ฌด์—‡์„ ๊ทธ๋ฆฌ๋Š”์ง€ ๋ณด๋ฉด ๋‹ต์ด ๋‚˜์˜จ๋‹ค. ํŽœ ๋‘๊ป˜๊ฐ€ 10.0(์ƒ์ˆ˜ 0x41200000)์œผ๋กœ ๊ธ€์ž์šฉ ํŽœ(๋‘๊ป˜ 4)๋ณด๋‹ค ํ›จ์”ฌ ๊ตต๊ณ , ํ˜ธ์ถœ๋  ๋•Œ๋งˆ๋‹ค x๋ฅผ 5์”ฉ ์˜ฎ๊ฒจ ๊ฐ€๋ฉฐ ์„ ์„ ๊ธ‹๋Š”๋‹ค. ๊ตต์€ ์„  25๊ฐœ๋ฅผ ์ด˜์ด˜ํžˆ ๊ฒน์น˜๋ฉด โ€” ์†์ด ๊ฝ‰ ์ฐฌ ๊ฒ€์€ ์‚ฌ๊ฐํ˜•, ์ฆ‰ ๊ฐ€๋ฆผ๋ง‰์ด ๋œ๋‹ค.

fcn.140002b80 โ€” ๋‘๊ป˜ 10์งœ๋ฆฌ ๊ตต์€ ์„ (๊ฐ€๋ฆผ๋ง‰)
fcn.140002b80 โ€” ๋‘๊ป˜ 10์งœ๋ฆฌ ๊ตต์€ ์„ (๊ฐ€๋ฆผ๋ง‰)

๊ทธ๋ฆฌ๋Š” ์ˆœ์„œ๊ฐ€ ํ•จ์ •์ด๋‹ค.

  1. ๋จผ์ € ๊ฐ€๋ฆผ๋ง‰(๊ฒ€์ • ์‚ฌ๊ฐํ˜•)์„ flag ๊ฐ€์šด๋ฐ ์œ„์น˜์— ๊ทธ๋ฆฐ๋‹ค.
  2. ๊ทธ ๋‹ค์Œ flag ๊ธ€์ž๋“ค์„ ๊ฒ€์ •์œผ๋กœ ๊ทธ ์œ„์— ๊ทธ๋ฆฐ๋‹ค.

GDI+๋Š” ๋ถ€๋ฅธ ์ˆœ์„œ๋Œ€๋กœ ์œ„์— ๋ง์น ํ•˜๋ฏ€๋กœ, ๊ฐ€์šด๋ฐ ๊ธ€์ž๋“ค์€ ๊ฐ€๋ฆผ๋ง‰ ์œ„์— ๊ทธ๋ ค์ง„๋‹ค. ๊ทธ๋Ÿฐ๋ฐ ๊ธ€์ž๋„ ๊ฒ€์ •, ๊ฐ€๋ฆผ๋ง‰๋„ ๊ฒ€์ •์ด๋ผ ๊ฒ€์ • ์œ„ ๊ฒ€์ • = ๊ตฌ๋ถ„ ๋ถˆ๊ฐ€๋‹ค. ๋ฐ˜๋ฉด DH{์™€ }๋Š” ๊ฐ€๋ฆผ๋ง‰ ๋ฐ”๊นฅ(ํฐ ๋ฐฐ๊ฒฝ) ์œ„์น˜๋ผ ๊ฒ€์ • ๊ธ€์ž๊ฐ€ ๋ฉ€์ฉกํžˆ ๋ณด์ธ๋‹ค. flag๊ฐ€ "์•”ํ˜ธํ™”"๋œ ๊ฒŒ ์•„๋‹ˆ๋ผ, ๋ง ๊ทธ๋Œ€๋กœ ๊ฐ™์€ ์ƒ‰์œผ๋กœ ๋ง์น ํ•ด ๊ฐ€๋ ค ๋‘” ๊ฒƒ์ด๋‹ค.

๊ฐ€๋ฆผ๋ง‰์„ ret๋กœ ์—†์• ๋ฉด flag๊ฐ€ ๋“œ๋Ÿฌ๋‚œ๋‹ค
๊ฐ€๋ฆผ๋ง‰์„ ret๋กœ ์—†์• ๋ฉด flag๊ฐ€ ๋“œ๋Ÿฌ๋‚œ๋‹ค

ํ•ด๊ฒฐ์ฑ…์€ ๊ฐ€๋ฆผ๋ง‰์„ ์—†์• ๋Š” ๊ฒƒ ํ•˜๋‚˜๋กœ ์ถฉ๋ถ„ํ•˜๋‹ค. ๊ฐ€๋ฆผ๋ง‰์„ ๊ทธ๋ฆฌ๋Š” ํ•จ์ˆ˜ fcn.140002b80์ด ์•„๋ฌด๊ฒƒ๋„ ์•ˆ ํ•˜๊ฒŒ ๋งŒ๋“ค๋ฉด, ๊ฐ€์šด๋ฐ ๊ฒ€์ • ๊ธ€์ž๋“ค์ด ํฐ ๋ฐฐ๊ฒฝ ์œ„์— ๊ทธ๋Œ€๋กœ ๋‚จ๋Š”๋‹ค.

โ–ถ๐Ÿ› ์‚ฝ์งˆ โ€” ์ž…๋ ฅยท๋ฌธ์ž์—ดยท์ต์Šค๋ถ€ํ„ฐ ๋’ค์กŒ๋‹ค

๋ฆฌ๋ฒ„์‹ฑ์ด๋ผ ๋ฐ˜์‚ฌ์ ์œผ๋กœ strings๋ถ€ํ„ฐ ๋Œ๋ ธ๋‹ค. flag ๋น„์Šทํ•œ ๊ฒƒ๋„, "Correct/Wrong" ๊ฐ™์€ ๋ถ„๊ธฐ ๋ฌธ์ž์—ด๋„ ์—†๋‹ค. ์ž…๋ ฅ์„ ๋ฐ›๋Š” ์ฝ”๋“œ(GetWindowTextยทscanf ๋“ฑ)๋„ ์—†๋‹ค โ€” ์• ์ดˆ์— ์‚ฌ์šฉ์ž ์ž…๋ ฅ์œผ๋กœ ๋ญ˜ ๋งžํžˆ๋Š” ๋ฌธ์ œ๊ฐ€ ์•„๋‹ˆ์—ˆ๋‹ค.

๊ทธ ๋‹ค์Œ์—” "์–ด๋”˜๊ฐ€ flag๋ฅผ ์กฐ๋ฆฝํ•˜๋Š” ๋ฃจํ‹ด์ด ์žˆ๊ฒ ์ง€" ํ•˜๊ณ  mainโ†’WinMain์„ ๋”ฐ๋ผ๊ฐ”๋Š”๋ฐ, ๋‚˜์˜ค๋Š” ๊ฑด RegisterClassExW๋กœ ์ฐฝ ํ•˜๋‚˜ ๋งŒ๋“ค๊ณ  WM_PAINT์—์„œ ๊ทธ๋ฆผ์„ ๊ทธ๋ฆฌ๋Š” ํ‰๋ฒ”ํ•œ GUI ๊ณจ๊ฒฉ๋ฟ์ด์—ˆ๋‹ค. ๊ฒฐ๊ตญ "์ด๊ฑด ์ž…๋ ฅ์„ ํ‘ธ๋Š” ๊ฒŒ ์•„๋‹ˆ๋ผ ๊ทธ๋ฆผ์„ ํ‘ธ๋Š” ๋ฌธ์ œ"๋ผ๋Š” ๊ฑธ ๋ฐ›์•„๋“ค์ด๊ณ  ๋‚˜์„œ์•ผ GDI+ ํ˜ธ์ถœ๋“ค๊ณผ ๊ทธ๋ฆฌ๊ธฐ ์ˆœ์„œ๊ฐ€ ๋ˆˆ์— ๋“ค์–ด์™”๋‹ค. ๋ฌธ์ œ ์„ค๋ช…์˜ "flag๋ฅผ ๊ทธ๋ฆฌ๋Š” ๋ฃจํ‹ด"์ด๋ผ๋Š” ํ‘œํ˜„์ด ์ •ํ™•ํ•œ ํžŒํŠธ์˜€๋‹ค.



๐ŸŽฏ ํŒจ์น˜ โ€” ๊ฐ€๋ฆผ๋ง‰ ํ•จ์ˆ˜๋ฅผ ret ์‹œํ‚ค๊ธฐ

fcn.140002b80์€ ๊ฐ€๋ฆผ๋ง‰๋งŒ ๊ทธ๋ฆฐ๋‹ค. ๊ทธ๋Ÿฌ๋‹ˆ ์ด ํ•จ์ˆ˜์˜ ์ฒซ ๋ช…๋ น์„ ret(0xC3)๋กœ ๋ฐ”๊พธ๋ฉด, ํ˜ธ์ถœ๋ผ๋„ ์ฆ‰์‹œ ๋Œ์•„๊ฐ€ ์•„๋ฌด๊ฒƒ๋„ ์•ˆ ๊ทธ๋ฆฐ๋‹ค. ํ•จ์ˆ˜ ์ง„์ž… ์งํ›„๋ผ ์Šคํƒ์— pushํ•œ ๊ฒƒ๋„ ์—†์–ด ๊ทธ๋ƒฅ ret ํ•œ ๋ฐ”์ดํŠธ๋ฉด ๊น”๋”ํ•˜๋‹ค.

ํ•จ์ˆ˜ ์‹œ์ž‘์€ ๊ฐ€์ƒ์ฃผ์†Œ 0x140002b80์ด๊ณ , .text ์„น์…˜์ด ๊ฐ€์ƒ์ฃผ์†Œ 0x140001000 โ†’ ํŒŒ์ผ ์˜คํ”„์…‹ 0x400์— ๋งคํ•‘๋˜๋‹ˆ ํŒŒ์ผ ์˜คํ”„์…‹์€ 0x140002b80 - 0x140001000 + 0x400 = 0x1f80์ด๋‹ค. ๊ทธ ์ž๋ฆฌ์˜ 0x48(ํ”„๋กค๋กœ๊ทธ ์ฒซ ๋ฐ”์ดํŠธ)์„ 0xC3์œผ๋กœ ๋ฎ๋Š”๋‹ค. x64dbg๋ผ๋ฉด ๊ทธ ์ฃผ์†Œ์—์„œ Assemble โ†’ ret ํ›„ Patch File์„ ํ•˜๋ฉด ๋˜๊ณ , ์—ฌ๊ธฐ์„  ๊ฐ™์€ ์ผ์„ ํŒŒ์ผ์— ์ง์ ‘ ํ–ˆ๋‹ค.

# patch.py
COVER_VA   = 0x140002b80
TEXT_VA    = 0x140001000   # .text ๊ฐ€์ƒ์ฃผ์†Œ
TEXT_PADDR = 0x400         # .text ํŒŒ์ผ์˜คํ”„์…‹
off = COVER_VA - TEXT_VA + TEXT_PADDR   # 0x1f80
 
data = bytearray(open("Patch.exe", "rb").read())
assert data[off] == 0x48
data[off] = 0xC3          # ๊ฐ€๋ฆผ๋ง‰ ํ•จ์ˆ˜๋ฅผ ์ฆ‰์‹œ ret
open("Patch_patched.exe", "wb").write(data)
patch.py โ€” 0x1f80 ์˜ 48 โ†’ C3
patch.py โ€” 0x1f80 ์˜ 48 โ†’ C3

ํŒจ์น˜ํ•œ ์‹คํ–‰ ํŒŒ์ผ์„ (์—ฌ๊ธฐ์„œ๋Š” wine๋กœ) ์‹คํ–‰ํ•˜๋ฉด ๊ฐ€๋ฆผ๋ง‰์ด ์‚ฌ๋ผ์ง€๊ณ  ๊ฐ€์šด๋ฐ ๊ธ€์ž๊ฐ€ ํฐ ๋ฐฐ๊ฒฝ ์œ„์— ๋“œ๋Ÿฌ๋‚œ๋‹ค.

ํŒจ์น˜ ํ›„ โ€” flag ์ „์ฒด ๋…ธ์ถœ
ํŒจ์น˜ ํ›„ โ€” flag ์ „์ฒด ๋…ธ์ถœ

์„ธ๊ทธ๋จผํŠธ ํฐํŠธ๋ผ ๊ธ€์ž๊ฐ€ ๊ฐ์ ธ ๋ณด์ด์ง€๋งŒ ๊ทธ๋Œ€๋กœ ์ฝํžŒ๋‹ค โ€” D H { U P A T C H E D }.

DH{UPATCHED}

๊ฐ€๋ฆผ๋ง‰์˜ ์ƒ‰๋งŒ ํฐ์ƒ‰์œผ๋กœ ๋ฐ”๊พธ๊ฑฐ๋‚˜(ํ˜ธ์ถœ์ฒ˜ 25๊ณณ์˜ 0xff000000 โ†’ 0xffffffff), ๊ธ€์ž ์ƒ‰์„ ๊ฒ€์ •์ด ์•„๋‹Œ ์ƒ‰์œผ๋กœ ๋ฐ”๊ฟ”๋„ ๊ฐ™์€ ๊ฒฐ๊ณผ๊ฐ€ ๋‚˜์˜ค์ง€๋งŒ, ๊ฐ€๋ฆผ๋ง‰ ํ•จ์ˆ˜ ํ•˜๋‚˜๋ฅผ ret ์‹œํ‚ค๋Š” 1๋ฐ”์ดํŠธ ํŒจ์น˜๊ฐ€ ๊ฐ€์žฅ ๊ฐ„๋‹จํ•˜๋‹ค.


๐Ÿ“ ๊ฒฐ๋ก 

๋ณด์ด์ง€ ์•Š๋Š”๋‹ค๊ณ  ์—†๋Š” ๊ฒŒ ์•„๋‹ˆ๋‹ค. ์ด ๋ฌธ์ œ์˜ flag๋Š” ์•”ํ˜ธํ™”๋˜๊ฑฐ๋‚˜ ์–ด๋”˜๊ฐ€ ์ˆจ๊ฒจ์ง„ ๊ฒŒ ์•„๋‹ˆ๋ผ, ํ™”๋ฉด์— ๋ฉ€์ฉกํžˆ ๊ทธ๋ ค์ง„ ๋’ค ๊ฐ™์€ ์ƒ‰์œผ๋กœ ํ•œ ๋ฒˆ ๋” ๋ง์น ํ•ด ์‹œ๊ฐ์ ์œผ๋กœ๋งŒ ๊ฐ€๋ ค์ ธ ์žˆ์—ˆ๋‹ค. ๋ฐ์ดํ„ฐ๋Š” ์ฒ˜์Œ๋ถ€ํ„ฐ ๊ฑฐ๊ธฐ ์žˆ์—ˆ๊ณ , ๊ทธ๊ฒƒ์„ ๊ฐ€๋ฆฐ ๊ฒƒ๋„ ์ฝ”๋“œ ๋ช‡ ์ค„์ด๋‹ค. ๊ทธ๋ฆฌ๋Š” ์ˆœ์„œ(z-order)์™€ ์ƒ‰๋งŒ ๋ฐ”๊พธ๋ฉด ๊ทธ๋Œ€๋กœ ๋“œ๋Ÿฌ๋‚œ๋‹ค.

์ •๋ฆฌํ•˜๋ฉด,

  1. "๊ฐ€๋ฆผ = ๋ณดํ˜ธ"๊ฐ€ ์•„๋‹ˆ๋‹ค. UI์—์„œ ๋ฌด์–ธ๊ฐ€๋ฅผ ๊ฒ€์€ ์‚ฌ๊ฐํ˜•ยท๋ธ”๋Ÿฌยทvisibility:hidden์œผ๋กœ ๋ฎ์–ด๋„, ๊ทธ ์•„๋ž˜ ์›๋ณธ ๋ฐ์ดํ„ฐ๋Š” ๊ทธ๋Œ€๋กœ ์กด์žฌํ•œ๋‹ค. ๋ฏผ๊ฐ ์ •๋ณด๋Š” ๋ Œ๋”๋ง ๋‹จ๊ณ„๊ฐ€ ์•„๋‹ˆ๋ผ ๋ฐ์ดํ„ฐ ๋‹จ๊ณ„์—์„œ ๋นผ์•ผ ํ•œ๋‹ค(์„œ๋ฒ„์—์„œ ๋งˆ์Šคํ‚นํ•ด ๋‚ด๋ ค๋ณด๋‚ด๊ธฐ ๋“ฑ).
  2. ๋ฐ”์ด๋„ˆ๋ฆฌ ํŒจ์น˜์˜ ๊ธฐ๋ณธ๊ธฐ. ๋ถ„๊ธฐ ํ•˜๋‚˜, ํ•จ์ˆ˜ ํ•˜๋‚˜๋ฅผ ret/nop์œผ๋กœ ๋ฐ”๊พธ๋Š” ๊ฒƒ๋งŒ์œผ๋กœ ํ”„๋กœ๊ทธ๋žจ์˜ ํ–‰๋™์„ ํ†ต์งธ๋กœ ๋ฐ”๊ฟ€ ์ˆ˜ ์žˆ๋‹ค. ๋ผ์ด์„ ์Šค ์ฒดํฌยท์•ˆํ‹ฐ๋””๋ฒ„๊น… ์šฐํšŒ ๊ฐ™์€ ์‹ค์ „ ๋ถ„์„๋„ ๊ฐ™์€ ์›๋ฆฌ์ด๊ณ , x64dbg์˜ Patch File์ด ์ •ํ™•ํžˆ ์ด ์ž‘์—…์„ GUI๋กœ ํ•ด ์ค€๋‹ค.
  3. ๊ทธ๋ฆผ๋„ ์ฝ”๋“œ๋‹ค. ์ถœ๋ ฅ์ด ํ…์ŠคํŠธ๊ฐ€ ์•„๋‹ˆ๋ผ ๊ทธ๋ž˜ํ”ฝ์ด๋ฉด strings๋กœ๋Š” ์•ˆ ์žกํžŒ๋‹ค. ๋ฌด์—‡์„ ๊ทธ๋ฆฌ๋Š” API์ธ์ง€(GDI/GDI+/Direct2Dโ€ฆ)๋ถ€ํ„ฐ ์‹๋ณ„ํ•˜๊ณ , ๊ทธ ํ˜ธ์ถœ ์ˆœ์„œ์™€ ์ธ์ž(์ƒ‰ยท์ขŒํ‘œ)๋ฅผ ๋”ฐ๋ผ๊ฐ€๋ฉด "๊ทธ๋ฆผ์œผ๋กœ ์ˆจ๊ธด ๊ฐ’"๋„ ๊ฒฐ๊ตญ ์ฝ์–ด๋‚ผ ์ˆ˜ ์žˆ๋‹ค.

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

Comments

๋Œ“๊ธ€

0๊ฐœ

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

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

Related

๊ด€๋ จ ๊ธ€

3๊ฐœ
[๐Ÿฅˆ Silver 1] ์ƒ์‡„๋˜๋Š” ์—ฐ์‚ฐ 14๊ฐœ์™€ ๋ฏธ๋ผ ํ‚ค 2๊ฐœ โ€” DreamHack Ransom ํ’€์ด
blog

[๐Ÿฅˆ Silver 1] ์ƒ์‡„๋˜๋Š” ์—ฐ์‚ฐ 14๊ฐœ์™€ ๋ฏธ๋ผ ํ‚ค 2๊ฐœ โ€” DreamHack Ransom ํ’€์ด

UPX ๋กœ ํฌ์žฅ๋œ 32๋น„ํŠธ PE ๊ฐ€ flag.txt ๋ฅผ ๋‘ ๋ฒˆ ์•”ํ˜ธํ™”ํ•œ๋‹ค. ์ง„์งœ main ์€ ์•”ํ˜ธํ™” ํ•จ์ˆ˜๋ฅผ ๋‘˜ ๋ถ€๋ฅด๋Š”๋ฐ, ํ•˜๋‚˜๋งŒ ๋ณด๊ณ  ๋’ค์ง‘์œผ๋ฉด ์•„๋ฌด๊ฒƒ๋„ ์•ˆ ๋‚˜์˜จ๋‹ค. 2๋‹จ๊ณ„๋Š” ๊ณ ์ • ์ธ๋ฑ์Šค ์—ฐ์‚ฐ์ด 15๊ฐœ๋‚˜ ๋ถ™์–ด ์žˆ์ง€๋งŒ 14๊ฐœ๊ฐ€ ์—ญ์—ฐ์‚ฐ ์ง์ด๋ผ ์ƒ์‡„๋˜๊ณ  ์‹ค์งˆ์€ ํ•˜๋‚˜๋ฟ์ด๊ณ , .rdata ์˜ ํ‚ค์ฒ˜๋Ÿผ ์ƒ๊ธด ๋ฌธ์ž์—ด ์…‹ ์ค‘ ๋‘˜์€ ์Šคํƒ์— ๋ณต์‚ฌ๋งŒ ๋˜๊ณ  ์ฝํžˆ์ง€ ์•Š๋Š” ๋ฏธ๋ผ๋‹ค. ํ‚ค๊ฐ€ ํŒŒ์ผ๋ณด๋‹ค ํ•œ ๋ฐ”์ดํŠธ ์งง์•„ ๋งˆ์ง€๋ง‰ ๋ฐ”์ดํŠธ๋Š” ์ดˆ๊ธฐํ™” ์•ˆ ๋œ ์Šคํƒ์„ ์ฝ๋Š”๋‹ค.
#dreamhack#ctf#reversing+7
2026-07-28#dreamhack +4
[๐Ÿฅ‰ Bronze 2] dreamhack.exe์— ์‹ฌ๊ฒจ์•ผ ์—ด๋ฆฌ๋Š” DLL โ€” DreamHack Inject ME!!! ํ’€์ด
blog

[๐Ÿฅ‰ Bronze 2] dreamhack.exe์— ์‹ฌ๊ฒจ์•ผ ์—ด๋ฆฌ๋Š” DLL โ€” DreamHack Inject ME!!! ํ’€์ด

์ต์ŠคํฌํŠธ๋„ ์—†๋Š” DLL์ด DllMain์—์„œ ํ˜ธ์ŠคํŠธ ํ”„๋กœ์„ธ์Šค๋ช…์„ ๊ฒ€์‚ฌํ•œ๋‹ค. ์ด๋ฆ„์ด dreamhack.exe์—ฌ์•ผ flag๋ฅผ ๊ณ„์‚ฐํ•˜๋Š”๋ฐ, ๊ทธ ๊ฐ’์€ ํ”„๋กœ์„ธ์Šค๋ช… ์ฒซ 4๋ฐ”์ดํŠธ๋ฅผ WELL512 PRNG ์‹œ๋“œ๋กœ ์‚ผ์•„ ๋งŒ๋“ ๋‹ค. ํ”„๋กœ์„ธ์Šค๋ช…์ด ๊ณ ์ •์ด๋ผ flag๋Š” ์‹คํ–‰ ์—†์ด ์ •์ ์œผ๋กœ ๋ณต์›๋œ๋‹ค.
#dreamhack#ctf#reversing+5
2026-07-13#dreamhack +4
[๐Ÿฅˆ Silver 1] main ์—†๋Š” ELF โ€” ๋นˆ ์Šคํ… 256๊ฐœ ์ค‘ ํ•˜๋‚˜๊ฐ€ ๋ณต๊ท€์ฃผ์†Œ๋ฅผ ๋ฎ๋Š”๋‹ค โ€” DreamHack No Main ํ’€์ด
blog

[๐Ÿฅˆ Silver 1] main ์—†๋Š” ELF โ€” ๋นˆ ์Šคํ… 256๊ฐœ ์ค‘ ํ•˜๋‚˜๊ฐ€ ๋ณต๊ท€์ฃผ์†Œ๋ฅผ ๋ฎ๋Š”๋‹ค โ€” DreamHack No Main ํ’€์ด

main ๋„ libc ์‹œ๋™ ์ฝ”๋“œ๋„ ์—†๋Š” 26KB ELF. _start ๊ฐ€ ์ž๊ธฐ ์ž์‹ ์„ mmap ํ•ด .init_array ์™€ .fini_array ์˜ ์ฃผ์†Œ๋ฅผ ์ง์ ‘ ์ฐพ์•„ ๋ถ€๋ฅด๊ณ , ์ƒ์„ฑ์ž ์•ˆ ๋นˆ ์Šคํ… 256๊ฐœ ์ค‘ ๋”ฑ ํ•˜๋‚˜๊ฐ€ ์Šคํƒ์˜ ๋ณต๊ท€์ฃผ์†Œ๋ฅผ ๋ฎ์–ด์จ ์ง„์งœ ๊ฒ€์‚ฌ๊ธฐ๋กœ ์ ํ”„ํ•œ๋‹ค. ๋งˆ์ง€๋ง‰ ๊ด€๋ฌธ์€ ๋ง์…ˆ๊ณผ XOR ์ด ์„ž์ธ 10๊ฐœ์˜ ์‹ โ€” ์บ๋ฆฌ๋ฅผ ์ƒํƒœ๋กœ ๋“  LSB ๋น„ํŠธ ํƒ์ƒ‰์œผ๋กœ 0.02์ดˆ์— ๋˜๋Œ๋ ธ๋‹ค.
#dreamhack#ctf#reversing+5
2026-08-22#dreamhack +3