strasne nieco tato doba, vsetci len v jave, .net a podobnych humusnych veciach robia

;----
dufam, ze som pochopil tvoje otazky (ak nie, tak sa kludne pytaj dalej). pouzitie api "SetWindowsHookExA",
na pouzitie hooku bud pre proces odkial je hook instaluje alebo pre ostatne procesy (a to moze byt bud pre
konkretny proces alebo pre vsetky procesy). co sa tyka parametra "dwThreadID" - moze byt bud 0h (NULL) pre
vsetky procesy alebo tam moze byt nejaka konkretna hodnota TID (Thread ID) (pozor, nie PID - napr v pripade,
ze mame proces, kt ma len jeden thread, tak hodnota PID a TID je ina - takze vzdy davame TID) z procesu, na
kt chceme hook pouzit.
v tomto linku mas povedane vsetko co potrebujes (je to strasne stara vec od Iczelion-a)(+ preklad, ak neovladas eng):
http://win32assembly.online.fr/tut24.html
http://shaldan.xf.cz/tut24.html
co sa tyka druhej otazky - asi nechapem co sa pytas. neviem co mas na mysli tym, ked vravis, ze proces nie je
stavany na nahratie "cudzej" dll - nie je to ziadny problem, je to bezna vec. to, ze proces nebude volat
funkcie z takto nahratej dll je samozrejme - nemoze predsa volat funkcie z dll, kt su do procesu dodane
pomimo originalneho kodu procesu. takze CreateRemoteThread bude vykonavat kod, kt je uplne mimo povodneho
kodu procesu - no a, tymto mimo kodom mozme okrem ineho robit aj to co pises, nahrat dll a potom z threadu
volat jeho funkcie. funguje to tak ako pises:
invoke LoadLibraryA, offset NazovDll
invoke GetProcAddress, eax, offset NazovFunkcieDll
takze, zavolaj api LoadLibraryA - ta ma len jeden parameter, a tym je nazov dll. po volani tejto api nam v
EAX zostane imagebase nahratej dll. tu je oficialny popis tejto api (nedavam to tu cele, len dolezite veci):
The LoadLibrary function maps the specified executable module into the address space of the calling process.
HINSTANCE LoadLibrary(
LPCTSTR lpLibFileName // address of filename of executable module
);
Return Value
If the function succeeds, the return value is a handle to the module.
If the function fails, the return value is NULL. To get extended error information, call GetLastError.
presne ako pisem, pisu aj tu, ze ak funkcia sa vykona uspesne, tak sa navrati handle k dll (tj imagebase).
k api GetProcAddress mame toto:
The GetProcAddress function returns the address of the specified exported dynamic-link library (DLL) function.
FARPROC GetProcAddress(
HMODULE hModule, // handle to DLL module
LPCSTR lpProcName // name of function
);
Return Value
If the function succeeds, the return value is the address of the DLL's exported function.
If the function fails, the return value is NULL. To get extended error information, call GetLastError.
takze, ked sa vratime opat sem:
invoke LoadLibraryA, offset NazovDll
invoke GetProcAddress, eax, offset NazovFunkcieDll
v EAX mame teda imagebase k dll - to je parameter "hModule". no a druhy parameter je len nazov funkcie z dll,
kt hladame. po vykonani api GetProcAddress bude v EAX adresa hladanej funkcie.