Problem z założeniem hook'a podczas startu systemu.

0

Witam was serdecznie.
Pisze w celach edukacyjnych pisze keylogera zaprogramowałem już wszystkie funkcje które takowa aplikacja powinna posiadać... program działa bez zarzutów jeśli jest uruchamiany "manualnie" lecz jeśli dodam go do autostartu to po restarcie program się uruchamia odczytuje bibliotekę .dll która powinna założyć hook'a lecz go nie zakłada. I tutaj moje pytania dlaczego gdy odpalam program ręcznie ten hook jest zakładany, a podczas gdy program się uruchamia ze startem systemu już nie?

Pozdrawiam

0

I to jest bardzo ważne pytanie DLACZEGO?
Należy częściej zadawać sobie tego typu pytanie oraz trochę kodu nie zaszkodzi. Nikt nie jest jasnowidzem. Zakładów też nie robimy.

0

No ok wiem że nie jesteście jasnowidzami i ja też nie jestem jaką część kodu byś chciał zobaczyć?
Tak wygląda załadowanie biblioteki i wywołanie funkcji:

	hModule =::LoadLibraryA("DLL.dll");
	RunStopHook = (RunStopHookProc*)::GetProcAddress((HMODULE)hModule, RunStopHook");

	(*RunStopHook)(TRUE, hInstance);

I ty wszystko super działa, lecz po restarcie i odpaleniu ze startem okno programu jest widoczne ale już nie pobiera znaków.
Kompilator którego używam to MS Visual C++ 2008

0

Ostatnio probowalem napisac cos podobnego, i utknalem na tlumaczeniu WM_KEYDOWN na WM_CHAR.

moglbys sie podzielic jak to zrobiles?
aplikacja dostaje tylko wm_keydown, i czy przetluamczy z uzyciem TranslateMessage, czy po swojemu to juz jej sprawa. Keylogger ma wylapac prawdziwy znak jaki wygenerowal keydown.

Oczywiscie mowa o pelnej obsludze klawiatury, rozny kod utf16 w zaleznosci od ukladu klawiatury.

Co do twojego pytania, masz tego dlla w tym samym katalogu co twoj program?
i kozystaj z funkcji unicode (tych z sufixem W, np LoadLibraryW). System obsluguje utf16, a wersja ansi nie zlapie wiekszasci znakow. Wiem ze w < win2k nie ma obslugi unicode, ale tam to i tak ten loger pewnie nie bedzie dzialal...

0

Oczywiście mogę cie nakierować.
W moim przypadku biblioteka zakładająca hook przesyła odebrany komunikat do głównego okna programu za pomocą funkcji SendMessage() w tej postacji:

SendMessage(hWnd,((tagMSG*)lParam)->message,((tagMSG*)lParam)->wParam,((tagMSG*)lParam)->lParam); 

Przetłumaczenie w głównym oknie też jest proste nie podam ci tutaj mojego kodu lecz bliźniaczy przykład:

case WM_KEYDOWN:
      zmienna_przechowywujaca_znak = char((int)wParam+32);
      break;

Myślę że pomogłem i czekam na pomoc w moim problemie ;]

0

zmienna_przechowywujaca_znak = char((int)wParam+32);

czyli tez nie wiesz jak to zrobic.

0
winhookz napisał(a)

zmienna_przechowywujaca_znak = char((int)wParam+32);

czyli tez nie wiesz jak to zrobic.

No jak to nie, podałem ci gotowe rozwiązanie char((int)wParam+32); przechwouje naciśnięty znak wystarczy go zapisac do zmiennej i masz gotowe, jeśli tego nie rozumiesz to nie wiem poco się za to bierzesz.

0

Żadna magia, wystarczy dokumentację czytać: http://msdn.microsoft.com/en-us/library/ms646280%28VS.85%29.aspx

0

No jak to nie, podałem ci gotowe rozwiązanie char((int)wParam+32); przechwouje naciśnięty znak wystarczy go zapisac do zmiennej i masz gotowe, jeśli tego nie rozumiesz to nie wiem poco się za to bierzesz.

to ty zakladasz ze znak to wm_keydown + 31.

moze dla znakow typu A->a, B->b to jest prawda bo VK_A i VK_B maja taka sama reprezentacje, ale dla innych znakow i layoutow nie jest tak.

wiec problem masz nie tylko z hookiem co jest banalne ale z odzyskiwaniem wlasciwych znakow.

chyba lepiej isc na kompromis, zapisywac tylko virtual code (VK_XXX), i stan klawiatury. np kazdy znak = 2 bajty, 1 = vk_xxx, 2 ma ustawione bity w zaleznosci od specjalnych klawiszy jak ctrl/shift/alt.

Bo nawet z hooka nie jestes sprawdzic jak aplikacja przetworzyla wm_keydown. Mogla wywolac TranslateMessage(), a mogla zrobic co innego, wlasnie zeby utrudnic keylogowanie, i np VK_W zamiast 'w' by wyslalo '@'. Oczywiscie to jest norma przy innym niz polski ukladzie klawiatury, ale coz ja tam wiem...

0

Przeciecz napisałem że podaje przykład a nie to czego używam w moim programie, do łapania znaków typu ctrl/shift/alt itd używam odpowiednich komunikatów takich jak VK_SHIFT, VK_CONTROL itd.
Jeśli uważasz mój problem z pierwszego posta za banalny to proszę powiedz mi co robię źle, jeśli program odpalając manualnie działa prawidłowo.

0

W sumie mam podobny problem :P Tylko że z biblioteką Qt, jak odpalam przez IDE dll'ka ładuje mi się prawidłowo, jak klikam .exe to mi wywala że nie może jej znaleźć. Dlatego śmiem wątpić żeby problem leżał w kodzie.

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