์นดํ
๊ณ ๋ฆฌ ์์
[๋ฆฌ๋ฒ์ฑ ์ด ์ ๋๋ ์์์ผ์ง] #4. ์์คํ ์ค์ ๋ณ๊ฒฝ ์ ์ฑํ์ผ ๋ถ์
vinn๐ฉ๐ป
2024. 11. 21. 16:12
728x90
1. ์์คํ ์ค์ ๋ณ๊ฒฝ ์ ์ฑํ์ผ ๋ถ์
1.1 ์๊ฐ
- challenge 02.exe๋ ๊ฐ์ผ PC์ ์์คํ ์ค์ ์ ๋ณ๊ฒฝํ๊ณ ํค ์ค์ ์ ์กฐ์ํ๋ ๋ฑ์ ์ ์ฑํ์๋ฅผ ํ๋ค.
- ๊ทธ ๊ณผ์ ์์ ํ์ผ ๋ฐ ๋ ์ง์คํธ๋ฆฌ ๊ด๋ จ ์ฝ๋๋ฅผ ๋ง์ด ์ฌ์ฉํ๋ค.
1.2 Challenge 02.exe ๋ถ์
1.2.1 ๊ธฐ๋ณธ ๋์
- Stub ์ฝ๋๊ฐ ๊ธฐ๋ณธ์ ์ผ๋ก ๊ฐ์ง๋ GetStartupInfo(), GetCommandLine() ๋ฑ์ ์ฝ๋๋ 0x0041D313 ์ง์ ์ ํธ์ถ ์ฃผ์ ๋ด๋ถ์ ์๋ค.
- ํ์ผ์ด ์
์ฑ ํ์๋ฅผ ํ๊ธฐ ์ํด์๋ "%WINDIR%\drivers" ๊ฒฝ๋ก์ ์์นํด ์์ด์ผ ํ๋๋ฐ ์ค๋ฅธ์ชฝ ์ฝ๋๋ ์คํ ๊ฒฝ๋ก๊ฐ "%WINDIR%\drivers" ์ธ์ง ํ์ธํ๋ ์ฝ๋์ด๋ค.
- ์คํ ๊ฒฝ๋ก๊ฐ ์ผ์นํ๋ฉด ์กฐ๊ฑด ์ ํ ์ฝ๋๋ก ์ธํด 0x0041D75C ์ง์ ์ผ๋ก ์ด๋ํด์ ์ ์ฑ ๋์์ ํ๋ค.
- ์คํ ๊ฒฝ๋ก๊ฐ ์ผ์นํ์ง ์์ผ๋ฉด "%WINDIR%\drivers" ๊ฒฝ๋ก์ servise.exe๋ผ๋ ์ด๋ฆ์ผ๋ก ๋ณต์ ํ์ผ์ ์์ฑ ๋ฐ ์คํํ๊ณ ์ ์ฑํ์๊ฐ ๋ฐ์ํ๋ค.
1.2.2 ๋์ ์ค์ธ ํ๋ก์ธ์ค ํ์ธ
- servise.exe ํ๋ก์ธ์ค ๋์์ด ํ์ธ๋๋ฉด ์ด๋ฏธ ์ ์ฑํ์ผ์ด ๋์ํ๊ณ ์๋ค๊ณ ํ๋จ.
- ์ผ๋ฐ์ ์ผ๋ก ์คํ ์ค์ธ ํ๋ก์ธ์ค์ ์ ๋ณด๋ฅผ ์ป์ ๋, CreateToolhelp32Snapshot(), Process32First(), Process32Next() API๋ฅผ ์ฌ์ฉํ๊ณ CreateToohelp32Snapshot() API๋ฅผ ์ฌ์ฉํ๋ฉด ๋์ ์ค์ธ ํ๋ก์ธ์ค๋ค์ ์ค๋ ์ท์ ์ฐ์ ์ ์๋ค.
- ๊ทธ๋ฆฌ๊ณ ์ค๋
์ท์ผ๋ก ํ๋ก์ธ์ค๋ฅผ ํ๋์ฉ ๊ฒ์ํ๋ฉด์ servise.exe๋ฅผ ์ฐพ์ผ๋ฉด ๋๋ค.
- ์ด๋ Process32First(), Process32Next() API๋ฅผ ์ฌ์ฉํ๋๋ฐ ๊ฐ API์ ์ฒซ ๋ฒ์งธ ์ธ์๋ CreateToolhelp32Snapshot() API ํธ์ถ๋ก ์ป์ ํธ๋ค, ๋ ๋ฒ์งธ ์ธ์๋ PROCESSENTRY32 ๊ตฌ์กฐ์ฒด ๋ณ์์ด๋ค.
- ์ด ๊ฐ์ ํ์ฉํด์ servise.exe๊ฐ ๋์ํ๊ณ ์๋์ง ํ์ธํ๋ค.
- szExeFile[MAX_PATH] ๋ฉค๋ฒ๋ ๊ฒ์๋ ํ๋ก์ธ์ค์ ์ด๋ฆ์ ์ง์นญํ๋ฉฐ Process32First()๋ Process32Next() API๋ฅผ ํธ์ถํ๋ฉด PROCESSENTRY32 ๊ตฌ์กฐ์ฒด ๋ณ์์ szExeFile[MAX_PATH] ๋ฉค๋ฒ์ ๊ฒ์๋ ํ๋ก์ธ์ค์ ์ด๋ฆ ๋ฌธ์์ด์ด ์ ๋ ฅ๋๋ค.
- siExeFile[MAX_PATH]์ ์ ๋ ฅ ๋๋ ํ๋ก์ธ์ค ์ด๋ฆ๊ณผ "servise.exe" ๋ฌธ์์ด๊ณผ ๋น๊ตํด์ servise.exe๊ฐ ๋์ํ๊ณ ์๋์ง ํ์ธํ๊ณ ๋์์ด ํ์ธ๋๋ฉด BL ๋ ์ง์คํฐ์ 1์ ๊ฐ์ ์ ๋ ฅํ๋ค.
- ๋ชจ๋ ํ๋ก์ธ์ค ๊ฒ์์ด ๋๋๋ฉด BL ๊ฐ์ ํ์ธํด์ servise.exe์ ์์ฑ ๋ฐ ์คํ์ ๊ฒฐ์ ํ๋ค.
1.2.3 servise.exe ์์ฑ ๋ฐ ์คํ
- servise.exe๋ Challenge 02.exe์ ๋ณต์ ๋ณธ
- ์ฝ๋๊ฐ ๋์ํ๋ฉด "%WINDIR%\drivers" ๊ฒฝ๋ก์ service.exe๊ฐ ๋ง๋ค์ด์ง๋ค.
- Challenge 02.exe๋ SetFileAttributesA() API๋ฅผ ์ฌ์ฉํด์ servise.exe๋ฅผ ์จ๊น ํ์ผ๋ก ๋ณ๊ฒฝํ๋ค.
- ์๋ ์คํ ๋ ์ง์คํธ๋ฆฌ ๋ฑ๋ก ์ฝ๋๋ก ์ธํด servise.exe๊ฐ ์๋ ์คํ ๋ฑ๋ก๋๊ณ ๊ฐ์ผ PC๊ฐ ๋ถํ ๋ ๋๋ง๋ค servise.exe๊ฐ ๋์ํ๋ค.
- ์ด ๋ชจ๋ ๊ณผ์ ์ด ์๋ฃ๋๋ฉด Challenge 02.exe๋ ShellExecuteA() API๋ฅผ ์ฌ์ฉํด์ servise.exe๋ฅผ ์คํํ๋ค.
1.3 servise.exe ๋ถ์
1.3.1 Thread Code ์คํ
- servise.exe๋ CreateThread() API๋ฅผ ์ฌ์ฉํด์ 0x00404A88 ์ง์ ์ ์ค๋ ๋ ์ฝ๋๋ฅผ ํธ์ถํ๋ค.
- ํ๋๊ทธ ๊ฐ์ธ CREATE_SUSPENDED๋ก ์ธํด ์ค์ ํธ์ถ์ ResumeThread()์์ ์ด๋ฃจ์ด์ง๋ค.
- ์ฃผ์ ์ ์ฑํ์๋ ๋ชจ๋ ์ค๋ ๋ ์์์ ์ด๋ฃจ์ด์ง๊ธฐ ๋๋ฌธ์ ์ค๋ ๋ ์ฝ๋๊ฐ ์ด๋ป๊ฒ ๋์ํ๋์ง ํ์ ํ๋ ๊ฒ์ด ์ค์.
1.3.2 Virtual Key ์ค์ ๋ณ๊ฒฝ
- ์ค๋ ๋๋ฅผ ํธ์ถํ๊ณ ๋๋ฉด ํน์ ํค์ ์ค์ ์ ๋ณ๊ฒฝํด์ ๋๋ ์ ๋ ์๋ฆฌ๊ฐ ๋๊ฒ ํ๋ค.
- GetAsyncKeyState()๋ฅผ ์ฌ์ฉํ๋ฉด ํค์ ์ํ๋ฅผ ํ์ธํ ์ ์๋ค.
- ์ฌ์ฉ์๊ฐ ํน์ ํค๋ฅผ ๋๋ฅด๋ฉด PlaySoundA()๊ฐ ํธ์ถ๋๊ณ ์ฌ์ด๋๊ฐ ๋ฐ์ํ๋ค. ๋ค์์ VK_RETURN ํค์ ์๋ฆฌ ์ค์ ์ ๋ณด์ฌ์ค๋ค.
- JUMP ์ฝ๋๋ก ์ธํด ์ค์๊ฐ์ผ๋ก ์คํ๋๋ค.
1.3.3. Thread Code
1. logo.scr ํ์ผ ์์ฑ ๋ฐ ํ๋ฉด ๋ณดํธ ์ค์ ๋ณ๊ฒฝ
- servise.exe๋ ํ๋ฉด ๋ณดํธ ๋ชจ๋์์๋ ์ ์ํ์๋ฅผ ๋ฐ์์ํค๊ธฐ ์ํด, 'ํ๋ฉด ๋ณดํธ ๋ชจ๋์ฉ'์ผ๋ก logo.scr์ ๋ง๋ ๋ค.
- logo.scr ํ์ผ์ servise.exe์ ๋ณต์ ํ์ผ๋ก "%WINDIR%"์ ์์ฑ๋๋ค.
- logo.scr ํ์ผ์ด ๋์ํ๊ธฐ ์ํด์๋ ํ๋ฉด ๋ณดํธ ๋ชจ๋๊ฐ ํ์ฑํ๋์ด์ผ ํ๊ณ SystemParametersInfoA() API๋ฅผ ์ฌ์ฉํ๋ฉด ๋ณดํธ ๋ชจ๋ ๋ฐ ํ์ฑ ์๊ฐ ์ค์ ์ ํ ์ ์๋ค.
- ๋ง์ง๋ง์ผ๋ก ํ๋ฉด ๋ณดํธ ๋ชจ๋์์ ์คํ๋๋ ํ์ผ์ logo.scr๋ก ์ง์ ํ๋ฉด ์ค์ ๋ณ๊ฒฝ์ด ์๋ฃ๋๋๋ฐ ์ด๋ "HKEY_CURRENT_USER\Control Panel\Desktop" ํค์ SCANSAVE.EXE ๊ฐ์ ์์ ํ๋ฉด ๋๋ค.
2. XXX.scr ํ์ผ ์์ฑ
- logo.scr ํ์ผ์ ๋ง๋ค๊ณ ๋๋ฉด "C:\WINDOWS\system32\drivers\Cache" ๊ฒฝ๋ก์ XXX.scr ํ์ผ์ ๋ง๋ ๋ค.
- ์ด ํ์ผ๋ servise.exe์ ๋ณต์ ๋ณธ์ด๋ค.
3. servise.exe ํ์ผ ์ธ๋ถ ์นจ์ ๋ณดํธ
- servise.exe๋ LockFileEx() API๋ฅผ ์ฌ์ฉํด์ ๋ค๋ฅธ ์ค๋ ๋๋ ํ๋ก์ธ์ค๊ฐ ์์ ์๊ฒ ์ ๊ทผํ๋ ๊ฒ์ ๋ง๋๋ค.
4. ๋ถ์ Tool ๊ฐ์ ์ข ๋ฃ
- ์ ์ฑํ์ผ์ ๋ถ์ํ ๋ ์ฌ์ฉํ๋ Tool์ ๋ํ ๋ฌด๋ ฅํ ๊ธฐ๋ฅ๋ ์๋ค.
- procexp.exe๋ฅผ ์ฐพ์์ ๊ฐ์ ์ข ๋ฃ์ํค๋ ์ฝ๋๋ก ๋ฌธ์์ด์ ๋น๊ตํด์ ํ๊น ํ๋ก์ธ์ค๋ฅผ ์ฐพ๊ณ , TerminateProcess() API๋ฅผ ์ฌ์ฉํด์ ๊ฐ์ ์ข ๋ฃ์ํจ๋ค.
- TerminateProcess() API์ ์ธ์๋ก ๋ค์ด๊ฐ๋ ํธ๋ค ๊ฐ์ OpenProcess() API๋ฅผ ํธ์ถํด์ ์ป์ ์ ์๋ค.
- OpenProcess()๋ฅผ ํธ์ถํ ๋ ํ์ํ PID ๊ฐ์ PROCESSENTRY32 ๊ตฌ์กฐ์ฒด์ th32ProcessID ๋ฉค๋ฒ๋ฅผ ํ์ฉํ๋ค.
5. ํน์ ์๋์ฐ ๊ฐ์ ์ข ๋ฃ
- FindWindow() API๋ก ํ๊น ํ๋ก์ธ์ค์ ๋์์ ํ์ธํ๊ณ ํธ๋ค ๊ฐ๊ณผ PID๋ฅผ ์์๋ธ ๋ค์ TerminateProcess()๋ฅผ ํธ์ถํ๋ค.
6. ์์คํ ์ค์ ๋ณ๊ฒฝ
- ๋ ์ง์คํธ๋ฆฌ์ ํน์ ๊ฐ์ ์์ ํด์ ์์คํ ์ค์ ์ ๋ฐ๊พผ๋ค.
- ์๊ธฐ ๋ณดํธ ๋ฐ ๋ถ์์ ์ด๋ ต๊ฒ ํ๊ธฐ ์ํ ๋์์ด๋ค.
- ๋ค์์ "HKCU\Software\Microsoft\Windows\CurrentVersion\Explorer\Advanced" ํค์ Hidden ๊ฐ์ ์์ ํ๋ ๊ณผ์ ์ด๋ค.
- ์ด ์ธ์๋ ๋ค์ํ ๊ฐ๋ค์ด ๋ณ๊ฒฝ๋๋ค.
- ๋ค์์ ๋ณดํธ๋ ์ด์์ฒด์ ํ์ผ ์จ๊ธฐ๊ธฐ ์ค์ ์ ํด์ ํ๋ ๊ณผ์ ์ด๋ค.
- ๋ค์์ ํ์ผ ํ์ฅ์ ๋ณด์ด๊ธฐ์ ๋ํ ์ค์ ์ ํด์ ํ๋ ๊ณผ์ ์ด๋ค.
- ๋ค์์ ์๋์ฐ ํ์๊ธฐ์ ๋๊ตฌ์์ ํด๋ ์ต์ ํญ๋ชฉ์ ๋นํ์ฑํํ๋ ๊ณผ์ ์ด๋ค.
- '1.3.3 Thread Code' ๋์์ JUMP ์ฝ๋๋ก ์ธํด ๊ณ์ ๋ฐ๋ณต๋๋ค.
- ๊ทธ ๊ฒฐ๊ณผ ๋ถ์ Tool ๋ฌด๋ ฅํ ๋ฐ ์์คํ ์ค์ ๋ณ๊ฒฝ ๋ฑ์ ๋์์ด ์ค์๊ฐ์ผ๋ก ์ด๋ฃจ์ด์ง๋ค.