๋ชฉํ๊ฐ : ํ๋ก๊ทธ๋จ์ด ์ข ๋ฃ๋๊ธฐ๊น์ง ๊ฑธ๋ฆฌ๋ ์๊ฐ (๋ฐ๋ฆฌ์ธ์ปจ๋)
์คํ์ ์์ผ๋ณด๋ฉด ๋ช ์ด ๋ค ์ข ๋ฃ๋ฉ๋๋ค.
์ด ์๊ฐ์ ์ง์ ์ธก์ ํ๊ธฐ๋ ์ด๋ ค์ฐ๋ ๋ถ์์ ํด ๋ณด๋๋ก ํฉ์๋ค.
PEiD๋ก ์ด์ด๋ณด๋ฉด ํ๋ก๊ทธ๋จ์ด UPX๋ก ํจํน๋์ด์์์ ํ์ธํ ์ ์์ต๋๋ค.
๋๋ฒ๊ฑฐ๋ก ์ด์ด๋ณผ๊ฒ์.
pushad ๋ช
๋ น์ด ๋ณด์
๋๋ค.
์ฐ๋ฆฌ์๊ฒ ์ต์ํ upx ํจํน์ด๋ ๊ฐ๋จํ ์ธํจํน ํด ์ค๋๋ค.
์ธํจํน ๋ฐฉ๋ฒ
[Ctrl + F]๋ก popad ๋ช ๋ น์ ์ฐพ์ ๋ค ๊ทธ ์ฃผ์๋ก ์ด๋ํ๋ค.
popad ๋ช ๋ น ๋ฐ OEP๋ก jmpํ๋ ๋ช ๋ น์ ์ฐพ์ ๋ค, ํด๋น ๋ช ๋ น์ BP๋ฅผ ๊ฑธ๊ณ F9์ผ๋ก ์คํํด์ค๋ค.
F8 ํค๋ฅผ ํ๋ฒ ๋๋ฌ ์์ถํด์ ๋ ์๋ณธ ์ฝ๋๋ก ์ด๋ํ๋ค.
์๋๋ ์๋ณธ ์ฝ๋์ ๋๋ค.
์ฌ๊ธฐ์ ๊ทธ๋ฅ ์คํํด๋ณผ๊น์?
์ํฐ ๋๋ฒ๊น
๊ธฐ๋ฒ์ด ์ ์ฉ๋์๋ค์.
๋๋ฒ๊ฑฐ์ ์ฌ๋ ค ์คํํ์ ๋์ ์ผ๋ฐ ํ๊ฒฝ์์ ์คํํ์ ๋์ ๊ฒฐ๊ณผ๊ฐ ๋ค๋ฆ
๋๋ค.
๋ง์น ๋ฒ ์ด์ง 4๋ฒ ๋ฌธ์ ์ฒ๋ผ์.
4๋ฒ ๋ฌธ์ ์์๋ IsDebuggerPresent ๋ผ๋ ํจ์๋ฅผ ์ฌ์ฉํ์ฌ ๊ฒฐ๊ณผ๊ฐ ์ ์, ๋๋ ๋๋ฒ๊น
๋นํจ์ผ๋ก ๋ถ๊ธฐํ์์ฃ .
๊ทธ๋ผ 19๋ฒ ๋ฌธ์ ๋ ์ด๋ ต์ง ์๊ฒ ํ ์ ์์ต๋๋ค.
๋๋ฒ๊ฑฐ๋ฅผ ํ์งํ๋ ํจ์๋ฅผ ์ฐพ์ ๋ค์, ๊ทธ ๋ฐ๋ก ๋ฐ ๋ถ๊ธฐ์ ์ ์ฝ๋๋ฅผ ์์ ํ๋ ๋ฐฉ์์ผ๋ก ๋์ด๊ฐ ๋ณผ๊ฒ์.
IsDebuggerPresent ํจ์๋ฅผ ์ฐพ์ BP๋ฅผ ๊ฑธ๊ณ ๊ฐ๋จํ ์ฐํํ๊ฒ ์ต๋๋ค.
์ค๋ฅธ์ชฝ ์๋จ๋ฐ์ ์ ํ๊ธฐ ๋ชจ์ ์์ด์ฝ์ ๋๋ฌ์ค๋๋ค.
์ด๋ ์ฌ๋ฆฌ๋๋ฒ๊ฑฐ์ All intermodular calls์ ๊ฐ์ ์ญํ ์ ํฉ๋๋ค.
์ ๋ง์ ํจ์ ํธ์ถ ์ค์์ IsDebuggerPresent๋ฅผ ์์ ์ฐพ๊ธฐ๋ ์ด๋ ค์ธ ๋ฏํฉ๋๋ค.
ํ๋จ์ Search ์ฐฝ์์ ์ฐพ๋ ํจ์ ์ด๋ฆ์ ๊ฒ์ํด์ค๋๋ค.
๊ฝค๋ ๊ฐํธํ๊ฒ ์ฐพ์ ์ ์์ต๋๋ค.
๋์ค์ด์ ๋ธ๋ฆฌ ๋ถ๋ถ์ ์ฐํด๋ฆญํ ํ, Set breakpoint on all calls to IsDebuggerPresent ์ ๋๋ฌ ๋ชจ๋ IsDebuggerPresent ํจ์ ํธ์ถ ๋ถ๋ถ์ BP๋ฅผ ๊ฑธ์ด์ค๋๋ค.
๋ค์ ํจ์ ๋ชฉ๋ก์ผ๋ก ๋์๊ฐ ๋ด ์๋ค.
์ฐ๋ฆฌ๋ ์ข
๋ฃ ์ ๊น์ง ํ๋ก๊ทธ๋จ์ด ์ ์ง๋๋ ์๊ฐ์ ๊ตฌํด์ผ ํ๋, ์๊ฐ ๊ด๋ จ ํจ์๋ฅผ ์ฐพ์์ผ๊ฒ ์ต๋๋ค.
sleep ํจ์๋ ์์ง๋ง ์ ๋
timeGetTime ํจ์์ ๋์ด ๊ฐ๋๋ค.
์ฒ์ ๋ณด๊ฑฐ๋ ์ ๋ชจ๋ฅด๋ ํจ์๊ฐ ๋์์ ๋๋ MSDN์ ์ด์ฉํด ์ฐพ์๋ณด๋ ๊ฒ๋ ์ข์ต๋๋ค.
์๋๋ MSDN์์ ์ค๋ช ํ timeGetTime์ ๋๋ค.
timeGetTime ํจ์
์๋์ฐ๊ฐ ์์๋์ด์ ์ง๊ธ๊น์ง ํ๋ฅธ ์๊ฐ์ 1/1000 ์ด (milliseconds) ๋จ์๋ก ๋ฆฌํดํ๋ ํจ์.
์๋ง ์ด ์น๊ตฌ๊ฐ ๋งค์ฐ ์ค์ํ ๊ฒ ๊ฐ์์.
์ฐํด๋ฆญ -> Set breakpoint on all calls to timeGetTime์ผ๋ก ๋ชจ๋ timeGetTime์ BP๋ฅผ ๊ฑธ์ด์ค๋๋ค.
F9 ํค๋ก ์คํํด๋ณด๋ฉด IsDebuggerPresent ํจ์ ํธ์ถ ๋ถ๋ถ์์ ๋ฉ์ถฅ๋๋ค.
๊ฐ๋จํ jne ๋ช ๋ น์ je๋ก ๋ฐ๊ฟ ์ฐํํด์ค๊ฒ์.
์ ๋ ํ๋ํ๋ step-over, step-in ํ๋ฉฐ ์ฐพ์์ง๋ง, ๊ฐ๋จํ MessageBoxW ํจ์ ํธ์ถ์ ์ฌ๋ฟ ํ์ธํด๋ณด๋ฉด์ ๋นจ๋ฆฌ ํ์ดํ์ค ์ ์์ต๋๋ค.
40EA13 ํจ์๋ฅผ step-over ํ๋ฉด ๋ฉ์์ง ๋ฐ์ค๊ฐ ํธ์ถ๋ฉ๋๋ค.
์ด ํจ์ ๋ด๋ถ๋ก step-in ํด ๋ด ๋๋ค.
ํ๋์ฉ step-over ํด ๋ณด๋ฉด, ์ด๋ ์ง์ ์์ ๋ค์ ๋ฉ์ธ์ง๋ฐ์ค๊ฐ ํธ์ถ๋ฉ๋๋ค.
40B21A ์ฃผ์์์ ํธ์ถ๋๋ ํจ์ ๋ด๋ถ๋ก ์ง์ ํด๋ด ์๋ค.
40BCC0 ์ฃผ์ ๋ช ๋ น์ ๋ค์ step-in ํด ์ค๋๋ค.
45E05F ์ฃผ์ ๋ช ๋ น ๋ด๋ถ๋ก ๋ค์ด๊ฐ ์ค๋๋ค.
๋ฉ์์ง ๋ฐ์ค๊ฐ ํธ์ถ๋๋ ๋ถ๋ถ๋ ๋ณผ ์ ์์ต๋๋ค.
์๋ง MessageBoxW ํจ์ ์๋ถ๋ถ์์ ํธ์ถ๋๋ ํจ์ ๋ด๋ถ ์ด๋๊ฐ์ timeGetTime ํจ์๊ฐ ์์ ๋ฏํฉ๋๋ค.
444D8F ์ฃผ์์์ ํจ์๊ฐ ์คํ์ push ๋ฉ๋๋ค.
์ด๋ฅผ ๋จผ์ ํ์ธํด๋ณผ๊น์?
19.sub_444C3A ํจ์ ๋ด๋ถ๋ก ์ด๋ํด์ค๋๋ค.
timeGetTime ํจ์๋ฅผ ํธ์ถํฉ๋๋ค.
์๋์ฐ๊ฐ ์์๋ ์๊ฐ์ ๋ฐ์์จ ํ, ์ด๋ฅผ esi์ ์ฎ๊ฒจ์ค๋๋ค.
๋ค์ timeGetTime ํจ์๋ฅผ ํธ์ถํ ๋ค, esi์ ํ์ฌ timeGetTime์ ๋ฐํ ๊ฐ์ธ eax๋ฅผ ๋น๊ตํฉ๋๋ค.
eax ๊ฐ์ด esi ๊ฐ๋ณด๋ค ํฌ๊ฑฐ๋ ๊ฐ์ผ๋ฉด 444D38 ์ฃผ์๋ก ์ ํํฉ๋๋ค.
๋ฐ๋ผ๊ฐ ๋ณผ๊น์?
eax-esi = ์ฒซ timeGetTime ํจ์ ํธ์ถ๋ก๋ถํฐ ๋ ๋ฒ์งธ timeGetTime ํจ์ ํธ์ถ๊น์ง ๊ฒฝ๊ณผ๋ ์๊ฐ์ด๋ฉฐ, ์ด๋ฅผ ebp+4 ์ฃผ์์ ์ ์ฅ๋์ด์๋ ๊ฐ๊ณผ ๋น๊ตํ๊ณ , eax ๊ฐ์ด ํฌ๊ฑฐ๋ ๊ฐ์ผ๋ฉด ์ ํํฉ๋๋ค.
๊ฒฝ๊ณผ ์๊ฐ์ ebp+4 ์ฃผ์์ ์ ์ฅ๋ ๊ฐ๊ณผ ๋น๊ตํ๋, ebp+4 ์ฃผ์์ ๋ค์ด์๋ ๊ฐ์ด ํ๋ก๊ทธ๋จ์ด ๋ช ๋ฐ๋ฆฌ์ธ์ปจ๋ ํ ์ข
๋ฃ๋ ์ง๋ฅผ ๊ฒฐ์ ํ ๊ฒ์
๋๋ค.
follow in dump ๊ธฐ๋ฅ์ผ๋ก ๊ฐ์ ํ์ธํด์ค๋๋ค.
70 2B ๋ผ๋ ๊ฐ์ด ์ ์ฅ๋์ด์๋๋ฐ, ์ด๋ ๋ฆฌํ ์๋์ธ์ด๊ธฐ ๋๋ฌธ์ 2B 70 ์ผ๋ก ๋ฐ๊ฟ ๊ณ์ฐํด์ผ ํฉ๋๋ค.
2B70์ 10์ง์๋ก 11120์ด๋, ์ด ํ๋ก๊ทธ๋จ์ 11120 ๋ฐ๋ฆฌ์ธ์ปจ๋ ํ ์ข ๋ฃ๋ ๊ฒ์ ๋๋ค.
์ด ๊ฐ์ CodeEngn Auth๋ก ์ธ์ฆํด๋ด ์๋ค.
ํ๋ก๊ทธ๋จ์ด ์ข ๋ฃ๋๊ธฐ๊น์ง ๊ฑธ๋ฆฌ๋ ์๊ฐ : 11120
'reverse engineering > CodeEngn' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
[CodeEngn] Basic RCE L20 ๋ฌธ์ ํ์ด (0) | 2021.03.27 |
---|---|
[CodeEngn] Basic RCE L18 ๋ฌธ์ ํ์ด (0) | 2020.12.26 |
[CodeEngn] Basic RCE L17 ๋ฌธ์ ํ์ด (0) | 2020.12.18 |
[CodeEngn] Basic RCE L16 ๋ฌธ์ ํ์ด (0) | 2020.12.17 |
[CodeEngn] Basic RCE L15 ๋ฌธ์ ํ์ด (2) | 2020.12.15 |