Przechwytywanie klawiszy w tle i przesyłanie do gniazda sock

0

Witam

Mam taką prośbe, czy ktoś mógłby mi napisać, lub powiedzieć jak napisać taką aplikacje, która działa w tle - nie tworzy żadnego okna i przechwytuje cały czas klawisze które wcisnęła osoba która uruchamiał ten program, a co jakieś 3h program automatycznie będzie łączyć się z aplikacją przez gniazdo socket i wysyłał dane - już zrobiłem program w C++ który będzie to odbierał.

Bardzo proszę o pomoc ^^

0

a to dlaczego nie napiszesz tego tez w C?

low-level keyboard hook i po sprawie.

W javie tez sie da ale oczywiście jest to trochę trudniejsze...dlaczego chcesz to w javie?

0

To jakoś na odwrót zrobiłeś...
Łatwiej tego hooka zrobić w c(++), w Javie to chyba nawet nie ma na czysto sposobu, JNI/JNA wymagane.
Łatwiej byłoby zrobić serwer odbierający w Javie niż w c++...

0

@keraj

Dokładnie - trochę na odwrót więc musi byc jakiś powód chyba?
W javie bez JNI/JNA nie znam sposobu-a skoro i tak to ma być praca z natywnym kodem to od razu machnij w C.

0

a moglibyście dać przykładowy taki kod na takie coś - jeśli chodzi o c++ znam częściowo składnie i tylko działania na socketach ;d

0

wejdz na strone JNA - tam masz mnóstwo odnośników do tematu. Szukałem w repozytorium ale nie mogę znaleźć niestetykodu który tam był gotowy. Wkleje swój bardzo podobny ...może Ci się przyda

package hook;

import com.sun.jna.platform.win32.Kernel32;
import com.sun.jna.platform.win32.User32;
import com.sun.jna.platform.win32.User32.HHOOK;
import com.sun.jna.platform.win32.User32.KBDLLHOOKSTRUCT;
import com.sun.jna.platform.win32.User32.LowLevelKeyboardProc;
import com.sun.jna.platform.win32.User32.MSG;
import com.sun.jna.platform.win32.W32API.HMODULE;
import com.sun.jna.platform.win32.W32API.LRESULT;
import com.sun.jna.platform.win32.W32API.WPARAM;

import com.sun.jna.platform.win32.User32.LowLevelKeyboardProc;

/** Sample implementation of a low-level keyboard hook on W32. */
public class HOOK {
    private static volatile boolean quit;
    private static HHOOK hhk;
    private static LowLevelKeyboardProc keyboardHook;

    public static void main(String[] args) {
        final User32 lib = User32.INSTANCE;

        HMODULE hMod = Kernel32.INSTANCE.GetModuleHandle(null);
        keyboardHook = new LowLevelKeyboardProc() {
            public LRESULT callback(int nCode, WPARAM wParam, KBDLLHOOKSTRUCT info) {
                if (nCode >= 0) {
                    switch(wParam.intValue()) {
                    case User32.WM_KEYUP:
                    {
                        System.out.println("ncode " + nCode);
                        System.out.println("WPARAM " + wParam.intValue());
                        System.out.println("iinfo.dwExtraInfo " + info.dwExtraInfo);
                        System.out.println("iinfo.flags " + info.flags);
                        System.out.println("iinfo.scancode " + info.scanCode);
                         System.out.println("--------------------------------");
                     //   System.out.println("iinfo.times " + info.time);
                    //    System.out.println("iinfo.vkcode " + info.vkCode);
                        
                    }
                    case User32.WM_KEYDOWN:
                             {
                             //System.out.println("2");
                    }
                    case User32.WM_SYSKEYUP:
                             {
                       // System.out.println("3");
                    }


                    case User32.WM_SYSKEYDOWN:
                                                 {
                       // System.out.println("4");
                    }
                    
                        if (info.vkCode == 81) {
                            quit = true;
                        }
                    }
                }
                return lib.CallNextHookEx(hhk, nCode, wParam, info.getPointer());
            }
        };
        hhk = lib.SetWindowsHookEx(User32.WH_KEYBOARD_LL, keyboardHook, hMod, 0);
        System.out.println("Start");
        new Thread() {
            public void run() {
                while (!quit) {
                    try { Thread.sleep(10); } catch(Exception e) { }
                }
                System.err.println("koniec");
                lib.UnhookWindowsHookEx(hhk);
                System.exit(0);
            }
        }.start();

        // This bit never returns from GetMessage
        int result;
        MSG msg = new MSG();
        while ((result = lib.GetMessage(msg, null, 0, 0)) != 0) {
            if (result == -1) {
                System.err.println("error in get message");
                break;
            }
            else {
                System.err.println("got message");
                lib.TranslateMessage(msg);
                lib.DispatchMessage(msg);
            }
        }
        lib.UnhookWindowsHookEx(hhk);
    }
}
0

Pomagacie w pisaniu keyloggera:)?

0

no mam nadzieję ze autor postu wykorzysta go tylko w dobrych celach.

0

Nie nie bawię się w hakera, chodzi mi oto aby program przysyłał klawisze do gniazda Socket na innym kompie, które będzie powtarzać tę samą kombinacje.

1 użytkowników online, w tym zalogowanych: 0, gości: 1