Thud |
» 2009-10-03 20:02:07 Wine jest na tyle głupie, że "głupie" aplikacja napisane z użyciem WinAPI nie odpalą. Głupota głupocie nierówna. Mam Linuxa. |
|
malan Temat założony przez niniejszego użytkownika |
Problem z dll » 2009-10-29 19:01:29 Witam. Wróciłem do pisania mojego jakże skomplikowanego programiku. Trochę poszperałem tu i tam i wyczytałem iż jeśli chcę aby do programu dochodziły wszystkie komunikaty klawiatury (nawet jeśli nie jest on aktywny (nie posiada tak zwanego 'focus-a')) to muszę napisać 'dll', która będzie ładowana "do przestrzeni adresowej każdej aplikacji, która otrzyma komunikat związany z klawiaturą". Takową napisałem jednak: -chcąc ją uruchomić z poziomu aplikacji: LoadLibrary( "DLL_.dll" ); HackON();
do programu nie dochodzą kom. z innych aplikacji/okien. -uruchamiając ją z polecenia 'Uruchom': rundll32 DLL_, HackON : Wystąpił błąd podczas ładowania... Nie mogę odnaleźć określonego modułu. Kod biblioteki: #ifndef __MAIN_H__ #define __MAIN_H__
#include <windows.h>
#ifdef BUILD_DLL #define DLL_EXPORT __declspec(dllexport) #else #define DLL_EXPORT __declspec(dllimport) #endif
#ifdef __cplusplus extern "C" { #endif void __stdcall HackON( void ); void __stdcall HackOFF( void ); #ifdef __cplusplus } #endif
#endif
#include "main.h"
#include <fstream>
HHOOK uchwytHooka; HINSTANCE uchwytDLL; DWORD e;
void __stdcall HackON( void ) { LRESULT CALLBACK KeyboardProc( int code, WPARAM wParam, LPARAM lParam ); uchwytHooka = SetWindowsHookEx( WH_KEYBOARD, & KeyboardProc, uchwytDLL, NULL ); e = GetLastError(); if( e != 0 ) { MessageBox( NULL, "GLE != 0.", "KeyHook", MB_OK | MB_ICONERROR ); std::fstream file( "f.ini", std::ios::out ); file << e; file.close(); } if( uchwytHooka == NULL ) MessageBox( NULL, "Zakładanie 'hooka' nie powiodło się.", "KeyHook", MB_OK | MB_ICONERROR ); else MessageBox( NULL, "Zakładanie 'hooka' powiodło się.", "KeyHook", MB_OK | MB_ICONINFORMATION ); };
void __stdcall HackOFF( void ) { if( MessageBox( NULL, "Czy usunąć 'hooka' ?", "KeyHook", MB_YESNO | MB_ICONQUESTION ) == IDYES ) { bool OFF = UnhookWindowsHookEx( uchwytHooka ); if( OFF ) MessageBox( NULL, "Zdjęcie 'hooka' powiodło się.", "KeyHook", MB_OK | MB_ICONINFORMATION ); else MessageBox( NULL, "Zdjęcie 'hooka' nie powiodło się.", "KeyHook", MB_OK | MB_ICONERROR ); } };
BOOL WINAPI DllMain( HINSTANCE hinstDLL, DWORD fdwReason, LPVOID lpvReserved ) { switch( fdwReason ) { case DLL_PROCESS_ATTACH: MessageBox( NULL, "Biblioteka załadowana.", "KeyHook", MB_OK | MB_ICONINFORMATION ); uchwytDLL = hinstDLL; break; case DLL_PROCESS_DETACH: MessageBox( NULL, "Biblioteka usunięta.", "KeyHook", MB_OK | MB_ICONINFORMATION ); break; case DLL_THREAD_ATTACH: break; case DLL_THREAD_DETACH: break; } return TRUE; }
LRESULT CALLBACK KeyboardProc( int code, WPARAM wParam, LPARAM lParam ) { if( code >= HC_ACTION ) { Beep( 150, 50 ); } return CallNextHookEx( uchwytHooka, code, wParam, lParam ); };
Wzorowałem się na jakimś artykule pisząc ten kodzik, według którego najpierw powinien się wyświetlić komunikat "Biblioteka załadowana". Ani razu go nie widziałem... Aha i tworzę w CB. Pytania: Co tu jest nie tak? ;p |
|
DejaVu |
» 2009-10-29 20:20:29 1) Zapodaj link do artykułu 2) Przetestuj najpierw działanie tej biblioteki 'lokalnie' tj. w jakimś prostym programie WinAPI i dolinkuj do niego tą bibliotekę dynamicznie.
Co do uruchamiania: Wgrałeś tą dll'kę do katalogu odpowiedniego w Windowsie? |
|
malan Temat założony przez niniejszego użytkownika |
» 2009-10-29 21:01:46 1. Hooks2. Napisałem sobie coś takiego, aby sprawdzić, czy w ogóle uda się założyć hook-a: #include <iostream> #include "main.h"
using namespace std;
int main() { cout << "Hackujemy !!!" << endl; HackON(); return 0; } W linkerze dodałem libDLL_.a, *dll umieściłem w katalogu programu. Sprawdzałem też jaki kod błędu zwraca GetLastError (kiedy dostawałem komunikat, iż hook-a nie można założyć) -> 1428. Sprawdziłem w msdn: Cannot set nonlocal hook without a module handle. Nie rozumiem tylko do czego uchwyt - do biblioteki ? Próbowałem tam wstawić GetCurentThreadID, ale wtedy program otrzymywał kom. tylko i wyłączenie 'od siebie', tzn. komunikaty innych aplikacji nie dochodziły. 3. Dla polecenia jak podałem powyżej w system 32, ale podałem ścieżkę do niej, coś w stylu: rundll32 C:\...\DLL_, HackON |
|
DejaVu |
» 2009-10-29 21:27:00 |
|
malan Temat założony przez niniejszego użytkownika |
» 2009-10-30 16:18:43 Przeczytałem te wszystkie wiadomości i jak Pan napisał, nie znalazłem nic konkretnego dotyczącego mojego problemu. Jednak pokombinowałem i działa ! :). Chyba najważniejszą rzeczą jaką zmieniłem było wyeksportowanie funkcji 'DLLmain'. Teraz włączam program, wyświetla się komunikat o załadowaniu 'dll', następnie o poprawnym założeniu 'hook-a'. Kiedy np. otworzę notatnik i wcisnę dowolny klawisz wyświetla mi się komunikat: 'Biblioteka załadowana' :), a w pliku znajdują się literki, które wpisywałem ;).
Dziękuję wszystkim bardzo za pomoc :). W wolnej chwili podam rozwiązanie w dziale FAQ. |
|
manfred |
» 2009-09-20 11:25:06 Mianowicie program ma zapisywać wciśnięte przez usera klawisze. |
Keylogger znaczy się? Nieładnie, to jest nielegalne... |
|
manfred |
» 2009-09-20 14:38:16 Pewnie, na 4p już paru takich było, nic nowego ;) |
|
1 « 2 » 3 |