๋ฐ์ํ
๋ฌธ์ ํด์
main ํจ์
dword_40404C ๊ฐ์ด 0 ์ผ๋ก ์์ํด์ 0x2237๊น์ง ์ฆ๊ฐํ๋ฉด์ while๋ฌธ์ด ๋์ํ๊ณ ์๋ค. sleep(0xE10u) ํจ์๋ฅผ ์ฌ์ฉํ์ฌ ํ๋ฒ ์ฆ๊ฐํ ๋๋ง๋ค 1์๊ฐ์ฉ ๊ฑธ๋ฆฌ๋ ๊ฒ์ ํ์ธํ ์ ์๋ค.
๋๊ฐ์ง ๋ฐฉ๋ฒ์ผ๋ก ๊ธฐ๋ค๋ฆฌ์ง ์๊ณ ์งํํ๋๋ก ๋ง๋ค ์ ์์ ๊ฒ ๊ฐ๋ค.
- dword_40404C์ 0x2237๋ณด๋ค ํฐ ๊ฐ์ ๋ฃ๋ ๋ฐฉ๋ฒ
- sleep ํจ์์ 0์ ๋ฃ๋ ๋ฐฉ๋ฒ
๋ฐฉ๋ฒ ์ ํ์ ์ํด sub_401196 ํจ์๋ฅผ ์ดํด๋ณด์
sub_401196
- dword_40404C = 0x2238 ๋ก ์ธํ ํ๋ ๋ฐฉ๋ฒ์ผ๋ก๋ ๊ฐ๋ฅํด ๋ณด์ธ๋ค.
- sleep(0) ์ ์ค์ ํ๋๊ฒ ๊ฐ๋จํด ๋ณด์ฌ ์ด ๋ฐฉ๋ฒ์ ์ฌ์ฉํ๊ณ ์ ํ๋ค.
ํ์ด ๋ฐฉ๋ฒ a) dword_40404C = 0x2238 ์ธํ
ELF ํ์ผ ํฌ๋งท์ด๋ฏ๋ก Linux ํ๊ฒฝ์์ pwndbg๋ฅผ ์ฌ์ฉํ์๋ค.
## ํ์ผ ์คํ
$ gdb ./simple_patch_me
$ break *0x401376
$ run
## dword_40404C ์
๋ฐ์ดํธ
$ set {int}0x40404C = 0x2238
$ continue
ํ์ด ๋ฐฉ๋ฒ b) sleep(0) ์ธํ
sleep ํจ์ ์ธ์ ๊ฐ์ ๋ฃ๋ ๋ถ๋ถ์ break point ์ค์
## ํ์ผ ์คํ
$ gdb ./simple_patch_me
$ break *0x4012a1
$ run
0xe10 ์ 0์ผ๋ก ๋ณ๊ฒฝ
$ x/x 0x4012a1
$ set {int}0x4012a1=0x000000bf
๋ณ๊ฒฝ๋ ๊ฒ์ ํ์ธํ ํ break point๋ฅผ ์ ๊ฑฐํ๊ณ ์คํํด์ค๋ค.
$ info break
$ delete 1
$ continue
๋น ๋ฅด๊ฒ 365์ผ์ด ํ๋ฅด๊ณ flag๊ฐ ์ถ๋ ฅ๋ ๊ฒ์ ํ์ธํ ์ ์๋ค.
๋ฐ์ํ
'๐ดโโ ๏ธ CTF ๐ดโโ ๏ธ > ๋ฆฌ๋ฒ์ฑ' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
[Dream Hack - Reversing] Simple Counter (0) | 2024.08.22 |
---|