ํด๋น ๊ธ์ ์กฐ์ํธ๋์ ๊ฐ์ฒด์งํฅ์ ์ฌ์ค๊ณผ ์คํด ์ญํ , ์ฑ ์, ํ๋ ฅ, ๊ด์ ์์ ๋ณธ ๊ฐ์ฒด์งํฅ ๋ผ๋ ์ฑ ์ ์ฝ๊ณ ํ์ตํ ๋ด์ฉ์ ์ ๋ฆฌ ๋ฐ ํ๊ณ ํ๋ ๊ธ ์ ๋๋ค. ์์ธํ ์ฌํญ์ YES 24 ๊ฐ์ฒด์งํฅ์ ์ฌ์ค๊ณผ ์คํด ์์ ํ์ธํด์ฃผ์ธ์.
๊ฐ์ฒด์งํฅ์ ์ฌ์ค๊ณผ ์คํด - ์ญํ , ์ฑ ์, ํ๋ ฅ ๊ด์ ์์ ๋ณธ ๊ฐ์ฒด์งํฅ (์กฐ์ํธ)
- ์ํค๋ถ์ค
- ์ง์์ด: ์กฐ์ํธ
- ํด๋ธ์ด: ๋ฐ์ฐฌ๊ท, ์ฎ์์ด: ์ด๋์ฝ, ๋์์ธ: ๋ถ๋๋ฆฌ
- 1์ ๋ฐํ: 2015.06.17
์ด๋ฒ ์ฅ์์ ์ด์ผ๊ธฐํ๊ณ ์ ํ๋ ๊ฒ
์ด๋ฒ ์ฅ์ ์ง๊ธ๊น์ง ๋ฐฐ์ด ๋ด์ฉ์ ์ด๋ก ๋ค์ ์ค์ ๋ก ๊ฐ์ฒด์งํฅ ์ค๊ณ์ ์ ์ฉํ๋ ๊ฒ์ด ๋ชฉ์ ์ด๋ค. ์์ฝ๋ณด๋ค๋ ์๋์ ์ค์ต ์ฝ๋๋ฅผ ํตํด์ ์ ๋ฆฌ๋ฅผ ๋์ฒดํ๊ฒ ๋ค.
- ํจ๊ป ๋ชจ์ผ๊ธฐ
- ๋งํด ํ์ธ๋ฌ๋ ๊ฐ์ฒด์งํฅ ์ค๊ณ ์์ ์กด์ฌํ๋ 3๊ฐ์ง ๊ด์ ์ ๋ํด์ ์ค๋ช
- ๊ฐ๋ ๊ด์
- ๋ช ์ธ ๊ด์ฌ
- ๊ตฌํ ๊ด์
- ๋งํด ํ์ธ๋ฌ๋ ๊ฐ์ฒด์งํฅ ์ค๊ณ ์์ ์กด์ฌํ๋ 3๊ฐ์ง ๊ด์ ์ ๋ํด์ ์ค๋ช
- ์ปค๋ฎค๋์ผ์ด์
๋ค์ด์ด๊ทธ๋จ
- UML ์ ๊ฐ์ฒด์งํฅ ์ค๊ณ์ ๋๊ตฌ๊ฐ ์๋๋ค.
- ๋๋ฉ์ธ ๋ชจ๋ธ๋ง๊ณผ ์ปค๋ฎค๋์ผ์ด์
๋ค์ด์ด๊ทธ๋จ์ ํ์ฉํ๋ผ
- ๋๋ฉ์ธ ๋ชจ๋ธ๋ง์์ ํฌํจ๊ด๊ณ์ ์ฐ๊ด๊ด๊ณ๋ ์ค์ํ์ง ์๋ค
- ์ด์ ์ ์ด๋ค ํ์ ์ด ์ด๋ค ๋๋ฉ์ธ์ ๊ตฌ์ฑํ๋๋์ ํ์ ๋ค ์ฌ์ด์ ๊ด๊ณ๊ฐ ์ด๋ค ๊ด๊ณ์ธ์ง ๊ท๋ช ํ๋ ๊ฒ์ด๋ค.
- ๋๋ฉ์ผ ๋ชจ๋ธ๋ง์์๋ ๋จ์ง ๊ด๊ณ๊ฐ ์กด์ฌํ๋์ง๋ง ํ์ ํ๋ ๊ฒ์ผ๋ก ์ถฉ๋ถํ๋ค.
- ๋ํ ํ์ค ์ธ๊ณ์ ๋ฅ๋์ฑ๊ณผ ์๋์ฑ์ ์ค์ํ์ง ์๋ค.
- ๊ฐ์ฒด์งํฅ์์๋ ๋ชจ๋ ๊ฐ์ฒด๊ฐ ์ค์ค๋ก ์ฌ๊ณ ํ๊ณ ์ ํํ๋ ์์จ์ ์ธ ์กด์ฌ์ด๋ค.
- ์ด๊ฒ ํ๋ค๋ฉด ์์ธํ๋ฅผ ํด๋ผ
- ๋๋ฉ์ธ ๋ชจ๋ธ๋ง์์ ํฌํจ๊ด๊ณ์ ์ฐ๊ด๊ด๊ณ๋ ์ค์ํ์ง ์๋ค
- ์ปค๋ฎค๋์ผ์ด์
๋ค์ด์ด๊ทธ๋จ
- ์ปค๋ฎค๋์ผ์ด์ ๋ค์ด์ด๊ทธ๋จ์ ๋ฉ์์ง์ ๋ฐฉํฅ๊ณผ ์ฃผ๊ณ ๋ฐ๋ ๋ฐ์ดํฐ๋ฅผ ๋ ์ฝ๊ฒ ํํํ๋ ๊ฒ์ด๋ค.
- ์ปค๋ฎค๋์ผ์ด์ ๋ค์ด์ด๊ทธ๋จ์์ ๋์จ ๋ฉ์์ง๋ฅผ ํ ๋๋ก ์ธํฐํ์ด์ค๋ฅผ ์์ฑํ๋ค.
- ๋๋ฉ์ธ ๊ฐ๋
์ ์ฐธ์กฐํ๋ผ
- ํ์ค ์ธ๊ณ์ ์ํํธ์จ์ด๋ ํญ์ ๋ณํ๋ค.
- ๋๋ฉ์ธ ๋ชจ๋ธ์, ์ฆ ํ ์ด๋ธ ๋ชจ๋ธ์ ๋ณํ์ ์์ฃผ ๋ฏผ์ฒฉํ๋ค.
- ๊ฒฐ๊ตญ ์ฐ๋ฆฌ๋ ๋๋ฉ์ธ ๋ชจ๋ธ์ ๋ฐ๋ผ์ ๊ฐ์ฒด๋ฅผ ์ค๊ณํด์ผ ๋ณํ์ ๋ฏผ์ฒฉํ๊ฒ ๋์ฒํ ์ ์๊ฒ ๋๋ค.
- ์ด๋ฒ ์ฅ์ ์ค์ต์ด ๋๋ถ๋ถ์ด๋ฏ๋ก ์๋์ ์ค์ต์ผ๋ก ์์ฝ์ ๋์ฒด
- ๋๋ฉ์ธ ๋ชจ๋ธ๋ง
๋์ ํด์๊ณผ ํ๊ณ
์ด๋ฒ ์ฅ์ ์๋ง ๊ฐ์ฅ ์ค์ํ ์ฅ์ด ๋์ง ์์๊น ์๊ฐํ๋ค.
์ง๊ธ๊น์ง ๋ฐฐ์ด ๋ชจ๋ ๊ฐ๋ ์ ์ด์ฉํด์ ์ค์ ๋ก ๊ฐ์ฒด์งํฅ์ ์ธ ์ค๊ณ๋ฅผ ํ๋ ๋ถ๋ถ์ด๊ธฐ ๋๋ฌธ์ด๋ค.
์ฑ ์์๋ 1์ฅ์์ ๋ณด์๋ ์ปคํผ๊ฐ๊ฒ๋ฅผ ๋ชจ๋ธ๋งํ์ง๋ง ๋๋ ์กฐ๊ธ ๋ฐ๊ฟ์ Wargame ์ฌ์ดํธ๋ฅผ ์ค๊ณํ๋ ค ํ๋ค.
wargame ์ด๋? ๋ชจ์ ํดํน์ ํด๋ณผ ์ ์๋ ์ฒดํํ ํดํน ๊ฒ์์ผ๋ก ์ฌ๋ฌ ๋ถ์ผ(์น ํดํน, ๋ชจ๋ฐ์ผ ํดํน, ์์คํ ํดํน, ๋ฆฌ๋ฒ์ฑ, ํฌ๋ ์) ๋ฑ์ด ์๋ค.
๋ฌธ์ ๋ฅผ ํธ๋ ์ฌ์ฉ์๋ ํด๋น ๋ฌธ์ ๋ฅผ ๋ค์ด๋ก๋ (์น์ด๋ผ๋ฉด url ์ ์)ํ ๋ค ๋ฌธ์ ์์ ์๋ flag ๊ฐ์ ์ฐพ๊ณ ์ ์๋ฅผ ์ป๋ ๋ฐฉ์์ด๋ค.
CTF ๋ํ์ ๊ธฐ๋ณธ ๋ฌธ์ ํ์ด ๊ฐ๋ ์ผ๋ก ์ ๋ช ํ ์ฌ์ดํธ๋ก๋ dreamhack.io, webhacking.kr ๋ฑ์ด ์๊ณ ์ ๋ช ํ ๋ํ๋ก๋ Defcon, Codegate, LineCTF ๋ฑ์ด ์๋ค.
๋๋ฉ์ธ
๋ฐฑ์ค์ ๋ชจ๋ธ๋งํ ๋๋ฉ์ธ ๋ชจ๋ธ์ ์ฐธ์ฌ ๋๋ฉ์ธ์ ๋ค์๊ณผ ๊ฐ๋ค.
User
.class- ๋ฌธ์ ๋ฅผ ํด๊ฒฐํ ์ฌ์ฉ์
Problem
.class- ์ฌ์ฉ์๊ฐ ํ์ด์ผํ ๋ฌธ์
ProblemList
.class- ์ฌ์ฉ์๊ฐ ํ์ด์ผํ ๋ฌธ์ ๋ค
Scoring
.class- ์ ๋ต์ ์ฑ์ ํ ์ฑ์ ์
์ด๋ฅผ ๋๋ฉ์ธ์ผ๋ก ํํํ๋ฉด ๋ค์๊ณผ ๊ฐ๋ค.
๋ง์ฝ ์ค์ ๋ก ๊ทธ๋ ค๋ณด๊ณ ์ถ์ ์ฌ๋๋ค์ draw.io ์์ ์ค์ ๋ก ๋๋ฉ์ธ ๋ชจ๋ธ์ ์น ๋ธ๋ผ์ฐ์ ์์ ๊ทธ๋ฆด์ ์๋ค.
์ฑ ์ ์ฐพ์๋ณด๊ธฐ
์ด์ ๋๋ฉ์ธ ์ฆ, ์ญํ ๊ณผ ์ฑ ์ ๊ทธ๋ฆฌ๊ณ ํ๋ ฅ์ ์ํํ ๋์๋ค์ด ์ ํด์ก์ผ๋ ์ง๊ธ๊น์ง ๊ณ์ ๋ฐฐ์ด ํ๋ ฅ์ ๊ด์ ์์ ๊ฐ๊ฐ์ ์ฑ ์์ ์ ์ํด๋ณด์.
User
.class- ๋ฌธ์ ๋ฅผ ํด๊ฒฐํ ์ฌ์ฉ์
- ๋ฌธ์ ๋ชฉ๋ก์์ ๋ฌธ์ ๋ฅผ ๋ฐ์ ๋ฌธ์ ๋ฅผ ํ์ดํ๋ค.
- ๋ฌธ์ ๋ฅผ ์์ฒญํ๋ ์ฑ ์
- ํ์ด๋ฅผ ์ ์ถํ๋ค.
- ๋ฌธ์ ํ์ด๋ฅผ ์์ฒญํ๋ ์ฑ ์
- ๋ฌธ์ ๋ชฉ๋ก์์ ๋ฌธ์ ๋ฅผ ๋ฐ์ ๋ฌธ์ ๋ฅผ ํ์ดํ๋ค.
- ๋ฌธ์ ๋ฅผ ํด๊ฒฐํ ์ฌ์ฉ์
ProblemList
.class- ์ฌ์ฉ์๊ฐ ํ์ด์ผํ ๋ฌธ์ ๋ค
- ์ฌ์ฉ์๊ฐ ๋ฌธ์ ํ์ด ์์ฒญ์ ํ๋ค๋ฉด ํ์ด๋ฅผ ์ํ๋ ๋ฌธ์ ๋ฅผ ๋ฐํํด์ผ ํ๋ค.
- ์ฌ์ฉ์๊ฐ ์์ฒญํ๋ ํน์ ๋ฌธ์ ๋ฅผ ๋ฐํํ๋ ์ฑ ์
- ์ฌ์ฉ์๊ฐ ๋ฌธ์ ํ์ด ์์ฒญ์ ํ๋ค๋ฉด ํ์ด๋ฅผ ์ํ๋ ๋ฌธ์ ๋ฅผ ๋ฐํํด์ผ ํ๋ค.
- ์ฌ์ฉ์๊ฐ ํ์ด์ผํ ๋ฌธ์ ๋ค
Problem
.class- ์ฌ์ฉ์๊ฐ ํ์ด์ผํ ๋ฌธ์
- ๋ฌธ์ ์ ์ ๋ต๊ณผ ์ ์๋ฅผ ์ฑ์ ์์๊ฒ ์ ๊ณตํ๋ค.
- ๋ฌธ์ ์ ๋ต๊ณผ ์ ์๋ฅผ ์ ๊ณตํ๋ ์ฑ ์
- ๋ฌธ์ ์ ์ ๋ต๊ณผ ์ ์๋ฅผ ์ฑ์ ์์๊ฒ ์ ๊ณตํ๋ค.
- ์ฌ์ฉ์๊ฐ ํ์ด์ผํ ๋ฌธ์
Scoring
.class- ์ ๋ต์ ์ฑ์ ํ ์ฑ์ ์
- ๋ฌธ์ ์๊ฒ ์ ๋ต์ ์์ฒญํ์ฌ ์ ๋ต ๊ฐ์ ๋น๊ตํ๊ณ ๊ฒฐ๊ณผ๋ฅผ ์ฌ์ฉ์์๊ฒ ๋ฐํํ๋ค.
- ์ฌ์ฉ์์๊ฒ ๋ฌธ์ ๋ฅผ ๋ฐ๊ณ flag ๊ฐ์ ๊ฒ์ฆํ๊ณ ์ ์๋ฅผ ๋ฐ์ดํฐ๋ฒ ์ด์ค์ ์ ์ฅํ๋ ์ฑ ์
- ๋ฌธ์ ์๊ฒ ์ ๋ต์ ์์ฒญํ์ฌ ์ ๋ต ๊ฐ์ ๋น๊ตํ๊ณ ๊ฒฐ๊ณผ๋ฅผ ์ฌ์ฉ์์๊ฒ ๋ฐํํ๋ค.
- ์ ๋ต์ ์ฑ์ ํ ์ฑ์ ์
๊ทธ๋ผ ์ฑ ์์ ๋ํ ๋ฉ์์ง์ ํ๋ฆ์ ๋ค์๊ณผ ๊ฐ์ ๊ฒ์ด๋ค.
์ ์๊ฐํด๋ณด์. ์ฐ๋ฆฌ๋ ์ง๊ธ ํ๋์ ๋จผ์ ์๊ฐํ๊ณ ์๋ค. ์ฌ์ฉ์์๊ฒ ๋ฌธ์ ๋ฅผ ํด๊ฒฐํ๊ธฐ ์ํด์ ์ด๋ค ์ํ๋ฅผ ๊ฐ์ ธ์ผ ํ๊ณ ์ด๋ค ๊ฐ๋ค์ด ํ์ํ์ง๋ ์์ง ์๊ฐํ์ง ์์๋ค. ์ด๋ ๊ฒ ํ๋์ ๋จผ์ ์๊ฐํ๋๊ฒ ๊ฐ์ฒด์งํฅ ์ค๊ณ์ ์์์ด๋ค.
ํ๋ ์ฐพ์๋ณด๊ธฐ
์ด์ ์ญํ ๊ณผ ์ฑ ์์ ๋ํด์ ์์๋ณด์์ผ๋ ์ฐ๋ฆฌ๊ฐ ์ํ๋ ๋ชฉ์ ์ ๋ฌ์ฑํ๊ธฐ ์ํ ํ๋์ ์ฐพ์์ ๊ทธ๋ ค๋ณด์.
์ด์ ๊ฐ์ด ๋ ๊ฒ์ด๋ค.
๋ค๋ฅธ ๊ฐ์ฒด์ ํ๋ ฅํ ์ธํฐํ์ด์ค ์ ์ํ๊ธฐ
ํ๋์ ์ ์ํ์ผ๋ ๋ฐ์์ ๋ณด์ฌ์ง ์ธํฐํ์ด์ค๋ฅผ ๊ตฌํํด๋ณด์.
User
.class- ๋ฌธ์ ๋ฅผ ํด๊ฒฐํ ์ฌ์ฉ์
- ๋ฌธ์ ๋ชฉ๋ก์์ ๋ฌธ์ ๋ฅผ ๋ฐ์ ๋ฌธ์ ๋ฅผ ํ์ดํ๋ค.
void solve(int problemId, ProblemList problemList)
.method
- ํ์ด๋ฅผ ์ ์ถํ๋ค.
void scoring(String flag)
.method
- ๋ฌธ์ ๋ชฉ๋ก์์ ๋ฌธ์ ๋ฅผ ๋ฐ์ ๋ฌธ์ ๋ฅผ ํ์ดํ๋ค.
- ๋ฌธ์ ๋ฅผ ํด๊ฒฐํ ์ฌ์ฉ์
ProblemList
.class- ์ฌ์ฉ์๊ฐ ํ์ด์ผํ ๋ฌธ์ ๋ค
- ์ฌ์ฉ์๊ฐ ๋ฌธ์ ํ์ด ์์ฒญ์ ํ๋ค๋ฉด ํ์ด๋ฅผ ์ํ๋ ๋ฌธ์ ๋ฅผ ๋ฐํํด์ผ ํ๋ค.
Problem choose(int problemId)
.method
- ์ฌ์ฉ์๊ฐ ๋ฌธ์ ํ์ด ์์ฒญ์ ํ๋ค๋ฉด ํ์ด๋ฅผ ์ํ๋ ๋ฌธ์ ๋ฅผ ๋ฐํํด์ผ ํ๋ค.
- ์ฌ์ฉ์๊ฐ ํ์ด์ผํ ๋ฌธ์ ๋ค
Problem
.class- ์ฌ์ฉ์๊ฐ ํ์ด์ผํ ๋ฌธ์
- ๋ฌธ์ ์ ์ ๋ต๊ณผ ์ ์๋ฅผ ์ฑ์ ์์๊ฒ ์ ๊ณตํ๋ค.
String getPoint()
.methodString getFlag()
.method
- ๋ฌธ์ ์ ์ ๋ต๊ณผ ์ ์๋ฅผ ์ฑ์ ์์๊ฒ ์ ๊ณตํ๋ค.
- ์ฌ์ฉ์๊ฐ ํ์ด์ผํ ๋ฌธ์
Scoring
.class- ์ ๋ต์ ์ฑ์ ํ ์ฑ์ ์
- ๋ฌธ์ ์๊ฒ ์ ๋ต์ ์์ฒญํ์ฌ ์ ๋ต ๊ฐ์ ๋น๊ตํ๊ณ ๊ฒฐ๊ณผ๋ฅผ ์ฌ์ฉ์์๊ฒ ๋ฐํํ๋ค.
void validateFlag(int userId, Problem problem, userFlag
.method
- ๋ฌธ์ ์๊ฒ ์ ๋ต์ ์์ฒญํ์ฌ ์ ๋ต ๊ฐ์ ๋น๊ตํ๊ณ ๊ฒฐ๊ณผ๋ฅผ ์ฌ์ฉ์์๊ฒ ๋ฐํํ๋ค.
- ์ ๋ต์ ์ฑ์ ํ ์ฑ์ ์
์ฌ๊ธฐ์ ๋ง ํ๋ ์ธํฐํ์ด์ค๋ java์ interface ๊ฐ ์๋ ์ ์ ์ ์ํ์.
์ฌ๊ธฐ์ ๋ง ํ๋ ์ธํฐํ์ด์ค๋ ๊ฐ์ฒด์งํฅ ์ค๊ณ์์ ์ธ๋ถ ๊ฐ์ฒด์๊ฒ ๋ณด์ฌ์ง๊ธฐ ์ํ ์ ์ , java ์์ public ์ ๊ทผ์๋ก ์ง์ ๋ ๋ฉ์๋๋ฅผ ๋ปํ๋ค.
public class User {
// ๋ฌธ์ ์ ๋ณด๋ฅผ ์์ฒญํ๋ผ
public void solve(){ }
// ์ ๋ต์ ์์ฒญํ๋ผ, ์ ๋ต์ flag ๋ผ๊ณ ํจ
public void scoring() { }
}
public class Scoring {
// ๋ฌธ์ ์๊ฒ ์ ๋ต ๊ฐ(ํ๋๊ทธ ๊ฐ)๋ฅผ ์์ฒญ ํ ๊ฒ์ฆ
public boolean validateFlag() { return false; }
}
public class ProblemList {
// ๋ฌธ์ ๋ฅผ ์ ํํ๊ณ ๋ฐํํ๋ผ
Problem choose(int problemId) {
return null;
}
}
public class Problem {}
์ฌ์ค ์ฐ๋ฆฌ๋ ๊ฐ์ฒด์งํฅ ์ค๊ณ์ ๊ถ๊ทน์ ๋ชฉํ๋ ์๋น์ค ์ ๊ณต์ด๋ค.
์๋น์ค๋ฅผ ์ ๊ณตํ๊ธฐ ์ํด์๋ ํ์ฐ์ ์ผ๋ก DB๊ฐ ํ์ํ๋ฐ, ์๋์ DBConnection
ํด๋์ค๊ฐ DB์ ๊ด๋ จ๋ ์์
๋ค์ ์ํํ๋ค๊ณ ๊ฐ์ ํ์.
public class DBConnection {
public void findUserById(int id) {
System.out.println("์ฑ๊ณต์ ์ผ๋ก DB ์์ ์ฌ์ฉ์๋ฅผ ๊ฒ์ํ์์ต๋๋ค.");
}
public void save(){
System.out.println("๋ฐ์ดํฐ๊ฐ DB์ ์ฑ๊ณต์ ์ผ๋ก ์ ์ฅ๋์์ต๋๋ค.");
}
}
์ด์ ๊ฐ์ฒด๊ฐ ์์จ์ฑ์ ๊ฐ๊ณ ์ญํ ์ ์ ๋๋ก ์์ํ๊ฒ ๋์์ค ๋ด๋ถ ํ๋ ฅ์๋ค์ ๊ตฌํํด๋ณด์!
๊ตฌํํ๊ธฐ
์ง๊ธ ๊น์ง ์ํ์ ํด๋นํ๋ field ๋ฅผ ํ๋๋ ๋ฃ์ง ์์๋ค.
์ด์ ์ด๋ค field๊ฐ ํ์ํ ์ง ํ๋์ ํ ๋๋ก ์ ์ ํ ๋ง๋ค์ด ๋ฃ์ด์ฃผ์.
User
public class User {
private int id;
private String name;
private Problem solvingProblem;
// ๋ฌธ์ ์ ๋ณด๋ฅผ ์์ฒญํ๋ผ
public void solve(int problemId, ProblemList problemList){
solvingProblem = problemList.choose(problemId);
}
// ์ ๋ต์ ์์ฒญํ๋ผ, ์ ๋ต์ flag ๋ผ๊ณ ํจ
public void scoring(String flag) {
DBConnection dbConnection = new DBConnection();
Scoring scoring = new Scoring();
scoring.validateFlag(this.id, solvingProblem, flag);
}
}
ํต์ฌ์ solve ๋ฉ์๋์ scoring ๋ฉ์๋์ด๋ค.
์ด ๋ ๋ฉ์๋์์ ๊ฐ๊ฐ Scoring ๊ฐ์ฒด์ ProblemList ๊ฐ์ฒด ์ฌ์ด์ ์ด๋ป๊ฒ ํ๋ ฅํ๋์ง ๊ตฌํํ์.
Problem
public class Problem {
private int id;
private String title;
private String content;
private String flag;
private int point;
public Problem(int id, String title, String content, String flag, int point) {
// ์์ฑ์ ์ธ๋ถ ๋ด์ฉ ์๋ต AllargConstructor
}
public int getId() {
return id;
}
public String getFlag() {
return flag;
}
public int getPoint() {
return point;
}
}
๋ฌธ์ ์ ํ๋ ฅํ ๊ฐ์ฒด์์๋ Flag ๊ฐ๊ณผ Point ๊ฐ๋ง ํ์๋ก ํ๋ getter ๋ฅผ ๋ง๋ค์ด์ฃผ์.
ProblemList
public class ProblemList {
private List<Problem> problemList;
public ProblemList(List<Problem> problemList) {
this.problemList = problemList;
}
// ๋ฌธ์ ๋ฅผ ์ ํํ๊ณ ๋ฐํํ๋ผ
Problem choose(int problemId) {
for(Problem each : problemList) {
if(each.getId() == problemId) {
return each;
}
}
return null;
}
}
Scoring
public class Scoring {
// ๋ฌธ์ ์๊ฒ ์ ๋ต ๊ฐ(ํ๋๊ทธ ๊ฐ)๋ฅผ ์์ฒญ ํ ๊ฒ์ฆ
public void validateFlag(int userId, Problem problem, String userFlag) {
DBConnection dbConnection = new DBConnection();
dbConnection.findUserById(userId);
if(problem.getFlag().equals(userFlag)){
dbConnection.save();
System.out.println("์ ๋ต์
๋๋ค! ์ฑ๊ณต์ ์ผ๋ก " + problem.getPoint() + " Point ๋งํผ์ ์ ์๊ฐ ์ ์ฅ๋์์ต๋๋ค.");
} else {
System.out.println("์ค๋ต์
๋๋ค. ๋ค์ ์๋ํด์ฃผ์ธ์");
}
}
}
์ฐ๋ฆฌ๊ฐ ์ค๊ณํ ๊ฐ์ฒด์งํฅ ์๋น์ค๋ฅผ ์ฌ์ฉํด๋ณด์.
์์์ ์ค๊ณํ ์ฐ๋ฆฌ์ ์๋น์ค๋ฅผ ์ด์ ์ด์ฉํด๋ณด์.
Main
public class Main {
public static void main(String[] args) {
List<Problem> problems = new ArrayList<>();
problems.add(new Problem(1,
"์ทจ์ฝํ ๊ฒ์ํ",
"ํด๋น ๊ฒ์ํ์ ์ด๋ ํ ๋ณด์ ์ทจ์ฝ์ ์ด ์กด์ฌํฉ๋๋ค. ํด๋น ๊ฒ์ํ์ ์ด์ฉํ์ฌ ๋ด๋ถ ์๋ฒ๋ก ๋ค์ด๊ฐ์ SSRF ๋ฅผ ์ํํ์ฌ ํ๋๊ทธ ๊ฐ์ ์ฐพ์ผ์ธ์.",
"CTF{142A-ECH}",
100));
problems.add(new Problem(2,
"์ด์ํ ์ฌ์ง",
"์ด์ ์์ต์ด๋ ๋ฌด๋ฃ ์ฌ์ง ์ฌ์ดํธ์์ ์ฌ์ง ํ๋๋ฅผ ๋ค์ด๋ฐ์์ต๋๋ค. ํ์ง๋ง ๋ค์๋ ์ผ์ด๋๋ณด๋ ์ปดํจํฐ์ ๋ชจ๋ ํ์ผ์ด ์ ๊ฒผ์ต๋๋ค. ํด๋น ํ์ผ์ ๋ถ์ํ๊ณ flag ๊ฐ์ ์ฐพ์ผ์ธ์",
"CTF{778Q-ADE}",
150));
problems.add(new Problem(3,
"๊ทผ๋ฌด ์๊ฐ ์ฐพ๊ธฐ",
"๋ฒ์ฃ์์ ํด๋ํฐ์ ์์ํ์ต๋๋ค. ๋ฒ์ฃ์๊ฐ ๊ทผ๋ฌดํ ์๊ฐ์ ๋ฒ์ฃ๊ฐ ์ผ์ด๋ฌ๋๋ฐ, ๋ฒ์ฃ์๋ ๋ฐ๋บํ๊ณ ์์ต๋๋ค. ๋ฒ์ฃ์์ ํด๋ํฐ์ ํฌ๋ ์ํ์ฌ Flag ๊ฐ์ ์ฐพ์ผ์ธ์",
"CTF{2341-BCD}",
50));
ProblemList problemList = new ProblemList(problems);
User user = new User();
// ์ ๋ต์ผ ๊ฒฝ์ฐ
System.out.println("-------------๊ตฌ๋ถ์ -------------");
user.solve(1, problemList);
user.scoring("CTF{1A-EH}"); // ์ค๋ต ํ๋๊ทธ ์
๋ ฅ
// ์ค๋ต์ผ ๊ฒฝ์ฐ
System.out.println("-------------๊ตฌ๋ถ์ -------------");
user.solve(3, problemList);
user.scoring("CTF{2341-BCD}"); // ์ ๋ต ํ๋๊ทธ ์
๋ ฅ
}
}
๋๊ธ