๋ณธ๋ฌธ ๋ฐ”๋กœ๊ฐ€๊ธฐ
๐Ÿ”’์ •๋ณด๋ณด์•ˆ/๋ฆฌ๋ฒ„์‹ฑ

๋ฆฌ๋ฒ„์‹ฑ - go ์–ธ์–ด .exe ํŒŒ์ผ main ํ•จ์ˆ˜ ๋ฐ print ํ•จ์ˆ˜ ์ฐพ๊ธฐ

by Janger 2024. 3. 7.
728x90
๋ฐ˜์‘ํ˜•

 

main ํ•จ์ˆ˜ ์ฐพ์€ ๋ฐฉ๋ฒ•

 

IDA์—์„œ ํ•จ์ˆ˜ ๋ชฉ๋ก์„ ๋ณด๋‹ˆ๊น main_main์ด ๊ทธ๋Œ€๋กœ ๋…ธ์ถœ๋˜์–ด ์žˆ์—ˆ์Œ

(x64dbg์—๋„ ida์ฒ˜๋Ÿผ ์„œ๋ธŒ๋ฃจํ‹ด์„ ๋ฆฌ์ŠคํŠธํ™”ํ•˜๋Š” ๊ธฐ๋Šฅ์ด ์žˆ์—ˆ์œผ๋ฉด ์ข‹๊ฒ ๋‹ค.. )

 

 

 

x64dbg์—์„œ๋Š” ํ•จ์ˆ˜๋“ค์„ ์ฐพ๊ธฐ ์–ด๋ ค์› ๋Š”๋ฐ ์ฝ”๋“œ๋ฅผ ํ•œ์ค„ํ•œ์ค„์”ฉ ์ฒœ์ฒœํžˆ ์‹คํ–‰์„ ํ•˜๋ฉด ์Šค๋ ˆ๋“œ ๋ฌธ์ œ์ธ์ง€ ์ž๊พธ ์˜ˆ์™ธ ์˜ค๋ฅ˜๊ฐ€ ๋œฌ๋‹ค.. 

(์ฐพ์•„๋ณด๋‹ˆ๊น SEH: Structured Exception Handling๋ผ๋Š” ๊ฒƒ ๊ฐ™๋‹ค. ์ฃผ๋กœ ์ž˜๋ชป๋œ ๋ฉ”๋ชจ๋ฆฌ๋ฅผ ์ฐธ์กฐํ•˜๋Š” ๊ฒฝ์šฐ ๋ฐœ์ƒ)

 

Exception 0x80000004 0x0 0x0 0x623c1d
PC=0x623c1d

runtime.mstart0()
        C:/Program Files/Go/src/runtime/proc.go:1553 +0x5d fp=0x74521ffb38 sp=0x74521ffb10 pc=0x623c1d
runtime.mstart()
        C:/Program Files/Go/src/runtime/asm_amd64.s:394 +0x5 fp=0x74521ffb40 sp=0x74521ffb38 pc=0x6446a5

goroutine 1 [running]:
        goroutine running on other thread; stack unavailable

goroutine 2 [force gc (idle)]:
runtime.gopark(0x0?, 0x0?, 0x0?, 0x0?, 0x0?)
        C:/Program Files/Go/src/runtime/proc.go:398 +0xce fp=0xc000043fa8 sp=0xc000043f88 pc=0x62162e
Test
runtime.goparkunlock(...)
        C:/Program Files/Go/src/runtime/proc.go:404
runtime.forcegchelper()
        C:/Program Files/Go/src/runtime/proc.go:322 +0xb8 fp=0xc000043fe0 sp=0xc000043fa8 pc=0x6214b8
runtime.goexit()
        C:/Program Files/Go/src/runtime/asm_amd64.s:1650 +0x1 fp=0xc000043fe8 sp=0xc000043fe0 pc=0x646741
created by runtime.init.6 in goroutine 1
        C:/Program Files/Go/src/runtime/proc.go:310 +0x1a

goroutine 3 [GC sweep wait]:
runtime.gopark(0x0?, 0x0?, 0x0?, 0x0?, 0x0?)
        C:/Program Files/Go/src/runtime/proc.go:398 +0xce fp=0xc000045f78 sp=0xc000045f58 pc=0x62162e
runtime.goparkunlock(...)
        C:/Program Files/Go/src/runtime/proc.go:404
runtime.bgsweep(0x0?)
        C:/Program Files/Go/src/runtime/mgcsweep.go:280 +0x94 fp=0xc000045fc8 sp=0xc000045f78 pc=0x60d1f4
runtime.gcenable.func1()
        C:/Program Files/Go/src/runtime/mgc.go:200 +0x25 fp=0xc000045fe0 sp=0xc000045fc8 pc=0x602585
runtime.goexit()
        C:/Program Files/Go/src/runtime/asm_amd64.s:1650 +0x1 fp=0xc000045fe8 sp=0xc000045fe0 pc=0x646741
created by runtime.gcenable in goroutine 1
        C:/Program Files/Go/src/runtime/mgc.go:200 +0x66

goroutine 4 [GC scavenge wait]:
runtime.gopark(0xc000018070?, 0x672118?, 0x1?, 0x0?, 0xc000040b60?)
        C:/Program Files/Go/src/runtime/proc.go:398 +0xce fp=0xc000055f70 sp=0xc000055f50 pc=0x62162e
runtime.goparkunlock(...)
        C:/Program Files/Go/src/runtime/proc.go:404
runtime.(*scavengerState).park(0x6bf7c0)
        C:/Program Files/Go/src/runtime/mgcscavenge.go:425 +0x49 fp=0xc000055fa0 sp=0xc000055f70 pc=0x60aac9
runtime.bgscavenge(0x0?)
        C:/Program Files/Go/src/runtime/mgcscavenge.go:653 +0x3c fp=0xc000055fc8 sp=0xc000055fa0 pc=0x60b05c
runtime.gcenable.func2()
        C:/Program Files/Go/src/runtime/mgc.go:201 +0x25 fp=0xc000055fe0 sp=0xc000055fc8 pc=0x602525
runtime.goexit()
        C:/Program Files/Go/src/runtime/asm_amd64.s:1650 +0x1 fp=0xc000055fe8 sp=0xc000055fe0 pc=0x646741
created by runtime.gcenable in goroutine 1
        C:/Program Files/Go/src/runtime/mgc.go:201 +0xa5
rax     0x74521f0ee0
rbx     0x0
rcx     0xc000040d00
rdi     0xc00004cc58
rsi     0x0
rbp     0x74521ffb28
rsp     0x74521ffb10
r8      0xc00004cc00
r9      0x648160
r10     0x0
r11     0x0
r12     0x0
r13     0x0
r14     0xc000040d00
r15     0x0
rip     0x623c1d
rflags  0x202
cs      0x33
fs      0x53
gs      0x2b

 

 

 

์˜ˆ์™ธ๋ฅผ ๋ฐœ์ƒ์‹œํ‚ฌ ๊ฒฝ์šฐ์—๋Š” ์ด๋ ‡๊ฒŒ ntdll.dll๋ฅผ ๋ถˆ๋Ÿฌ์„œ ์˜ˆ์™ธ๋ฅผ ์ฒ˜๋ฆฌํ–ˆ๋‹ค. 

 

 

 

 

์•„๋ฌดํŠผ ida๋กœ main ํ•จ์ˆ˜ ์ฃผ์†Œ(.text:000000000064BBE0)๋ฅผ ์ฐพ์•„์„œ x64dbg๋กœ ์ด๋™ํ•œ ๋‹ค์Œ ๋ ˆ์ด๋ธ”์„ ์ถ”๊ฐ€ํ•ด ์ฃผ์—ˆ๋‹ค. 

๋ ˆ์ด๋ธ”์„ ์ถ”๊ฐ€ํ•˜๋ฉด call test.654330๋ฅผ call <test.main ํ•จ์ˆ˜> ์ฒ˜๋Ÿผ ๋ถ„์„ํ•˜๊ธฐ ํŽธํ•˜๋„๋ก ๋ฐ”๊ฟ€ ์ˆ˜ ์žˆ๋‹ค. 

 

print ํ•จ์ˆ˜ ์ฐพ๊ธฐ ๋ฐ ์ถœ๋ ฅ ๋ฌธ์ž ๋ณ€๊ฒฝ

 

์ด์ œ main ํ•จ์ˆ˜๋ฅผ ์ฐพ์•˜๋‹ค๋ฉด print ํ•จ์ˆ˜๋ฅผ ์ฐพ๋Š” ๊ฑด ์‹์€ ์ฃฝ ๋จน๊ธฐ๋‹ค. 

 

 

print๋ฅผ ์ถœ๋ ฅํ•˜๊ธฐ ์ „์—๋Š” ๋ช‡ ๊ฐ€์ง€ ์ธ์ž๋“ค์„ ์ „๋‹ฌํ•œ๋‹ค. 

์ฒซ ๋ฒˆ์งธ๋Š” ๋ฌธ์ž ๋ฐ์ดํ„ฐ(Test\n), ๋‘ ๋ฒˆ์งธ๋Š” ๋ฌธ์ž์˜ ํฌ๊ธฐ(5)

 

๋ฌธ์ž๋ฅผ "Hello Reversing!\n"์œผ๋กœ ๋ฐ”๊พธ๋ฉด ์•„๋ž˜์ฒ˜๋Ÿผ ๋ณ€๊ฒฝ์„ ํ•œ๋‹ค. 

 

ํฌ๊ธฐ๋Š” 0x11(17)๋กœ ๋ฐ”๊พธ๊ณ  ๋ฌธ์ž ๋์—๋Š” 0x0A(\n)์„ ์‚ฝ์ž…ํ•œ๋‹ค. 

 

๋‹ค์‹œ ์ฝ”๋“œ๋ฅผ ์‹คํ–‰์‹œํ‚ค๋‹ˆ ๊ฐ’์ด ์ œ๋Œ€๋กœ ๋ฐ”๋€Œ๋Š” ๊ฒƒ์„ ํ™•์ธํ•  ์ˆ˜ ์žˆ๋‹ค. 

 

 

๋ฉ”๋ชจ๋ฆฌ์— ๊ฐ€์žฅ ๋์— ๋นˆ ๊ณต๊ฐ„(Null Padding)์— ์ž„์˜์˜ ๋ฌธ์ž๋ฅผ ์ถ”๊ฐ€ํ•˜๊ณ  ํ•ด๋‹น ์ฃผ์†Œ๋ฅผ ๋ถˆ๋Ÿฌ์˜ค๋Š” ๋ฐฉ์‹์œผ๋กœ๋„ ์ถœ๋ ฅ์ด ๊ฐ€๋Šฅํ•˜๋‹ค. 

 

728x90
๋ฐ˜์‘ํ˜•