TigerDemon

8주차 keylogger 실습 본문

2025-SWLUG/악성코드 스터디

8주차 keylogger 실습

호랑2D 2025. 11. 18. 21:01

pe_parser_project로 들어가서 cmd 열고 아래 명령어를 입력해 가상환경을 활성화시켜준다. 

venv\Scripts\activate.bat

 

1. 흔적 생성기 만들기 - sim_keylogger_writer.py

pe_parser_project 폴더 내에 sim_keylogger_writer.py 파일을 생성하고 아래 코드를 적어준다.

# sim_keylogger_writer.py
# 안전 시뮬레이터: 키로깅 "흔적" 텍스트 파일 여러 개 생성 + 압축/인코딩 모사
import os, base64, zipfile
from datetime import datetime

outdir = os.path.join(os.getcwd(), "sim_logs")
os.makedirs(outdir, exist_ok=True)

# 1) 생성할 키로그 예시 (모의 데이터, 민감정보 금지)
samples = [
    "2025-11-05 10:01:12 | user:lee | input:loginid=student1",
    "2025-11-05 10:01:14 | user:lee | input:password=abcd1234",
    "2025-11-05 10:02:01 | user:lee | input:search=how to write report",
    "2025-11-05 10:05:23 | user:lee | input:note=final presentation slide"
]

# create multiple log files
for i, s in enumerate(samples, start=1):
    fname = os.path.join(outdir, f"kbd_{i}.log")
    with open(fname, "w", encoding="utf-8") as f:
        for j in range(20):  # 반복하여 길게 만듦
            f.write(f"{s} | entry#{j}\n")

# 2) create a zip (simulate exfil package)
zip_path = os.path.join(outdir, "collected_logs.zip")
with zipfile.ZipFile(zip_path, "w", compression=zipfile.ZIP_DEFLATED) as zf:
    for f in os.listdir(outdir):
        if f.endswith(".log"):
            zf.write(os.path.join(outdir, f), arcname=f)

# 3) create a base64-encoded blob (simulate embedding/obfuscation)
with open(zip_path, "rb") as z:
    b64 = base64.b64encode(z.read())

with open(os.path.join(outdir, "payload.b64"), "wb") as f:
    f.write(b64)

print("[*] 생성완료:", outdir)

 

그리고 아래 사진처럼 python sim_keylogger_writer.py로 실행해준다.

 

그러면 아래 파일들이 생성된 것을 볼 수 있다. 

sim_logs 폴더

2. "리소스에 임베드된 것 처럼" 모사 - payload_embedded.bin

아래 사진처럼 명령어를 입력하면 실제 exe의 리소스에 embed하는 대신 단순 복사로 모사한다. 정적분석 도구로 리소스 내부 문자열 추출을 연습할 수 있다. 

 

3. 정적 문자열 분석 - analyze_deep.py

두가지를 분석할 수 있다.

 

4. 간단한 인덱스 로그

아래 사진과 같이 입력하면 실제 이벤트 로그 대신 텍스트 인덱스를 만들어 '언제/ 무엇이 생성되었는지' 를 증거화한다. 

 

5. 키워드 기반 탐지 스크립트 - find_keylog_strings.py

pe_parser_project 폴더 안에 아래 코드를 넣은 find_keylog_strings.py 파일을 만들어준다.

# find_keylog_strings.py
import os
p = os.path.join(os.getcwd(), "sim_logs")
keywords = ["password=", "loginid=", "kbd_", "collected_logs", "payload"]
for root, dirs, files in os.walk(p):
    for fn in files:
        path = os.path.join(root, fn)
        try:
            with open(path, "r", encoding="utf-8", errors="ignore") as f:
                data = f.read()
                for kw in keywords:
                    if kw in data:
                        print(f"[FOUND] {kw} in {path}")
        except Exception as e:
            print(f"[ERR] {path} : {e}")

 

그리고 아래와 같이 명령어를 입력해준다.

 

6. 파일 해시(증거식별) - Windows 명령

아래와 같이 입력하면 SHA256이 계산된다. 

 

추가 확인