Π Π΅Π°Π»ΠΈΠ·Π°ΡΠΈΡ keylogging ΠΏΠΎΠ΄ WIN32
Π Win95/98/Millennium ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΡ ΠΌΠΎΠΆΠ½ΠΎ ΡΠΊΡΡΡΡ ΠΈΠ· ΡΠΏΠΈΡΠΊΠ° Π·Π°Π΄Π°Ρ ΡΡΠ½ΠΊΡΠΈΠ΅ΠΉ RegisterServiceProcess, ΠΏΠΎΡΠ»Π΅ ΡΡΠΎΠ³ΠΎ ΠΎΠ½Π° Π½Π΅ Π±ΡΠ΄Π΅Ρ Π²ΠΈΠ΄Π½Π° Π² ΡΠΏΠΈΡΠΊΠ΅ Π·Π°Π΄Π°Ρ taskman «a, ΠΏΠΎΠΊΠ°Π·ΡΠ²Π°Π΅ΠΌΠΎΠΌ ΠΏΠΎ Π½Π°ΠΆΠ°ΡΠΈΠΈ «Ctrl + Alt + Del «. ΠΠ΄Π½Π°ΠΊΠΎ Π»ΡΠ±ΠΎΠΉ ΠΌΠ΅Π½Π΅Π΄ΠΆΠ΅Ρ ΠΏΡΠΎΡΠ΅ΡΡΠΎΠ² (ΠΊ ΠΏΡΠΈΠΌΠ΅ΡΡ, SysInfo) Π²ΡΡ ΡΠ°Π²Π½ΠΎ ΠΏΠΎΠΊΠ°ΠΆΠ΅Ρ Π½Π°ΡΡ ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΡ, ΠΏΠΎΡΡΠΎΠΌΡ ΠΏΡΠΈ Π½Π°ΠΏΠΈΡΠ°Π½ΠΈΠΈ Π½ΡΠΆΠ½ΠΎ ΡΠΎΠ·Π΄Π°Π²Π°ΡΡ ΠΈ ΠΈΠ½ΡΠΎΡΠΌΠ°ΡΠΈΡ ΠΎ Π²Π΅ΡΡΠΈΠΈ. Π’Π°ΠΊ Π±ΡΠ΄Π΅Ρ ΠΌΠ΅Π½Π΅Π΅ Π·Π°ΠΌΠ΅ΡΠ½Π΅ΠΉ. SysInfo ΡΠ°ΠΊΠΆΠ΅ ΠΎΠΏΡΠ΅Π΄Π΅Π»ΡΠ΅Ρ Π²ΡΠ΅… Π§ΠΈΡΠ°ΡΡ Π΅ΡΡ >
Π Π΅Π°Π»ΠΈΠ·Π°ΡΠΈΡ keylogging ΠΏΠΎΠ΄ WIN32 (ΡΠ΅ΡΠ΅ΡΠ°Ρ, ΠΊΡΡΡΠΎΠ²Π°Ρ, Π΄ΠΈΠΏΠ»ΠΎΠΌ, ΠΊΠΎΠ½ΡΡΠΎΠ»ΡΠ½Π°Ρ)
Π Π΅Π°Π»ΠΈΠ·Π°ΡΠΈΡ keylogging ΠΏΠΎΠ΄ WIN32.
ΠΠ°ΡΠΊ ΠΡΠΌΠΎΠ»ΠΎΠ²
ΠΠ΄Π½ΠΈΠΌ ΠΈΠ· ΡΠ°ΠΌΡΡ ΠΏΡΠΎΡΡΡΡ ΠΌΠ΅ΡΠΎΠ΄ΠΎΠ² ΡΡΡΠΌΠ° ΠΈΠ½ΡΠΎΡΠΌΠ°ΡΠΈΠΈ Ρ ΠΏΠ΅ΡΡΠΎΠ½Π°Π»ΡΠ½ΠΎΠ³ΠΎ ΠΊΠΎΠΌΠΏΡΡΡΠ΅ΡΠ° ΡΠ²Π»ΡΠ΅ΡΡΡ ΡΡΡΠ°Π½ΠΎΠ²ΠΊΠ° Π½Π° ΠΊΠΎΠΌΠΏΡΡΡΠ΅Ρ ΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΠ΅Π»Ρ ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΡ, ΠΏΡΠΎΠΈΠ·Π²ΠΎΠ΄ΡΡΠ΅ΠΉ ΡΡΡΡ Π½Π°ΠΆΠ°ΡΠΈΠΉ ΠΊΠ»Π°Π²ΠΈΡ. ΠΠ°Π½Π½ΡΠΉ ΠΌΠ΅ΡΠΎΠ΄ ΠΌΠΎΠΆΠ½ΠΎ Π»Π΅Π³ΠΊΠΎ ΠΎΡΡΡΠ΅ΡΡΠ²ΠΈΡΡ ΠΏΡΠΈ ΡΠΈΠ·ΠΈΡΠ΅ΡΠΊΠΎΠΌ Π΄ΠΎΡΡΡΠΏΠ΅ Π½Π° ΠΈΠ½ΡΠ΅ΡΠ΅ΡΡΡΡΠΈΠΉ ΠΊΠΎΠΌΠΏΡΡΡΠ΅Ρ. Π£ΡΡΠ°Π½ΠΎΠ²ΠΈΡΡ ΠΊΠ΅ΠΉΠ»ΠΎΠ³Π³Π΅Ρ ΠΌΠΎΠΆΠ½ΠΎ ΡΠ°ΠΊΠΆΠ΅ ΠΈ ΡΠ΄Π°Π»Π΅Π½Π½ΠΎ, ΠΈΡΠΏΠΎΠ»ΡΠ·ΡΡ ΠΎΡΠΈΠ±ΠΊΠΈ Π² ΡΠ΅Π°Π»ΠΈΠ·Π°ΡΠΈΡΡ ΡΠ΅ΡΠ²ΠΈΡΠΎΠ² ΠΎΠ±ΡΠ΅ΠΊΡΠ°, Π½ΠΎ ΠΌΡ ΠΎΠΏΡΡΡΠΈΠΌ ΠΌΠ΅ΡΠΎΠ΄Ρ ΡΡΡΠ°Π½ΠΎΠ²ΠΊΠΈ Π² Π΄Π°Π½Π½ΠΎΠΉ ΡΡΠ°ΡΡΠ΅.
Π‘ΡΡΠ΅ΡΡΠ²ΡΠ΅Ρ Π±ΠΎΠ»ΡΡΠΎΠ΅ ΠΊΠΎΠ»ΠΈΡΠ΅ΡΡΠ²ΠΎ ΡΠΆΠ΅ Π³ΠΎΡΠΎΠ²ΡΡ ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌ-ΠΊΠ΅ΠΉΠ»ΠΎΠ³Π³Π΅ΡΠΎΠ². ΠΠ΄Π½Π°ΠΊΠΎ Π²ΠΎ-ΠΏΠ΅ΡΠ²ΡΡ Π±ΠΎΠ»ΡΡΠΈΠ½ΡΡΠ²ΠΎ ΠΈΠ· Π½ΠΈΡ ΡΠΆΠ΅ ΠΎΠΏΡΠ΅Π΄Π΅Π»ΡΡΡΡΡ Π°Π½ΡΠΈΠ²ΠΈΡΡΡΠ½ΡΠΌΠΈ ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΠ°ΠΌΠΈ, Π²ΠΎ-Π²ΡΠΎΡΡΡ , Π·Π°ΡΠ°ΡΡΡΡ, ΠΈΡ ΡΡΠ½ΠΊΡΠΈΠΎΠ½Π°Π»ΡΠ½ΠΎΡΡΡ ΠΎΡΡΠ°Π²Π»ΡΠ΅Ρ ΠΆΠ΅Π»Π°ΡΡ Π»ΡΡΡΠ΅Π³ΠΎ, Π»ΠΈΠ±ΠΎ ΠΎΠ½ΠΈ ΡΠ°Π±ΠΎΡΠ°ΡΡ ΠΊΡΠ°ΠΉΠ½Π΅ Π½Π΅ΡΡΠ°Π±ΠΈΠ»ΡΠ½ΠΎ. ΠΠ΄Π½ΠΈΠΌ ΠΈΠ· Π²ΠΈΠ΄ΠΎΠ² ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌ, ΠΎΡΡΡΠ΅ΡΡΠ²Π»ΡΡΡΠΈΡ ΡΡΡΠΌ ΠΈΠ½ΡΠΎΡΠΌΠ°ΡΠΈΠΈ, ΡΠ²Π»ΡΡΡΡΡ KeyLogger-Ρ (Π΄ΠΎΡΠ»ΠΎΠ²Π½ΠΎ ΡΠ΅Π³ΠΈΡΡΡΠ°ΡΠΎΡ ΠΊΠ»Π°Π²ΠΈΡ). ΠΠ½ΠΈ ΡΠ΅Π³ΠΈΡΡΡΠΈΡΡΡΡ Π²ΡΠ΅ Π½Π°ΠΆΠ°ΡΡΠ΅ ΠΊΠ»Π°Π²ΠΈΡΠΈ Π½Π° ΠΊΠ»Π°Π²ΠΈΠ°ΡΡΡΠ΅, ΠΎΠ±ΡΠ°Π±Π°ΡΡΠ²Π°ΡΡ ΠΏΠΎΠ»ΡΡΠ΅Π½Π½ΡΡ ΠΈΠ½ΡΠΎΡΠΌΠ°ΡΠΈΡ ΠΈ ΡΠΎΡ ΡΠ°Π½ΡΡΡ Π΅Ρ Π² ΡΠ°ΠΉΠ». ΠΠΎΡΠΊΠΎΠ»ΡΠΊΡ Π·Π°ΠΊΡΡΡΠ°Ρ ΠΈΠ½ΡΠΎΡΠΌΠ°ΡΠΈΡ (ΠΏΠ°ΡΠΎΠ»ΠΈ, Π΄ΠΎΠΊΡΠΌΠ΅Π½ΡΡ, ΠΈ Ρ. Π΄.) Π½Π°Π±ΠΈΡΠ°Π΅ΡΡΡ Ρ ΠΊΠ»Π°Π²ΠΈΠ°ΡΡΡΡ, KeyLogger ΡΠ²Π»ΡΠ΅ΡΡΡ ΠΎΠ΄Π½ΠΈΠΌ ΠΈΠ· ΡΡΠ΅Π΄ΡΡΠ² Π΅Ρ ΠΏΠΎΠ»ΡΡΠ΅Π½ΠΈΡ.
Π ΠΎΠΏΠ΅ΡΠ°ΡΠΈΠΎΠ½Π½ΠΎΠΉ ΡΠΈΡΡΠ΅ΠΌΠ΅ MSDOS ΠΊΠ΅ΠΉΠ»ΠΎΠ³Π³Π΅Ρ Π΄Π°Π½Π½ΠΎΠ³ΠΎ Π²ΠΈΠ΄Π° ΠΏΡΠΎΡΡΠΎ ΠΏΠ΅ΡΠ΅Ρ Π²Π°ΡΡΠ²Π°Π΅Ρ ΠΏΡΠ΅ΡΡΠ²Π°Π½ΠΈΠ΅ ΠΎΡ ΠΊΠ»Π°Π²ΠΈΠ°ΡΡΡΡ (int 16h) ΠΈ Π½ΡΠΆΠ½ΡΠΌ ΠΎΠ±ΡΠ°Π·ΠΎΠΌ Π΅Π³ΠΎ ΠΎΠ±ΡΠ°Π±Π°ΡΡΠ²Π°Π΅Ρ. Π Win32 Π²ΡΠ΅ ΡΠ»ΠΎΠΆΠ½Π΅Π΅. ΠΡΠ΄Π΅Ρ ΡΠΌΠ΅ΡΡΠ½ΡΠΌ ΠΎΠΏΠΈΡΠ°ΡΡ ΠΌΠ΅ΡΠΎΠ΄ ΡΠ΅Π³ΠΈΡΡΡΠ°ΡΠΈΠΈ Π²ΡΠ΅Ρ Π½Π°ΠΆΠ°ΡΡΡ ΠΊΠ»Π°Π²ΠΈΡ Ρ ΠΏΠΎΠΌΠΎΡΡΡ ΡΠΈΡΡΠ΅ΠΌΠ½ΡΡ Π»ΠΎΠ²ΡΡΠ΅ΠΊ ΠΈΠ»ΠΈ ΡΠΈΠ»ΡΡΡΠΎΠ² (hooks). ΠΡΠΎΡ ΠΌΠ΅ΡΠΎΠ΄ ΡΠ°Π±ΠΎΡΠ°Π΅Ρ ΠΊΠ°ΠΊ ΠΏΠΎΠ΄ Win95/98/Millennium ΡΠ°ΠΊ ΠΈ ΠΏΠΎΠ΄ WIN NT/2000/XP. Π ΠΊΠ°ΡΠ΅ΡΡΠ²Π΅ ΡΠ·ΡΠΊΠ° ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΠΈΡΠΎΠ²Π°Π½ΠΈΡ Π΄Π»Ρ ΡΡΠΎΠΉ Π·Π°Π΄Π°ΡΠΈ ΡΡΠΎΠΈΡ Π²ΡΠ±ΡΠ°ΡΡ C/C++, Π° ΡΡΠ΅Π΄ΠΎΠΉ ΡΠ°Π·ΡΠ°Π±ΠΎΡΠΊΠΈ MS Visual C++. ΠΡΡΠ΅ΠΌΠ±Π»Π΅Ρ Π΄Π»Ρ ΡΡΠΈΡ ΡΠ΅Π»Π΅ΠΉ ΠΏΠΎΠ΄Ρ ΠΎΠ΄ΠΈΡ Π»ΡΡΡΠ΅, Π½ΠΎ ΠΏΠΈΡΠ°ΡΡ Π½Π° ΠΡΡΠ΅ΠΌΠ±Π»Π΅ΡΠ΅ Π² Win32 ΡΠ»ΠΈΡΠΊΠΎΠΌ ΡΡΠΎΠΌΠΈΡΠ΅Π»ΡΠ½ΠΎ ΠΈ Π΄ΠΎΠ»Π³ΠΎ.
Π Win32 API ΠΏΡΠΈΡΡΡΡΡΠ²ΡΠ΅Ρ ΡΡΠ½ΠΊΡΠΈΡ SetWindowsHookEx. ΠΠ½Π° ΠΏΠΎΠ·Π²ΠΎΠ»ΡΠ΅Ρ ΠΎΠΏΡΠ΅Π΄Π΅Π»ΠΈΡΡ Π½Π΅ΠΊΠΎΡΠΎΡΡΡ (ΡΠΎΠ±ΡΡΠ²Π΅Π½Π½ΡΡ) ΡΡΠ½ΠΊΡΠΈΡ ΠΊΠΎΡΠΎΡΠ°Ρ Π±ΡΠ΄Π΅Ρ ΡΡΠ°Π±Π°ΡΡΠ²Π°ΡΡ ΠΊΠ°ΠΆΠ΄ΡΠΉ ΡΠ°Π· ΠΏΡΠΈ Π½Π°ΡΡΡΠΏΠ»Π΅Π½ΠΈΠΈ Π½Π΅ΠΊΠΎΡΠΎΡΠΎΠ³ΠΎ ΡΠΎΠ±ΡΡΠΈΡ (ΠΏΠΎΠ»ΡΡΠ΅Π½ΠΈΠ΅ ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΠΎΠΉ ΡΠΎΠΎΠ±ΡΠ΅Π½ΠΈΡ, Π½Π°ΠΆΠ°ΡΠΈΡ ΠΊΠ»Π°Π²ΠΈΡΠΈ Π½Π° ΠΊΠ»Π°Π²ΠΈΠ°ΡΡΡΠ΅, ΡΠΎΠ·Π΄Π°Π½ΠΈΡ ΠΎΠΊΠ½Π° ΠΈ Ρ. Π΄.). ΠΠΎΠ»Π½ΠΎΠ΅ ΠΎΠΏΠΈΡΠ°Π½ΠΈΠ΅ Π΄Π°Π½Π½ΠΎΠΉ ΡΡΠ½ΠΊΡΠΈΠΈ ΠΌΠΎΠΆΠ½ΠΎ ΠΏΡΠΎΡΠΈΡΠ°ΡΡ Π² MSDN (Microsoft Developer Network Library).
ΠΠ΅ΡΠ²ΡΠΉ ΠΏΠ°ΡΠ°ΠΌΠ΅ΡΡ Π΄Π°Π½Π½ΠΎΠΉ ΡΡΠ½ΠΊΡΠΈΠΈ ΡΠΊΠ°Π·ΡΠ²Π°Π΅Ρ ΡΠΎΠ±ΡΡΠΈΠ΅, Π½Π° ΠΊΠΎΡΠΎΡΠΎΠ΅ ΠΌΡ ΡΡΠ°Π²ΠΈΠΌ Π»ΠΎΠ²ΡΡΠΊΡ. Π Π½Π°ΡΠ΅ΠΌ ΡΠ»ΡΡΠ°Π΅ — ΠΊΠ»Π°Π²ΠΈΠ°ΡΡΡΠ° — WH_KEYBOARD.
ΠΠ° Π²ΡΠΎΡΠΎΠΌ ΠΌΠ΅ΡΡΠ΅ Π² ΠΎΠ±ΡΠ°Π±ΠΎΡΡΠΈΠΊΠ΅ Π²ΡΠ·ΠΎΠ²Π° ΠΌΡ Π΄ΠΎΠ»ΠΆΠ½Ρ ΡΠΊΠ°Π·Π°ΡΡ Π°Π΄ΡΠ΅Ρ ΡΡΠ½ΠΊΡΠΈΠΈ, ΠΊΠΎΡΠΎΡΠ°Ρ Π±ΡΠ΄Π΅Ρ Π²ΡΠ·ΡΠ²Π°ΡΡΡΡ ΠΊΠ°ΠΆΠ΄ΡΠΉ ΡΠ°Π· ΠΏΡΠΈ Π½Π°ΡΡΡΠΏΠ»Π΅Π½ΠΈΠΈ Π΄Π°Π½Π½ΠΎΠ³ΠΎ ΡΠΎΠ±ΡΡΠΈΡ. ΠΠΈΠ΄ ΡΡΠΎΠΉ ΡΡΠ½ΠΊΡΠΈΠΈ (Π΄Π»Ρ ΠΎΠ±ΡΠ°Π±ΠΎΡΠΊΠΈ Π½Π°ΠΆΠ°ΡΠΈΠΉ ΠΊΠ»Π°Π²ΠΈΡ) ΡΠ»Π΅Π΄ΡΡΡΠΈΠΉ:
LRESULT CALLBACK KeyboardProc (int code, WPARAM wParam, LPARAM lParam);
Π³Π΄Π΅: code — ΡΠΏΠΎΡΠΎΠ± ΠΎΠ±ΡΠ°Π±ΠΎΡΠΊΠΈ ΠΊΠ»Π°Π²ΠΈΡΠΈ ΠΏΡΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅ΠΌ.
wParam — ΡΠΎΠ΄Π΅ΡΠΆΠΈΡ Π²ΠΈΡΡΡΠ°Π»ΡΠ½ΡΠΉ ΠΊΠΎΠ΄ Π½Π°ΠΆΠ°ΡΠΎΠΉ ΠΊΠ»Π°Π²ΠΈΡΠΈ.
lParam — ΠΏΡΠ΅Π΄ΡΡΠ°Π²Π»ΡΠ΅Ρ ΡΠΎΠ±ΠΎΠΉ 4-x Π±Π°ΠΉΡΠΎΠ²ΡΡ ΡΡΡΡΠΊΡΡΡΡ Π΄Π°Π½Π½ΡΡ , Π³Π΄Π΅ Π² ΠΊΠ°ΡΠ΅ΡΡΠ²Π΅ ΠΏΠΎΠ»Π΅ΠΉ Π²ΡΡΡΡΠΏΠ°ΡΡ Π΅Ρ Π±ΠΈΡΡ. ΠΠΈΡΡ 0−15 ΠΎΠΏΡΠ΅Π΄Π΅Π»ΡΡΡ ΡΠΊΠΎΠ»ΡΠΊΠΎ ΡΠ°Π· ΠΏΡΠΎΠΈΠ·ΠΎΡΠ»ΠΎ ΡΠΎΠ±ΡΡΠΈΠ΅ (Π·Π½Π°ΡΠ΅Π½ΠΈΠ΅ ΠΎΡΠ»ΠΈΡΠ½ΠΎ ΠΎΡ 1 Π² ΡΠ»ΡΡΠ°Π΅, Π΅ΡΠ»ΠΈ ΠΊΠ»Π°Π²ΠΈΡΠ° ΡΠ΄Π΅ΡΠΆΠΈΠ²Π°Π΅ΡΡΡ Π½Π΅ΠΊΠΎΡΠΎΡΠΎΠ΅ Π²ΡΠ΅ΠΌΡ), Π±ΠΈΡΡ 16−23 ΠΎΠΏΡΠ΅Π΄Π΅Π»ΡΡΡ scan-ΠΊΠΎΠ΄ Π½Π°ΠΆΠ°ΡΠΎΠΉ (ΠΎΡΠΏΡΡΠ΅Π½Π½ΠΎΠΉ) ΠΊΠ»Π°Π²ΠΈΡΠΈ, Π° 31-ΡΠΉ Π±ΠΈΡ ΠΎΠΏΡΠ΅Π΄Π΅Π»ΡΠ΅Ρ, Π±ΡΠ»Π° Π»ΠΈ ΠΊΠ»Π°Π²ΠΈΡΠ° Π½Π°ΠΆΠ°ΡΠ° ΠΈΠ»ΠΈ ΠΎΡΠΏΡΡΠ΅Π½Π°.
ΠΠ°ΡΠ°ΠΌΠ΅ΡΡ code ΠΏΡΠΈΠΌΠ΅Π½ΡΠ΅ΡΡΡ Π΄Π»Ρ ΠΎΡΡΠ΅ΠΈΠ²Π°Π½ΠΈΡ Π»ΠΈΡΠ½ΠΈΡ ΡΠΎΠ±ΡΡΠΈΠΉ. ΠΠ°ΠΏΡΠΈΠΌΠ΅Ρ, ΠΏΡΠΈ Π½Π°Π±ΠΎΡΠ΅ Π² MS Word ΡΠ΅ΠΊΡΡΠ° «123 «Π½Π°Ρ ΠΎΠ±ΡΠ°Π±ΠΎΡΡΠΈΠΊ ΠΏΠΎΠ»ΡΡΠΈΡ ΠΏΠΎ ΠΏΠ°ΡΠ΅ ΡΠΎΠ±ΡΡΠΈΠΉ Π½Π° ΠΊΠ°ΠΆΠ΄ΠΎΠ΅ Π½Π°ΠΆΠ°ΡΠΈΠ΅ ΠΊΠ»Π°Π²ΠΈΡΠΈ («112 233 ») ΠΡΠΈ ΠΏΠΎΡΡΡΠΏΠ»Π΅Π½ΠΈΠΈ ΠΈΠ½ΡΠ΅ΡΠ΅ΡΡΡΡΠ΅Π³ΠΎ Π½Π°Ρ ΡΠΎΠΎΠ±ΡΠ΅Π½ΠΈΡ ΡΠΎΠΎΠ±ΡΠ΅Π½ΠΈΡ Π΄Π°Π½Π½ΡΠΉ ΠΏΠ°ΡΠ°ΠΌΠ΅ΡΡ ΡΠ°Π²Π΅Π½ HC_ACTION.
ΠΠΎΡΠΊΠΎΠ»ΡΠΊΡ KeyboardProc ΠΈΡΠΏΠΎΠ»ΡΠ·ΡΠ΅ΡΡΡ ΡΠΈΡΡΠ΅ΠΌΠΎΠΉ, ΠΌΡ Π΄ΠΎΠ»ΠΆΠ½Ρ ΠΏΡΠΈ ΠΎΠΏΠΈΡΠ°Π½ΠΈΠΈ ΡΠΊΠ°Π·Π°ΡΡ CALLBACK.
ΠΡΠ°ΠΊ, Π΄Π»Ρ ΠΎΠ±ΡΠ°Π±ΠΎΡΠΊΠΈ Π½Π°ΠΆΠ°ΡΡΡ ΠΊΠ»Π°Π²ΠΈΡ ΠΌΡ Π΄ΠΎΠ»ΠΆΠ½Ρ Π½Π°ΠΏΠΈΡΠ°ΡΡ ΡΠ²ΠΎΡ ΠΏΡΠΎΡΠ΅Π΄ΡΡΡ KeyboardProc ΠΏΡΠΈΠΌΠ΅ΡΠ½ΠΎ ΡΠ»Π΅Π΄ΡΡΡΠΈΠΌ ΠΎΠ±ΡΠ°Π·ΠΎΠΌ:
LRESULT CALLBACK KeyboardProc (int code, WPARAM wParam, LPARAM lParam).
{.
DWORD IsDown, ScanCode;
IsDown = !(lParam >> 31);
ScanCode = lParam >= 24;
if (IsDown && code == HC_ACTION).
ProccessDownKey (wParam, (unsigned char) ScanCode);//ΠΠ±ΡΠ°Π±Π°ΡΡΠ²Π°Π΅ΠΌ.
return 0;
}.
Π MSDN ΡΠΊΠ°Π·Π°Π½ΠΎ, ΡΡΠΎ Π΅ΡΠ»ΠΈ ΠΏΠ°ΡΠ°ΠΌΠ΅ΡΡ code < 0, ΡΠΎ Π½ΡΠΆΠ½ΠΎ ΠΏΡΠ΅Π΄Π°ΡΡ ΡΠΏΡΠ°Π²Π»Π΅Π½ΠΈΠ΅ ΡΠ»Π΅Π΄ΡΡΡΠ΅ΠΉ Π»ΠΎΠ²ΡΡΠΊΠ΅ Π²ΡΠ·ΠΎΠ²ΠΎΠΌ CallNextHookEx, Π½ΠΎ Π½Π° ΠΏΡΠ°ΠΊΡΠΈΠΊΠ΅ ΠΌΠΎΠΆΠ½ΠΎ ΡΡΠΎΠ³ΠΎ Π½Π΅ Π΄Π΅Π»Π°ΡΡ, Π° ΠΏΡΠΎΡΡΠΎ Π²ΠΎΠ·Π²ΡΠ°ΡΠΈΡΡ ΠΈΠ· KeyboardProc 0 ΠΈ Π²ΡΠ΅ Π±ΡΠ΄Π΅Ρ ΡΠ°Π±ΠΎΡΠ°ΡΡ.
Π’ΡΠ΅ΡΠΈΠΉ ΠΏΠ°ΡΠ°ΠΌΠ΅ΡΡ SetWindowsHookEx — Π΄Π΅ΡΠΊΡΠΈΠΏΡΠΎΡ ΠΌΠΎΠ΄ΡΠ»Ρ Π² ΠΊΠΎΡΠΎΡΠΎΠΌ Π½Π°Ρ ΠΎΠ΄ΠΈΡΡΡ KeyboardProc, Π° ΡΠ΅ΡΠ²Π΅ΡΡΡΠΉ — ΠΈΠ΄Π΅Π½ΡΠΈΡΠΈΠΊΠ°ΡΠΎΡ ΠΏΠΎΡΠΎΠΊΠ°, Π΄Π»Ρ ΠΊΠΎΡΠΎΡΠΎΠ³ΠΎ ΡΡΡΠ°Π½Π°Π²Π»ΠΈΠ²Π°Π΅ΡΡΡ Π»ΠΎΠ²ΡΡΠΊΠ° (0 — Π΄Π»Ρ Π²ΡΠ΅Ρ ΠΏΠΎΡΠΎΠΊΠΎΠ² Π² ΡΠΈΡΡΠ΅ΠΌΠ΅). Π€ΠΈΠ»ΡΡΡ ΠΌΠΎΠΆΠ΅Ρ ΡΡΡΠ°Π½Π°Π²Π»ΠΈΠ²Π°ΡΡΡΡ ΠΊΠ°ΠΊ Π½Π° ΠΎΠ΄ΠΈΠ½ ΠΏΠΎΡΠΎΠΊ ΠΎΠ΄Π½ΠΎΠ³ΠΎ ΠΏΡΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΡ, ΡΠ°ΠΊ ΠΈ Π½Π° Π²ΡΠ΅ ΠΏΠΎΡΠΎΠΊΠΈ Π²ΡΠ΅Ρ ΠΏΡΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠΉ. Π ΠΏΠΎΡΠ»Π΅Π΄Π½Π΅ΠΌ (Π½Π°ΠΈΠ±ΠΎΠ»Π΅Π΅ ΠΈΠ½ΡΠ΅ΡΠ΅ΡΠ½ΠΎΠΌ) ΡΠ»ΡΡΠ°Π΅ KeyboardProc Π΄ΠΎΠ»ΠΆΠ½Π° Π½Π°Ρ ΠΎΠ΄ΠΈΡΡΡΡ Π² DLL (Dynamic Link Library). Π’Π°ΠΊ ΡΠ΄Π΅Π»Π°Π½ΠΎ ΠΈΠ·-Π·Π° ΠΎΡΠΎΠ±Π΅Π½Π½ΠΎΡΡΠ΅ΠΉ Π°ΡΡ ΠΈΡΠ΅ΠΊΡΡΡΡ Windows, Π² ΠΊΠΎΡΠΎΡΠΎΠΉ ΠΊΠ°ΠΆΠ΄ΡΠΉ ΠΏΡΠΎΡΠ΅ΡΡ ΠΈΠΌΠ΅Π΅Ρ ΡΠ²ΠΎΠ΅ Π°Π΄ΡΠ΅ΡΠ½ΠΎΠ΅ ΠΏΡΠΎΡΡΡΠ°Π½ΡΡΠ²ΠΎ. Π‘ ΠΏΠΎΠΌΠΎΡΡΡ Visual C++ ΡΠ΅Π°Π»ΠΈΠ·Π°ΡΠΈΡ ΡΠΎΠ±ΡΡΠ²Π΅Π½Π½ΠΎΠΉ dll-Π±ΠΈΠ±Π»ΠΈΠΎΡΠ΅ΠΊΠΈ ΡΠ²Π»ΡΠ΅ΡΡΡ Π½Π΅ΡΠ»ΠΎΠΆΠ½ΠΎΠΉ.
ΠΠ°ΠΆΠ½ΡΠΌ ΠΌΠΎΠΌΠ΅Π½ΡΠΎΠΌ ΡΠ²Π»ΡΠ΅ΡΡΡ ΡΠΎ, ΡΡΠΎ ΠΏΡΠΈ Π·Π°ΠΏΡΡΠΊΠ΅ ΠΊΠ°ΠΆΠ΄ΠΎΠΉ Π½ΠΎΠ²ΠΎΠΉ ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΡ ΠΏΡΠΈ Π°ΠΊΡΠΈΠ²Π½ΠΎΠΌ ΡΠΈΠ»ΡΡΡΠ΅, Windows ΡΠΎΠ·Π΄Π°Π΅Ρ Π½ΠΎΠ²ΡΡ ΠΊΠΎΠΏΠΈΡ Π²ΡΠ΅Ρ Π΄Π°Π½Π½ΡΡ DLL, ΡΠΎΠ΄Π΅ΡΠΆΠ°ΡΠ΅ΠΉ KeyboardProc, ΠΈ Π΄ΠΈΠ½Π°ΠΌΠΈΡΠ΅ΡΠΊΠ°Ρ Π±ΠΈΠ±Π»ΠΈΠΎΡΠ΅ΠΊΠ° Π²Π½Π΅Π΄ΡΡΠ΅ΡΡΡ Π² Π°Π΄ΡΠ΅ΡΠ½ΠΎΠ΅ ΠΏΡΠΎΡΡΡΠ°Π½ΡΡΠ²ΠΎ Π·Π°ΠΏΡΡΠΊΠ°Π΅ΠΌΠΎΠ³ΠΎ ΠΏΡΠΎΡΠ΅ΡΡΠ°. ΠΠΎΡΡΠΎΠΌΡ Π²ΡΠ΅ Π³Π»ΠΎΠ±Π°Π»ΡΠ½ΡΠ΅ Π΄Π°Π½Π½ΡΠ΅ ΡΠ»Π΅Π΄ΡΠ΅Ρ Ρ ΡΠ°Π½ΠΈΡΡ ΡΠ»Π΅Π΄ΡΡΡΠΈΠΌ ΠΎΠ±ΡΠ°Π·ΠΎΠΌ:
1. Π ΠΈΡΡ ΠΎΠ΄Π½ΠΎΠΌ ΠΊΠΎΠ΄Π΅ DLL Π½Π°ΠΏΠΈΡΠ°ΡΡ ΡΠ»Π΅Π΄ΡΡΡΠ΅Π΅:
#pragma data_seg («.SHAREDDATA »).
/*.
…
…
ΠΠ»ΠΎΠ±Π°Π»ΡΠ½ΡΠ΅ Π΄Π°Π½Π½ΡΠ΅.
…
ΠΠ°ΠΏΡΠΈΠΌΠ΅Ρ:*/.
static char logFileName[128] = {0}; //ΠΠΌΡ ΡΠ°ΠΉΠ»Π° ΠΎΡΡΠ΅ΡΠ°.
static int dllsCount; //Π§ΠΈΡΠ»ΠΎ Π²Π½Π΅Π΄ΡΠ΅Π½Π½ΡΡ DLL.
// ΠΈ Ρ. Π΄.
#pragma data_seg ().
2. Π .def — ΡΠ°ΠΉΠ»Π΅ Π±ΠΈΠ±Π»ΠΈΠΎΡΠ΅ΠΊΠΈ Π½Π°ΠΏΠΈΡΠ°ΡΡ:
SECTIONS.
.SHAREDDATA Read Write Shared.
ΠΡΠΈ ΠΎΠ±ΡΠ°Π±ΠΎΡΠΊΠΈ ΡΠΎΠ±ΡΡΠΈΡ ΠΎΡ ΠΊΠ»Π°Π²ΠΈΠ°ΡΡΡΡ Π²ΠΎΠ·Π½ΠΈΠΊΠ°Π΅Ρ ΠΏΡΠΎΠ±Π»Π΅ΠΌΠ°: ΠΠ°ΠΊ ΠΏΠΎΠ»ΡΡΠΈΡΡ ΡΠΈΠΌΠ²ΠΎΠ» (Π½Π°ΠΏΡΠΈΠΌΠ΅Ρ «A «ΠΈΠ»ΠΈ «a », «s «ΠΈΠ»ΠΈ «Ρ »), ΠΊΠΎΡΠΎΡΡΠΉ Π΄Π΅ΠΉΡΡΠ²ΠΈΡΠ΅Π»ΡΠ½ΠΎ Π²Π²ΠΎΠ΄ΠΈΠ» ΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΠ΅Π»Ρ. ΠΠ»Ρ ΡΡΠΎΠ³ΠΎ ΠΌΠΎΠΆΠ½ΠΎ Π²ΠΎΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΡΡΡ ΡΡΠ½ΠΊΡΠΈΡΠΌΠΈ ToAscii ΠΈ ToUnicode, ΠΊΠΎΡΠΎΡΡΠ΅ ΠΏΠΎΠ·Π²ΠΎΠ»ΡΡΡ ΠΏΠΎ scan-ΠΊΠΎΠ΄Ρ ΠΈ Π²ΠΈΡΡΡΠ°Π»ΡΠ½ΠΎΠΌΡ ΠΊΠΎΠ΄Ρ, Π° ΡΠ°ΠΊΠΆΠ΅ ΡΠΎΡΡΠΎΡΠ½ΠΈΡ ΠΊΠ»Π°Π²ΠΈΠ°ΡΡΡΡ ΠΎΠΏΡΠ΅Π΄Π΅Π»ΠΈΡΡ ΠΊΠΎΠ½ΠΊΡΠ΅ΡΠ½ΡΠΉ ΡΠΈΠΌΠ²ΠΎΠ».
ΠΡ ΠΎΠΏΡΡΡΠΈΠΌ ΠΏΠΎΠ΄ΡΠΎΠ±Π½ΠΎΠ΅ ΠΎΠΏΠΈΡΠ°Π½ΠΈΠ΅ ΠΌΠ΅Ρ Π°Π½ΠΈΠ·ΠΌΠ° Π·Π°Π³ΡΡΠ·ΠΊΠΈ DLL, ΠΈ ΠΏΠΎΠ»ΡΡΠ΅Π½ΠΈΡ Π°Π΄ΡΠ΅ΡΠ° ΡΡΠ½ΠΊΡΠΈΠΈ, Π° ΠΏΡΠΈΠ²Π΅Π΄ΡΠΌ ΠΏΡΠΈΠΌΠ΅Ρ Π½Π΅ΠΏΠΎΡΡΠ΅Π΄ΡΡΠ²Π΅Π½Π½ΠΎΠ³ΠΎ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°Π½ΠΈΡ Π½Π°ΡΠ΅ΠΉ Π±ΠΈΠ±Π»ΠΈΠΎΡΠ΅ΠΊΠΈ.
ΠΡΡΡΡ Π±ΠΈΠ±Π»ΠΈΠΎΡΠ΅ΠΊΠ°, ΡΠΎΠ΄Π΅ΡΠΆΠ°ΡΠ°Ρ Π½Π΅ΠΎΠ±Ρ ΠΎΠ΄ΠΈΠΌΡΡ Π½Π°ΠΌ ΡΡΠ½ΠΊΡΠΈΡ KeyboardProc, Π½Π°Π·ΡΠ²Π°Π΅ΡΡΡ hooklib.dll.
#include
int WINAPI WinMain (HINSTANCE, HINSTANCE, LPSTR, int).
{.
HHOOK hHook;
HINSTANCE hLib;
HOOKPROC pKeybrdProc;
hLib = LoadLibrary («hooklib.dll »);
if (hLib == NULL).
return 0; //ΠΡΠΈΠ±ΠΊΠ°.
pKeybrdProc = reinterpret_cast (GetProcAddress (hLib, «KeyboardProc »));
if (pKeybrdProc == NULL) {.
FreeLibrary (hLib); //ΠΡΠΈΠ±ΠΊΠ°.
return 0;
}.
hHook = SetWindowsHookEx (WH_KEYBOARD, pKeybrdProc, hLib, 0);
if (hHook == NULL) {.
FreeLibrary (hLib); //ΠΡΠΈΠ±ΠΊΠ°.
return 0;
}.
//…
//GetMessage ΠΈ Ρ. Π΄. ΠΏΠΎΠΊΠ° Π½Π΅ ΠΏΠΎΡΡΡΠΏΠΈΡ WM_QUERYENDSESSION.
//…
UnhookWindowsHookEx (hHook);
FreeLibrary (hLib);
return 0;
}.
ΠΡΠΈΠΌΠ΅ΡΠ°ΡΠ΅Π»ΡΠ½ΠΎ, ΡΡΠΎ Π΄Π°Π½Π½ΡΠΉ ΠΌΠ΅ΡΠΎΠ΄ ΡΠ°Π±ΠΎΡΠ°Π΅Ρ ΠΈ Π² Windows NT/2000/XP, ΠΏΠΎΡΠΊΠΎΠ»ΡΠΊΡ ΡΡΠ½ΠΊΡΠΈΡ SetWindowsHookEx Π½Π΅ ΡΡΠ΅Π±ΡΠ΅Ρ Π½ΠΈΠΊΠ°ΠΊΠΈΡ ΠΏΡΠΈΠ²ΠΈΠ»Π΅Π³ΠΈΠΉ (Π½Π°ΠΏΡΠΈΠΌΠ΅Ρ SeDebugPrivilege) ΠΈ Π±ΡΠ΄Π΅Ρ ΡΠ°Π±ΠΎΡΠ°ΡΡ Π΄Π°ΠΆΠ΅ ΠΏΠΎΠ΄ ΠΎΠ±ΡΡΠ½ΡΠΌ ΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΠ΅Π»Π΅ΠΌ. ΠΡΠΎ ΠΌΠΎΠΆΠ½ΠΎ Π²ΠΎΡΠΏΡΠΈΠ½ΠΈΠΌΠ°ΡΡ ΠΊΠ°ΠΊ ΡΠ»Π°Π±ΠΈΠ½Ρ Π² ΡΠΈΡΡΠ΅ΠΌΠ΅ Π±Π΅Π·ΠΎΠΏΠ°ΡΠ½ΠΎΡΡΠΈ NT/2000/XP, ΠΏΠΎΡΠΊΠΎΠ»ΡΠΊΡ Π²ΡΡ ΠΆΠ΅ ΠΏΡΠΎΠΈΡΡ ΠΎΠ΄ΠΈΡ Π²Π½Π΅Π΄ΡΠ΅Π½ΠΈΠ΅ Π² Π°Π΄ΡΠ΅ΡΠ½ΠΎΠ΅ ΠΏΡΠΎΡΡΡΠ°Π½ΡΡΠ²ΠΎ ΠΏΡΠΎΡΠ΅ΡΡΠ°. (ΠΡΠΏΠΎΠΌΠ½ΠΈΠΌ Π°ΡΠ°ΠΊΡ GetAdmin, Π³Π΄Π΅ Ρ ΠΏΠΎΠΌΠΎΡΡΡ Π²Π½Π΅Π΄ΡΠ΅Π½ΠΈΡ Π² ΠΏΡΠΎΡΠ΅ΡΡ, Π² NT Π±Π΅Π· SP3 ΠΌΠΎΠΆΠ½ΠΎ Π±ΡΠ»ΠΎ ΠΏΠΎΠ»ΡΡΠΈΡΡ ΠΏΡΠ°Π²Π° Π°Π΄ΠΌΠΈΠ½ΠΈΡΡΡΠ°ΡΠΎΡΠ° ΠΏΠΎΠ΄ ΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΠ΅Π»Π΅ΠΌ guest!!!).
ΠΠΎΠ»Π΅Π΅ ΠΏΠΎΠ΄ΡΠΎΠ±Π½ΡΡ ΠΈΠ½ΡΠΎΡΠΌΠ°ΡΠΈΡ ΠΏΠΎ ΡΠΈΠ»ΡΡΡΠ°ΠΌ Π²Ρ ΠΌΠΎΠΆΠ΅ΡΠ΅ Π½Π°ΠΉΡΠΈ Π² MSDN, Π² ΡΡΠ°ΡΡΠ΅ «Win32 Hooks » .
ΠΠ°ΠΆΠ½ΡΠΌ ΠΌΠΎΠΌΠ΅Π½ΡΠΎΠΌ Π»ΡΠ±ΠΎΠΉ ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΡ ΡΠ°ΠΊΠΎΠ³ΠΎ ΡΠΎΠ΄Π° ΡΠ²Π»ΡΠ΅ΡΡΡ ΠΌΠ°ΡΠΊΠΈΡΠΎΠ²ΠΊΠ°.
Π Win95/98/Millennium ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΡ ΠΌΠΎΠΆΠ½ΠΎ ΡΠΊΡΡΡΡ ΠΈΠ· ΡΠΏΠΈΡΠΊΠ° Π·Π°Π΄Π°Ρ ΡΡΠ½ΠΊΡΠΈΠ΅ΠΉ RegisterServiceProcess, ΠΏΠΎΡΠ»Π΅ ΡΡΠΎΠ³ΠΎ ΠΎΠ½Π° Π½Π΅ Π±ΡΠ΄Π΅Ρ Π²ΠΈΠ΄Π½Π° Π² ΡΠΏΠΈΡΠΊΠ΅ Π·Π°Π΄Π°Ρ taskman «a, ΠΏΠΎΠΊΠ°Π·ΡΠ²Π°Π΅ΠΌΠΎΠΌ ΠΏΠΎ Π½Π°ΠΆΠ°ΡΠΈΠΈ «Ctrl + Alt + Del ». ΠΠ΄Π½Π°ΠΊΠΎ Π»ΡΠ±ΠΎΠΉ ΠΌΠ΅Π½Π΅Π΄ΠΆΠ΅Ρ ΠΏΡΠΎΡΠ΅ΡΡΠΎΠ² (ΠΊ ΠΏΡΠΈΠΌΠ΅ΡΡ, SysInfo) Π²ΡΡ ΡΠ°Π²Π½ΠΎ ΠΏΠΎΠΊΠ°ΠΆΠ΅Ρ Π½Π°ΡΡ ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΡ, ΠΏΠΎΡΡΠΎΠΌΡ ΠΏΡΠΈ Π½Π°ΠΏΠΈΡΠ°Π½ΠΈΠΈ Π½ΡΠΆΠ½ΠΎ ΡΠΎΠ·Π΄Π°Π²Π°ΡΡ ΠΈ ΠΈΠ½ΡΠΎΡΠΌΠ°ΡΠΈΡ ΠΎ Π²Π΅ΡΡΠΈΠΈ. Π’Π°ΠΊ Π±ΡΠ΄Π΅Ρ ΠΌΠ΅Π½Π΅Π΅ Π·Π°ΠΌΠ΅ΡΠ½Π΅ΠΉ. SysInfo ΡΠ°ΠΊΠΆΠ΅ ΠΎΠΏΡΠ΅Π΄Π΅Π»ΡΠ΅Ρ Π²ΡΠ΅ ΡΡΡΠ°Π½ΠΎΠ²Π»Π΅Π½Π½ΡΠ΅ Π² ΡΠΈΡΡΠ΅ΠΌΠ΅ Π»ΠΎΠ²ΡΡΠΊΠΈ. Π€ΡΠ½ΠΊΡΠΈΡ RegisterServiceProcess ΠΏΡΠΎΡΡΠΎ ΡΠ°ΠΊ Π²ΡΠ·Π²Π°ΡΡ Π½Π΅ ΡΠ΄Π°ΡΡΡΡ, ΠΏΠΎΡΠΊΠΎΠ»ΡΠΊΡ ΠΎΠ½Π° Π½Π΅ ΠΎΠ±ΡΡΠ²Π»Π΅Π½Π½Π° Π² windows. h (winuser.h ΠΈ Ρ. Π΄.). ΠΡ Π½ΡΠΆΠ½ΠΎ Π²ΡΠ·ΡΠ²Π°ΡΡ Π½Π°ΠΏΡΡΠΌΡΡ ΠΈΠ· KERNEL32.DLL. ΠΠ½Π° ΠΈΠΌΠ΅Π΅Ρ ΡΠ»Π΅Π΄ΡΡΡΠΈΠΉ ΠΏΡΠΎΡΠΎΡΠΈΠΏ:
DWORD RegisterServiceProcess (DWORD dwProcessId, DWORD dwType);
Π³Π΄Π΅ dwProcessId — Id ΠΏΡΠΎΡΠ΅ΡΡΠ° (0 — Π²ΡΠ·ΡΠ²Π°ΡΡΠΈΠΉ), Π° dwType = 1, Π΅ΡΠ»ΠΈ Π΄Π΅Π»Π°Π΅ΠΌ ΠΏΡΠΎΡΠ΅ΡΡ ΡΠ΅ΡΠ²ΠΈΡΠΎΠΌ, ΠΈ 0, Π΅ΡΠ»ΠΈ ΡΠ±ΠΈΡΠ°Π΅ΠΌ ΡΠ΅ΡΠ²ΠΈΡΠ½ΡΠ΅ ΡΠ²ΠΎΠΉΡΡΠ²Π°.
Π Π΅ΡΠΈΡΡ Π·Π°Π΄Π°ΡΡ ΠΌΠ°ΡΠΊΠΈΡΠΎΠ²ΠΊΠΈ Π² ΡΠΈΡΡΠ΅ΠΌΠ°Ρ NT/2000/XP ΠΊΡΠ΄Π° ΡΠ»ΠΎΠΆΠ½Π΅ΠΉ. ΠΠ΄Π½ΠΈΠΌ ΠΈΠ· ΡΠΏΠΎΡΠΎΠ±ΠΎΠ² ΠΌΠΎΠΆΠ½ΠΎ ΡΡΠΈΡΠ°ΡΡ ΠΏΠΎΠ΄ΠΌΠ΅Π½Ρ psapi. dll ΠΈΠ· WINNTsystem32 ΡΠ°ΠΊΠΈΠΌ ΠΎΠ±ΡΠ°Π·ΠΎΠΌ, ΡΡΠΎΠ±Ρ Π² Π·Π°ΠΏΠΈΡΠΈ Π΄Π»Ρ ΡΡΠ½ΠΊΡΠΈΠΈ EnumProcesses Π² ΡΠ°Π±Π»ΠΈΡΠ΅ ΡΠΊΡΠΏΠΎΡΡΠ° ΡΡΠΎΠΉ dll, ΡΠΎΡΠΊΠ° Π²Ρ ΠΎΠ΄Π° (entry point) ΡΠΊΠ°Π·ΡΠ²Π°Π»Π° Π½Π΅ Π½Π° Π½Π°ΡΡΠΎΡΡΡΡ ΡΠ΅Π°Π»ΠΈΠ·Π°ΡΠΈΡ ΡΡΠΎΠΉ ΡΡΠ½ΠΊΡΠΈΠΈ, Π½Π° Π½Π΅ΠΊΠΎΡΠΎΡΡΡ ΡΠΎΠ±ΡΡΠ²Π΅Π½Π½ΡΡ, Ρ ΠΏΠΎΡΠ»Π΅Π΄ΡΡΡΠΈΠΌ Π²ΡΠ·ΠΎΠ²ΠΎΠΌ ΠΎΡΠΈΠ³ΠΈΠ½Π°Π»Π°. ΠΠ΄Π½Π°ΠΊΠΎ ΡΡΠΎΡ ΠΌΠ΅Ρ Π°Π½ΠΈΠ·ΠΌ Π½Π΅ Π±ΡΠ΄Π΅Ρ ΡΠ°Π±ΠΎΡΠ°ΡΡ Π΄Π»Ρ ΡΠ΅Ρ ΠΏΡΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠΉ, ΠΊΠΎΡΠΎΡΡΠ΅ «ΠΆΠ΅ΡΡΠΊΠΎ «ΡΠ²ΡΠ·Π°Π½Ρ Ρ psapi. dll Ρ ΠΏΠΎΠΌΠΎΡΡΡ ΡΡΠΈΠ»ΠΈΡΡ bind.exe.
Π’ΠΎΡΠΊΠΈ Π²Ρ ΠΎΠ΄Π° Π΄Π»Ρ ΠΊΠ°ΠΆΠ΄ΠΎΠΉ ΡΠΊΡΠΏΠΎΡΡΠΈΡΡΠ΅ΠΌΠΎΠΉ ΡΡΠ½ΠΊΡΠΈΠΈ ΠΈΠ· Π»ΡΠ±ΠΎΠΉ dll ΠΌΠΎΠΆΠ½ΠΎ ΠΏΠΎΡΠΌΠΎΡΡΠ΅ΡΡ Ρ ΠΏΠΎΠΌΠΎΡΡΡ ΡΡΠΈΠ»ΠΈΡΡ depends Π²Ρ ΠΎΠ΄ΡΡΠΈΠΉ Π² ΠΏΠΎΡΡΠ°Π²ΠΊΡ Platform SDK.
Π’Π°ΠΊΠΆΠ΅ ΡΡΠΈΡΠ°Ρ ΡΠΌΠ΅ΡΡΠ½ΡΠΌ ΡΠ°ΡΡΠΊΠ°Π·Π°ΡΡ Π² Π΄Π°Π½Π½ΠΎΠΉ ΡΡΠ°ΡΡΠ΅, ΠΊΠ°ΠΊ ΡΠ΄Π΅Π»Π°ΡΡ ΠΊΠ΅ΠΉΠ»ΠΎΠ³Π³Π΅Ρ Π΄Π»Ρ NT/2000/XP ΡΠ°ΠΊ, ΡΡΠΎΠ±Ρ ΠΎΠ½ ΠΌΠΎΠ³ ΠΏΠΎΠ»ΡΡΠ°ΡΡ ΠΈΠ½ΡΠΎΡΠΌΠ°ΡΠΈΡ (ΠΈΠΌΡ ΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΠ΅Π»Ρ ΠΈ ΠΏΠ°ΡΠΎΠ»Ρ), ΠΊΠΎΡΠΎΡΠ°Ρ Π½Π°Π±ΠΈΡΠ°Π΅ΡΡΡ Ρ ΠΊΠ»Π°Π²ΠΈΠ°ΡΡΡΡ ΠΏΡΠΈ Π²Ρ ΠΎΠ΄Π΅ ΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΠ΅Π»Ρ Π² ΡΠΈΡΡΠ΅ΠΌΡ. ΠΠ°Π½Π½Π°Ρ Π·Π°Π΄Π°ΡΠ° ΠΎΡΠ»ΠΎΠΆΠ½ΡΠ΅ΡΡΡ Π΄Π²ΡΠΌΡ ΡΠ°ΠΊΡΠΎΡΠ°ΠΌΠΈ:
Π‘ΠΈΡΡΠ΅ΠΌΠ° ΠΎΡΠΎΠ±ΡΠ°ΠΆΠ°Π΅Ρ ΠΏΡΠΈΠ³Π»Π°ΡΠ΅Π½ΠΈΠ΅ Π½Π° Π²Ρ ΠΎΠ΄ (Π½Π°ΠΆΠΌΠΈΡΠ΅ Ctrl+Alt+Del ΠΈ Ρ. Π΄.) Π΄ΠΎ Π·Π°ΠΏΡΡΠΊΠ° Π»ΡΠ±ΠΎΠ³ΠΎ ΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΠ΅Π»ΡΡΠΊΠΎΠ³ΠΎ ΠΏΡΠΎΡΠ΅ΡΡΠ°. Π’ΠΎ Π΅ΡΡΡ, Π΅ΡΠ»ΠΈ Π²Π°ΡΠ° ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΠ°-ΡΠΏΠΈΠΎΠ½ Π·Π°ΠΏΡΡΠΊΠ°Π΅ΡΡΡ Π°Π²ΡΠΎΠΌΠ°ΡΠΈΡΠ΅ΡΠΊΠΈ ΠΈΠ»ΠΈ ΠΈΠ· ΡΠΈΡΡΠ΅ΠΌΠ½ΠΎΠΉ ΠΏΠ°ΠΏΠΊΠΈ Startup ΠΈΠ»ΠΈ ΠΈΠ· ΡΠ°Π·Π΄Π΅Π»Π° ΡΠ΅Π΅ΡΡΡΠ° Run ΠΈΠ»ΠΈ ΠΈΠ· Π½Π΅ΠΊΠΎΡΠΎΡΡΡ ΡΠΈΡΡΠ΅ΠΌΠ½ΡΡ ini-ΡΠ°ΠΉΠ»ΠΎΠ², ΡΠΎ ΠΎΠ½Π° Π½Π΅ ΡΠΌΠΎΠΆΠ΅Ρ ΠΏΠΎΠ»ΡΡΠΈΡΡ ΠΈΠ½ΡΠΎΡΠΌΠ°ΡΠΈΡ, ΠΎ ΠΊΠΎΡΠΎΡΠΎΠΉ ΠΈΠ΄Π΅Ρ ΡΠ΅ΡΡ, ΠΏΡΠΎΡΡΠΎ ΠΏΠΎΡΠΎΠΌΡ, ΡΡΠΎ Π΅Π΅ Π·Π°ΠΏΡΡΠΊ ΠΏΡΠΎΠΈΠ·ΠΎΠΉΠ΄Π΅Ρ ΡΠΆΠ΅ ΠΏΠΎΡΠ»Π΅ ΡΠΎΠ³ΠΎ, ΠΊΠ°ΠΊ ΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΠ΅Π»Ρ Π²ΠΎΡΠ΅Π» Π² ΡΠΈΡΡΠ΅ΠΌΡ. ΠΡΠΈ ΠΏΠΎΠΏΡΡΠΊΠ΅ Π·Π°Π²Π΅ΡΡΠΈΡΡ ΡΠ΅Π°Π½Ρ ΡΠ°Π±ΠΎΡΡ ΠΈ Π²ΠΎΠΉΡΠΈ ΠΏΠΎΠ΄ Π΄ΡΡΠ³ΠΈΠΌ ΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΠ΅Π»Π΅ΠΌ, Π²Π°ΡΠ° ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΠ° ΡΠ°ΠΊ ΠΆΠ΅ Π±ΡΠ΄Π΅Ρ Π·Π°Π²Π΅ΡΡΠ΅Π½Π° ΠΈ Π·Π°ΠΏΡΡΠ΅Π½Π° ΠΏΠΎΡΠ»Π΅ ΡΠ΅Π³ΠΈΡΡΡΠ°ΡΠΈΠΈ ΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΠ΅Π»Ρ Π² ΡΠΈΡΡΠ΅ΠΌΠ΅.
ΠΠΊΠ½ΠΎ Π²Π²ΠΎΠ΄Π° ΠΏΠ°ΡΠΎΠ»Ρ ΠΈ Π²Ρ ΠΎΠ΄Π½ΠΎΠ³ΠΎ ΠΈΠΌΠ΅Π½ΠΈ (ΡΠ°ΠΊΠΆΠ΅ ΠΊΠ°ΠΊ ΠΈ ΠΎΠΊΠ½ΠΎ ΠΏΡΠΈΠ³Π»Π°ΡΠ΅Π½ΠΈΡ) Π·Π°ΡΠΈΡΠ΅Π½ΠΎ ΠΎΡΠ΄Π΅Π»ΡΠ½ΡΠΌ ΠΌΠ΅Ρ Π°Π½ΠΈΠ·ΠΌΠΎΠΌ windows, Π½Π°Π·ΡΠ²Π°Π΅ΠΌΡΠΌ «ΡΠ°Π±ΠΎΡΠΈΠΉ ΡΡΠΎΠ» «(Desktop — ΠΎΠΏΡΡΡ ΠΆΠ΅, ΡΠΌΠΎΡΡΠΈΡΠ΅ MSDN) ΠΈ ΠΏΡΠΎΡΠ΅ΡΡΡ, Π·Π°ΠΏΡΡΠ΅Π½Π½ΡΠ΅ ΠΈΠ·-ΠΏΠΎΠ΄ Π΄ΡΡΠ³ΠΈΡ ΡΠ°Π±ΠΎΡΠΈΡ ΡΡΠΎΠ»ΠΎΠ², ΡΠΈΠ·ΠΈΡΠ΅ΡΠΊΠΈ Π½Π΅ ΠΈΠΌΠ΅ΡΡ Π΄ΠΎΡΡΡΠΏΠ° ΠΊ ΡΡΠΈΠΌ ΠΎΠΊΠ½Π°ΠΌ. (Π΄Π°ΠΆΠ΅ ΡΡΠ½ΠΊΡΠΈΡ FindWindow ΠΈΡ Π½Π΅ Π½Π°ΠΉΠ΄Π΅Ρ). Π’Π°ΠΊΠΈΠΌ ΠΎΠ±ΡΠ°Π·ΠΎΠΌ, ΠΈ ΡΠΈΠ»ΡΡΡ, ΡΡΡΠ°Π½ΠΎΠ²Π»Π΅Π½Π½ΡΠΉ ΡΡΠ½ΠΊΡΠΈΠ΅ΠΉ SetWindowsHookEx, Π½Π΅ Π±ΡΠ΄Π΅Ρ ΡΡΠ°Π±Π°ΡΡΠ²Π°ΡΡ Π½Π° Π΄Π΅ΠΉΡΡΠ²ΠΈΡ Π² ΠΈΠ½ΡΠ΅ΡΠ΅ΡΡΡΡΠΈΡ Π½Π°Ρ ΠΎΠΊΠ½Π°Ρ .
ΠΠ»Ρ ΡΠ΅ΡΠ΅Π½ΠΈΡ ΡΡΠΈΡ ΠΏΡΠΎΠ±Π»Π΅ΠΌ ΠΏΡΠ΅Π΄Π»Π°Π³Π°Ρ ΡΠ»Π΅Π΄ΡΡΡΠΈΠΉ ΠΌΠ΅Ρ Π°Π½ΠΈΠ·ΠΌ:
ΠΠΎ-ΠΏΠ΅ΡΠ²ΡΡ , ΠΏΡΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅, ΡΡΡΠ°Π½Π°Π²Π»ΠΈΠ²Π°ΡΡΠ΅Π΅ ΡΠΈΠ»ΡΡΡ ΠΊΠ»Π°Π²ΠΈΡ, Π΄ΠΎΠ»ΠΆΠ½ΠΎ Π±ΡΡΡ ΠΎΡΠΎΡΠΌΠ»Π΅Π½ΠΎ Π² Π²ΠΈΠ΄Π΅ ΡΠ΅ΡΠ²ΠΈΡΠ° Win32. (ΠΠ°ΠΊ ΡΠ΄Π΅Π»Π°ΡΡ ΡΠ΅ΡΠ²ΠΈΡ ΠΌΠΎΠΆΠ½ΠΎ ΠΏΡΠΎΡΠΈΡΠ°ΡΡ Π² MSDN — Π³Π»Π°Π²Π° «Services «ΡΠ°Π·Π΄Π΅Π»Π° «Platform SDK: DLLs, Processes and Threads » .).
ΠΠΎ-Π²ΡΠΎΡΡΡ , ΡΠ΅ΡΠ²ΠΈΡ Π΄ΠΎΠ»ΠΆΠ΅Π½ Π±ΡΡΡ Π·Π°ΡΠ΅Π³ΠΈΡΡΡΠΈΡΠΎΠ²Π°Π½ ΠΊΠ°ΠΊ Π·Π°ΠΏΡΡΠΊΠ°Π΅ΠΌΡΠΉ Π°Π²ΡΠΎΠΌΠ°ΡΠΈΡΠ΅ΡΠΊΠΈ (SERVICE_AUTO_START — ΡΠΌΠΎΡΡΠΈΡΠ΅ ΠΎΠΏΠΈΡΠ°Π½ΠΈΠ΅ ΡΡΠ½ΠΊΡΠΈΠΈ CreateService); Π½Ρ ΠΈ ΠΌΠ½ΠΎΠ³ΠΎ ΠΆΠ΅ ΠΏΡΠ°Π² Π²Π°ΠΌ ΠΏΠΎΠ½Π°Π΄ΠΎΠ±ΠΈΡΡΡΡ, ΡΡΠΎ Π±Ρ Π·Π°ΡΠ΅Π³ΠΈΡΡΡΠΈΡΠΎΠ²Π°ΡΡ ΡΠ΅ΡΠ²ΠΈΡ ;-). ΠΡ Π½ΠΈΡΠ΅Π³ΠΎ, Π²ΡΠ΅Π³Π΄Π° Π½Π°ΠΉΠ΄ΡΡΡΡ ΠΎΡΠΈΠ±ΠΊΠΈ ΠΏΠ΅ΡΠ΅ΠΏΠΎΠ»Π½Π΅Π½ΠΈΡ Π±ΡΡΠ΅ΡΠ° ΠΈ Ρ. Π΄. Π ΠΊΠΎΠ½ΡΠ΅ — ΠΊΠΎΠ½ΡΠΎΠ², ΠΌΠΎΠΆΠ½ΠΎ ΠΏΠΎΠΏΡΡΠ°ΡΡ ΡΡΠ°ΡΡΡΠ΅ Π² ΡΠΎΡΠΈΠ°Π»ΡΠ½ΠΎΠΉ ΠΈΠ½ΠΆΠ΅Π½Π΅ΡΠΈΠΈ.
Π Π½Π°ΠΊΠΎΠ½Π΅Ρ, ΡΠ°ΠΌΠΎΠ΅ Π³Π»Π°Π²Π½ΠΎΠ΅: ΠΠΌΡ ΡΠ°Π±ΠΎΡΠ΅Π³ΠΎ ΡΡΠΎΠ»Π° c ΠΎΠΊΠ½ΠΎΠΌ Π²Π²ΠΎΠ΄Π° ΠΏΠ°ΡΠΎΠ»Ρ — «Winlogon «ΠΈ ΠΎΠ½ Π½Π°Ρ ΠΎΠ΄ΠΈΡΡΡ Π² ΠΈΠ½ΡΠ΅ΡΠ°ΠΊΡΠΈΠ²Π½ΠΎΠΉ «ΠΎΠΊΠΎΠ½Π½ΠΎΠΉ ΡΡΠ°Π½ΡΠΈΠΈ «(window station) c ΠΈΠΌΠ΅Π½Π΅ΠΌ «Winsta0 ». Π’Π°ΠΊΠΈΠΌ ΠΎΠ±ΡΠ°Π·ΠΎΠΌ, ΡΡΠΎΠ±Ρ ΠΏΡΠΎΡΠ΅ΡΡ (ΡΠΎΡΠ½Π΅Π΅ Π΅Π³ΠΎ ΠΏΠΎΡΠΎΠΊ) ΠΌΠΎΠ³ ΠΏΠΎΠΏΠ°ΡΡΡ Π² Π΄Π°Π½Π½ΡΠΉ ΡΠ°Π±ΠΎΡΠΈΠΉ ΡΡΠΎΠ» ΠΈ ΡΡΡΠ°Π½ΠΎΠ²ΠΈΡΡ ΡΠ°ΠΌ Π»ΠΎΠ²ΡΡΠΊΡ Π½ΡΠΆΠ½ΠΎ Π²ΠΎΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΡΡΡ ΡΡΠ½ΠΊΡΠΈΡΠΌΠΈ Win32 API OpenWindowStation, SetProcessWindowStation, OpenDesktop ΠΈ SetThreadDesktop. (cΠΌ. ΠΠ»Π°Π²Ρ «Interactive Services «ΠΈΠ· MSDN). ΠΡΠ»ΠΈ ΡΡΠΈ ΡΡΠ½ΠΊΡΠΈΠΈ Π²ΡΠ·ΡΠ²Π°ΡΡ ΠΈΠ·-ΠΏΠΎΠ΄ ΡΠ΅ΡΠ²ΠΈΡΠ°, Π·Π°ΠΏΡΡΠΊΠ°Π΅ΠΌΠΎΠ³ΠΎ ΠΏΠΎΠ΄ System — ΡΡΠ°Π½Π΄Π°ΡΡΠ½ΠΎΠ΅ ΠΏΠΎΠ²Π΅Π΄Π΅Π½ΠΈΠ΅ ΠΏΠΎΡΠ»Π΅ ΡΠ΅Π³ΠΈΡΡΡΠ°ΡΠΈΠΈ Ρ ΠΏΠΎΠΌΠΎΡΡΡ CreateService Ρ ΠΏΡΠ΅Π΄ΠΏΠΎΡΠ»Π΅Π΄Π½ΠΈΠΌ ΠΏΠ°ΡΠ°ΠΌΠ΅ΡΡΠΎΠΌ ΡΠ°Π²Π½ΡΠΌ NULL, ΡΠΎ ΠΏΡΠ°Π² Ρ Π²Π°ΡΠΈΡ ΡΠΏΠΎΠ»Π½Π° ΠΈ Π΄Π»Ρ Π²ΡΠ·ΠΎΠ²Π° ΡΡΠΈΡ ΡΡΠ½ΠΊΡΠΈΠΉ ΠΈ Π΄Π»Ρ ΡΡΡΠ°Π½ΠΎΠ²ΠΊΠΈ Π»ΠΎΠ²ΡΡΠΊΠΈ ΡΠ°ΠΊ, ΡΡΠΎΠ±Ρ ΠΎΠ½Π° ΠΎΠ±ΡΠ°Π±Π°ΡΡΠ²Π°Π»Π° ΠΈΠ½ΡΠ΅ΡΠ΅ΡΡΡΡΠΈΠ΅ Π½Π°Ρ ΠΎΠΊΠ½Π° ΠΏΡΠΎΡΠ΅ΡΡΠ° Winlogon.exe. Π ΠΊΠ°ΡΠ΅ΡΡΠ²Π΅ ΠΏΠ°ΡΠ°ΠΌΠ΅ΡΡΠΎΠ², ΠΊΠΎΡΠΎΡΡΠ΅ ΠΎΠ±ΠΎΠ·Π½Π°ΡΠ°ΡΡ ΠΈΠΌΠ΅Π½Π° ΡΡΠΈΡ ΠΎΠ±ΡΠ΅ΠΊΡΠΎΠ² (ΡΠ°Π±ΠΎΡΠΈΠΉ ΡΡΠΎΠ», ΠΎΠΊΠΎΠ½Π½Π°Ρ ΡΡΠ°Π½ΡΠΈΡ), Π½ΡΠΆΠ½ΠΎ Π·Π°Π΄Π°ΡΡ ΠΏΡΠΈΠ²Π΅Π΄Π΅Π½Π½ΡΠ΅ Π²ΡΡΠ΅ Π·Π½Π°ΡΠ΅Π½ΠΈΡ. ΠΠ΅Ρ Π°Π½ΠΈΠ·ΠΌ ΠΏΠΎΠ΄ΠΊΠ»ΡΡΠ΅Π½ΠΈΡ ΠΊ ΡΠ°Π±ΠΎΡΠ΅ΠΌΡ ΡΡΠΎΠ»Ρ Π΄ΠΎΠ»ΠΆΠ΅Π½ ΠΏΡΠ΅Π΄ΡΠ΅ΡΡΠ²ΠΎΠ²Π°ΡΡ Π²ΡΠ·ΠΎΠ²Ρ ΡΡΠ½ΠΊΡΠΈΠΈ SetWindowsHookEx. ΠΡΠΈΠΌΠ΅ΡΠ°Π½ΠΈΠ΅: Π½Π΅ Π·Π°Π±ΡΠ΄ΡΡΠ΅ Π΄ΠΎΠ±Π°Π²ΠΈΡΡ ΠΎΡΠ΄Π΅Π»ΡΠ½ΡΠΉ ΠΏΠΎΡΠΎΠΊ Π½Π° ΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΠ΅Π»ΡΡΠΊΠΈΠΉ ΡΠ°Π±ΠΎΡΠΈΠΉ ΡΡΠΎΠ» — «default «ΠΈΠ· «Winsta0 », ΠΈΠ½Π°ΡΠ΅ Π»ΠΎΠ²ΡΡΠΊΠ° Π½Π΅ ΡΠΌΠΎΠΆΠ΅Ρ ΡΠ΅Π³ΠΈΡΡΡΠΈΡΠΎΠ²Π°ΡΡ Π΄Π΅ΠΉΡΡΠ²ΠΈΡ ΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΠ΅Π»Ρ ΠΏΠΎΡΠ»Π΅ Π²Ρ ΠΎΠ΄Π° Π² ΡΠΈΡΡΠ΅ΠΌΡ. Π’Π°ΠΊΠΆΠ΅ Ρ ΠΎΡΡ ΠΎΡΠΌΠ΅ΡΠΈΡΡ, ΡΡΠΎ Π΄Π»Ρ Π½Π΅ ΠΈΠ½ΡΠ΅ΡΠ°ΠΊΡΠΈΠ²Π½ΡΡ ΡΠ΅ΡΠ²ΠΈΡΠΎΠ² ΡΠΈΡΡΠ΅ΠΌΠΎΠΉ ΡΠΎΠ·Π΄Π°Π΅ΡΡΡ ΠΎΡΠ΄Π΅Π»ΡΠ½Π°Ρ ΠΎΠΊΠΎΠ½Π½Π°Ρ ΡΡΠ°Π½ΡΠΈΡ ΠΈ ΡΠ°Π±ΠΎΡΠΈΠΉ ΡΡΠΎΠ», Π² ΠΊΠΎΡΠΎΡΠΎΠΌ ΠΎΠ½ΠΈ ΠΈ Π·Π°ΠΏΡΡΠΊΠ°ΡΡΡΡ. Π’ΠΎ Π΅ΡΡΡ, Π±Π΅Π· ΠΏΠΎΠ΄ΠΊΠ»ΡΡΠ΅Π½ΠΈΡ ΠΊ Π½Π΅ΠΊΠΎΡΠΎΡΠΎΠΌΡ ΡΠ΅Π°Π»ΡΠ½ΠΎΠΌΡ ΡΠ°Π±ΠΎΡΠ΅ΠΌΡ ΡΡΠΎΠ»Ρ, Π²ΡΠ·ΡΠ²Π°ΡΡ ΡΡΠ½ΠΊΡΠΈΡ SetWindowsHookEx ΠΈΠ· ΡΠ΅ΡΠ²ΠΈΡΠ° Π½Π΅ ΠΈΠΌΠ΅Π΅Ρ ΡΠΌΡΡΠ»Π°.
ΠΡΠΈΠ²Π΅Π΄Ρ Π½Π΅Π±ΠΎΠ»ΡΡΠΎΠΉ ΠΏΡΠΈΠΌΠ΅Ρ ΡΠ΅Π°Π»ΠΈΠ·Π°ΡΠΈΠΈ ΡΠ΅ΡΠ²ΠΈΡΠ° ΠΈ ΠΏΠΎΠ΄ΠΊΠ»ΡΡΠ΅Π½ΠΈΡ ΠΊ ΡΠ°Π±ΠΎΡΠ΅ΠΌΡ ΡΡΠΎΠ»Ρ. Π Π΄Π°Π½Π½ΠΎΠΌ ΠΏΡΠΈΠΌΠ΅ΡΠ΅ Ρ ΠΎΠΏΡΡΡΠΈΠ» Π²ΡΡ ΠΎΠ±ΡΠ°Π±ΠΎΡΠΊΡ ΠΎΡΠΈΠ±ΠΎΠΊ.
#include.
void WINAPI MyServiceStart (DWORD, LPTSTR *);
void WINAPI MyServiceCtrlHandler (DWORD);
void ServiceWorkFunction ();
SERVICE_STATUS_HANDLE MyServiceStatusHandle;
int WINAPI WinMain (HINSTANCE, HINSTANCE, LPSTR, int).
{.
SERVICE_TABLE_ENTRY DispatchTable[] = {{ «MyService », MyServiceStart},.
{NULL, NULL}};
//ΠΡΠ·ΡΠ²Π°Π΅ΠΌ ΡΠΎΡΠΊΡ Π²Ρ ΠΎΠ΄Π° ΡΠ΅ΡΠ²ΠΈΡΠ°.
StartServiceCtrlDispatcher (DispatchTable);
}.
void WINAPI MyServiceStart (DWORD, LPTSTR *).
{.
SERVICE_STATUS MyServiceStatus = {0};
MyServiceStatus. dwServiceType = SERVICE_WIN32;
MyServiceStatus. dwCurrentState = SERVICE_RUNNING;
//Π Π΅Π³ΠΈΡΡΡΠΈΡΡΠ΅ΠΌ ΠΎΠ±ΡΠ°Π±ΠΎΡΡΠΈΠΊ ΡΠΎΠ±ΡΡΠΈΠΉ ΡΠ΅ΡΠ²ΠΈΡΠ°.
MyServiceStatusHandle = RegisterServiceCtrlHandler («MyService » ,.
MyServiceCtrlHandler);
SetServiceStatus (MyServiceStatusHandle, &MyServiceStatus);
ServiceWorkFunction ();
}.
void WINAPI MyServiceCtrlHandler (DWORD).
{.
SERVICE_STATUS MyServiceStatus = {0};
MyServiceStatus. dwServiceType = SERVICE_WIN32;
MyServiceStatus. dwCurrentState = SERVICE_RUNNING;
SetServiceStatus (MyServiceStatusHandle, &MyServiceStatus);
}.
void ServiceWorkFunction ().
{.
HWINSTA hWS;
HDESK hDT;
//ΠΠΎΠ΄ΠΊΠ»ΡΡΠ°Π΅ΠΌΡΡ ΠΊ ΠΎΠΊΠΎΠ½Π½ΠΎΠΉ ΡΡΠ°Π½ΡΠΈΠΈ.
hWS = OpenWindowStation («Winsta0 », FALSE, GENERIC_ALL);
SetProcessWindowStation (hWS);
//ΠΠΎΠ΄ΠΊΠ»ΡΡΠ°Π΅ΠΌΡΡ ΠΊ ΡΠ°Π±ΠΎΡΠ΅ΠΌΡ ΡΡΠΎΠ»Ρ.
hDT = OpenDesktop («Winlogon », 0, FALSE, GENERIC_ALL);
SetThreadDesktop (hDT);
//SetWindowsHookEx ΠΈ Ρ. Π΄.
}.
ΠΠΎΠΏΡΠΎΡΡ ΠΏΡΠΈΡΡΠ»Π°ΠΉΡΠ΅ Π½Π° e-mail: internet.
P.S.
ΠΡΠ΅ΠΌ ΠΆΠ΅Π»Π°ΡΡΠΈΠΌ ΡΠΎΠ·Π΄Π°Π²Π°ΡΡ ΠΏΠΎΠ΄ΠΎΠ±Π½ΡΠ΅ ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΡ Ρ ΠΎΡΡ ΠΏΠΎΡΠ΅ΠΊΠΎΠΌΠ΅Π½Π΄ΠΎΠ²Π°ΡΡ Π½Π΅ΡΠΊΠΎΠ»ΡΠΊΠΎ Π·Π°ΠΌΠ΅ΡΠ°ΡΠ΅Π»ΡΠ½ΡΡ ΠΊΠ½ΠΈΠ³:
Π‘ΠΏΠΈΡΠΎΠΊ Π»ΠΈΡΠ΅ΡΠ°ΡΡΡΡ
" ΠΠ½ΡΡΡΠ΅Π½Π½Π΅Π΅ ΡΡΡΡΠΎΠΉΡΡΠ²ΠΎ Windows 2000 ", Π. Π‘ΠΎΠ»ΠΎΠΌΠΎΠ½, Π. Π ΡΡΡΠΈΠ½ΠΎΠ²ΠΈΡ.
" ΠΡΠΎΠ³ΡΠ°ΠΌΠΌΠΈΡΠΎΠ²Π°Π½ΠΈΠ΅ ΡΠ΅ΡΠ²Π΅ΡΠ½ΡΡ ΠΏΡΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠΉ Π΄Π»Ρ Windows 2000 ", ΠΠΆ. Π ΠΈΡ ΡΠ΅Ρ, ΠΠΆ. ΠΠ»Π°ΡΠΊ.
" Windows Π΄Π»Ρ ΠΏΡΠΎΡΠ΅ΡΡΠΈΠΎΠ½Π°Π»ΠΎΠ² ", ΠΠΆ. Π ΠΈΡ ΡΠ΅Ρ
Π° ΡΠ°ΠΊΠΆΠ΅ ΡΡΠΈΠ»ΠΈΡΡ procexp. exe ΠΈ winobj. exe ΠΎΡ sysinternals.