์นดํ…Œ๊ณ ๋ฆฌ ์—†์Œ

[๋ฆฌ๋ฒ„์‹ฑ ์ด ์ •๋„๋Š” ์•Œ์•„์•ผ์ง€] #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 ์ƒ์„ฑ ์ฝ”๋“œ

  • 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 ๋ฌด๋ ฅํ™” ๋ฐ ์‹œ์Šคํ…œ ์„ค์ • ๋ณ€๊ฒฝ ๋“ฑ์˜ ๋™์ž‘์ด ์‹ค์‹œ๊ฐ„์œผ๋กœ ์ด๋ฃจ์–ด์ง„๋‹ค.