TigerDemon
8주차 keylogger 실습 본문
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로 실행해준다.

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

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이 계산된다.

추가 확인

'2025-SWLUG > 악성코드 스터디' 카테고리의 다른 글
| 7주차 notepad.exe를 이용한 PE 구조 분석 실습 (0) | 2025.11.12 |
|---|---|
| 6주차 APT 악성코드 사례 - 미분류 악성코드 (1) | 2025.11.05 |
| 6주차 APT 악성코드 사례 - 라이브리(LIveRe) 유포 악성코드 (0) | 2025.11.05 |
| 5주차 APT 악성코드 사례 - IceFog (0) | 2025.10.26 |
| 5주차 APT 악성코드 사례 - Kimsuky APT 악성코드 (0) | 2025.10.26 |