ΠŸΠΎΠΌΠΎΡ‰ΡŒ Π² написании студСнчСских Ρ€Π°Π±ΠΎΡ‚
АнтистрСссовый сСрвис

РСализация 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.

ΠŸΠΎΠΊΠ°Π·Π°Ρ‚ΡŒ вСсь тСкст
Π—Π°ΠΏΠΎΠ»Π½ΠΈΡ‚ΡŒ Ρ„ΠΎΡ€ΠΌΡƒ Ρ‚Π΅ΠΊΡƒΡ‰Π΅ΠΉ Ρ€Π°Π±ΠΎΡ‚ΠΎΠΉ