본문 바로가기

Python/Python_Project | 키로거 및 뷰어8

키로그, 뷰어 프로그램 전체 코드 공유 ### co.la@kakao.com ### ### Pig_Cola ### from PyQt5 import QtWidgets, QtCore import sys,pickle,keyboard,time # 메인 프로그램 UI 및 슬롯 구축 class main(QtWidgets.QWidget): def __init__(self): super().__init__() self.setWindowFlag(QtCore.Qt.WindowMinimizeButtonHint,False) self.setWindowFlag(QtCore.Qt.WindowMaximizeButtonHint,False) self.setMinimumSize(178,45) self.pbt1 = QtWidgets.QPushButton('키로거', self) s.. 2020. 5. 20.
뷰어 프로그램 기능구현, 드래그 앤 드롭 사용 # 뷰어 프로그램 UI구축 class viewer(QtWidgets.QWidget): def __init__(self): super().__init__() self.tb = QtWidgets.QTextBrowser(self) self.setAcceptDrops(True) layout = QtWidgets.QGridLayout() layout.addWidget(self.tb) self.setLayout(layout) # 드래그 한 무언가가 올라왔을때 작동 # 무언가에 주소값이 없다면 거절 def dragEnterEvent(self, e): if e.mimeData().urls() == []: e.ignore() else: e.accept() # 드래그한 무언가가 놓아졌을때(드래그이벤트가 거절되지 않아야 작.. 2020. 5. 20.
keyboard라이브러리 수정 키입력시 기록되는 부분을 확인해보면 _keyboard_event 모듈이었습니다. keyboard의 라이브러리 폴더에 있네요. 기본상태의 모듈입니다. win_title이란 변수를 만들어주고 전에 준비한 구문을 def로 둘러 전달할 내용을 return해줍니다. 새로 기록후 다시한번 디버깅을 해서 데이터를 확인해보니 오브젝트 들에게 win_title이라는 변수가 존재함을 확인할수 있었습니다. 이것을 뷰어에서 활요하면 좋을듯합니다. 2020. 5. 20.
활성화된 창이름,프로세스 이름 얻어오기 활성화 된 창의 핸들을 얻어와 창 이름과 프로세스 이름을 출력하는 간단한 구문. 이것을 키보드이벤트의 초기화 함수에 변형후 넣어주면 될거같다. import win32gui, win32process, psutil handle = win32gui.GetForegroundWindow() wintitle = win32gui.GetWindowText(handle) tid, pid = win32process.GetWindowThreadProcessId(handle) process_name = psutil.Process(pid).name() print(wintitle,process_name) 현재 활성화된 창의 handle값을 얻어온후 창이름과 프로세스 이름을 가져온다. 창이름은 핸들로 접근이 가능하며 프로세스 이름.. 2020. 5. 20.
디버그 - 기록된 키입력 데이터 확인 뷰어프로그램을 작성하기전 pickle을 통하여 저장하였던 바이너리 데이터를 불러와 디버그 모드로 자료구조에 대하여 먼저 알아봐야겠어요 키보드이벤트 클래스의 오브젝트들이 리스트에 담겨있네요. event_type이 눌렀을때 down 떼었을때 up이네요. 뷰어는 기록에 대한 재생할 필요가 없으니 down만 확인하면 될거같습니다. name의 경우 누른 키에 대한 문자열이 적혀있는데요 타이핑에 쓰이는 모든 키들은 길이가 1인 문자열로 있는 반면에 비 문자열 키들은 'esc', 'tab'과 같이 길이가 1이 아닌애들만 있네요. 나중에 if len(name) == 1 과같은 함수로 눌린 버튼이 문자열인지 비 문자열인지 판단할수 있을거같습니다. 뷰어 프로그램 기획당시 키가 입력된곳의 창이름,프로세스 이름을 같이 출력하.. 2020. 5. 20.
키 기록부분 구현 및 자동저장 - 쓰레드 생성 # 백그라운드 쓰레드 구축(레코딩 프로그램에 들어감) class _record(QtCore.QThread): def __init__(self,selfs): super().__init__(selfs) self._state = False self.record = [] self.mutex = QtCore.QMutex() self._time = None def run(self): # 쓰레드에서 실행될 구문 while True: self.mutex.lock() if not self._state: self.recording() else: if time.time() - self._time >= 60: # 60초마다 저장한다 self.recording() self.mutex.unlock() def recording(s.. 2020. 5. 20.
기획의도에 맞게 각 기능 UI구축 from PyQt5 import QtWidgets, QtCore import sys,pickle,keyboard # 메인 프로그램 UI 및 슬롯 구축 class main(QtWidgets.QWidget): def __init__(self): super().__init__() self.setWindowFlag(QtCore.Qt.WindowMinimizeButtonHint,False) self.setWindowFlag(QtCore.Qt.WindowMaximizeButtonHint,False) self.setMinimumSize(178,45) self.pbt1 = QtWidgets.QPushButton('키로거', self) self.pbt2 = QtWidgets.QPushButton('뷰어', self) s.. 2020. 5. 20.
기획 키보드 입력을 기록하는 keyloger만들기 1. gui는 qt를 이용 2. 키입력 레코딩은 keyboard 모듈 사용 3. 메인 프로그램 - 레코딩 프로그램 - 뷰어 프로그램 4. 키 입력시 활성화 되어있는 창 이름과 프로세스 이름 얻어오기 및 저장 5. pickle 모듈로 레코딩 데이터 이진파일로 저장 [메인 프로그램] 레코딩 프로그램과 뷰어 프로그램을 선택하여 실행할수 있도록 제작. (필수아님. 각각 프로그램으로 만들어도 될듯) [레코딩 프로그램] gui가 필요없지만 종료등의 편의를 위해 gui제작. 프로그램 실행시 자동으로 레코딩 시작. 일정 시간마다 레코딩 종료후 pickle모듈로 저장 및 레코딩 재실행 프로그램 종료시 진행중인 레코딩종료 및 저장 [뷰어 프로그램] pickle모듈로 저장된 이진.. 2020. 5. 20.